2011-08-02 12 views
0

これは適切な場所かどうかはわかりませんが、一般的なプログラミングの質問ですこれまでにエンタープライズアプリケーションを開発してきたユーザーのうちのいくつかがこの前に出てきました。私が働いている会社は現在、注文の税金を集めるための「標準」モデルを使用しています:都市/州/ジップ(郡を含めることができます)。米国税に関する具体的なプログラミングに関する質問(例:Zip + 4または都市/都道府県など)

私はいくつかのサイトを見てきましたが、いくつかの異なる税金パッケージを提供しています。これは素晴らしいものです。しかし、私たちの要件に合っていると思われる唯一のものはZip + 4です。私たちはおそらくこのb/cを必要とします。テキサスのいくつかの都市では6つの税 "地区"があり、そのうちいくつかは重複しています。したがって、Zip + 4は理想的ですが、データを見た後、Texasだけで300Mbに近い値になります(これを50倍するとデータベースにひどいクエリが発生します)。

残念ながら、1回の呼び出しでWebサービスを使用することはできず、SQLサーバー(またはその他の)データベースを設定することはできません。私たちの1つのシステムは比較的曖昧なデータベース+ dev環境です。したがって、何らかの理由でSQL ServerデータベースまたはWebサービスがダウンした場合、注文を処理することはできません。

他に誰かがこれに遭遇しましたか?ちょうど税金に捧げられた大量のデータベースはばかげているようですが、残念ながら私はWebサービスを使用することはできません。

誰にもアイデアはありますか?私は本当にこれに固執しています...

ありがとうございます!!!

+0

300MBのファイルは正確には何ですか?注文の単純な売上税を計算しようとしているだけですか、複雑なルールをナビゲートしていますか? –

+0

入力した住所からzip + 4を確認しようとしていますか? – JustinKSU

答えて

3

税金を計算することは、さまざまな理由から簡単です。すでに税理区について言及しています。その他の理由には、

  1. 商品固有の税金が含まれます。たとえば、ニュージャージー州は衣料品に税金を課さなかった。
  2. 税金休暇の週末。学校の直前の非常に一般的な例です。例えば、
  3. ポリシーに基づいた控除。高効率機器のための控除のように

したがって、パッケージを購入してそれと統合することは本当に良い考えです。メンテナンスライセンスを購入すれば、メタデータの更新を毎年取得することができます。

プログラミングの観点からは、税金を計算するためにツリーのような構造を使用することができます。ここで私はそれを設定する方法です。このような

まず、定義するいくつかの構造:

public class AddedTaxes { 
    public void add(double amount, double description) { ... } 
} 

public interface TaxAdder extends Serializable { 
    void configure(Map<String, String> settings); 
    add(double preTax, AddedTaxes taxes, Object productDetails); 
} 

第二に、加算器の必要な一連の構築:

public class FixedRate implements TaxAdder { 
    private double _rate; 
    private String _description; 
    public void configure(Map<String, String> settings) { 
    _rate = Double.parseDouble(settings.get("rate%"))/100.0; 
    _description = settings.get("desc"); 
    } 
    public add(double preTax, AddedTaxes taxes, Object productDetails) { 
    taxes.add(preTax * _rate, _description); 
    } 
} 

public class FixedProductSpecific implements TaxAdder { 
    private double _amount; 
    private String _product; 
    private String _description; 
    public void configure(Map<String, String> settings) { 
    _amount = Double.parseDouble(settings.get("amount")); 
    _product = settings.get("product"); 
    _description = settings.get("desc"); 
    } 
    public add(double preTax, AddedTaxes taxes, Object productDetails) { 
    if (_product.equals(productDetails)) { 
     taxes.add(_amount, _description); 
    } 
    } 
} 

第三に、私は1つの以上のヒト消耗品に税金のルールをキャプチャするだろうしファイル:

// zip code range <tab> adderClassName <tab> parameters 
// general texas taxes 
75000.0000-79999.9999  FixedRate  rate%=8.25, desc=Sales tax 
78700.0000-78999.9999  FixedProductSpecific amount=2.00 product=LeadAcidBattery desc=Lead acid battery sales 
... 

このデータは、データの「コンパイル」ステップを実行できます。たとえば、10-wayツリーを構築します。各ノード(葉だけでなく)には、TaxAddersのリストがあります。この場合、7/8/7,7/8/8および7/8/9ノードだけが第2の加算器を有するが、7/5,7/6、 '7/7'、...は第1の加算器を有することになる。

完全な構造が組み立てられたら、シリアル化してください。コンパイルが完了しました。実行時には、シリアライズされた計算構造体をロードするだけで、与えられたzip + 4に対して木をたどって該当する電卓を見つけることができます。

データを維持したくない場合は、私が話している種類の変換を受けて、「コンパイル済み」計算構造を構築できます。

私はあなたが好きならもっと詳細を追加することができますが、これが興味のある方向に向いていることを知るまで、私はそれを延期しています。

+0

これはどのようにして彼の質問に答えますか? – JustinKSU

+0

@ジャスティン、私は、なぜそれを専門とする第三者の製品を使用することを検討すべきか、2.データベース内の大規模なハイパーキューブから問題をコンパクトなコンパイル形式に変換する方法、3.彼が彼自身の課税ルール文書を習得していないので、コンパイルを可能にする形式に翻訳することができます。私の書き込みのどの部分が明確でないか - 必要に応じて明確にしたいと思います。 –

関連する問題