关于美国税收的具体规划问题(例如:Zip + 4或城市/州/等)

时间:2011-08-02 19:56:22

标签: c# java enterprise

我不确定这是否是一个正确的问题,但这是一个通用的编程问题,我相信很多开发企业应用程序之前已经遇到过这个问题。我工作的公司目前正在使用“标准”模式来收取订单税:城市/州/邮政(我们可能包括郡)。

我查看了几个网站,他们提供了几个不同的税包,这很棒。但是,唯一符合我们要求的是Zip + 4。我们可能需要这个b / c德克萨斯州的一些城市将有6个税收“地区”,其中一些重叠。因此Zip + 4将是理想的,但在查看数据之后,仅德克萨斯就接近300mb(将其乘以50将使我们的数据库中的查询变得非常糟糕)。

不幸的是,我们不能将Web服务用于单个调用,我们无法设置SQL服务器(或任何其他)数据库。我们的一个系统是一个相对模糊的数据库+开发环境。因此,如果由于任何原因,我们的SQL服务器数据库或Web服务出现故障,我们就无法处理订单。

有没有其他人遇到这样的事情?专门用于税收的大规模数据库似乎是一个荒谬的想法,但不幸的是我无法使用网络服务。

有没有人有任何想法?我真的被困在这个......

提前致谢!!!

1 个答案:

答案 0 :(得分:3)

出于各种原因,计算税收并非易事。你已经提到过税区了。其他原因包括:

  1. 特定产品税。例如,新泽西州曾经不对服装征税
  2. 免税周末。在学校开始之前很常见,例如
  3. 政策推动的扣除。就像扣除高效电器一样
  4. 所以购买一个包并与之集成真的是个好主意。并购买维护许可证,以便每年或每时都获得元数据更新。

    但从编程的角度来看,您可以使用树状结构来计算税金。这是我如何设置它。

    首先,定义一些这样的结构:

    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);
        }
      }
    }
    

    第三,我会在一个或多个人类消耗品文件中捕获税收规则:

    // 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向树。在每个节点(不只是叶子),我会有一个TaxAdders列表。在这种情况下,7/57/6,'7/7',......会有第一个加法器,而只有7/8/77/8/8和{{1节点将有第二个加法器。

    组装完整个结构后,将其序列化。现在你的编译已经完成了。在运行时,您只需加载序列化计算结构,对于任何给定的zip + 4,遍历树以查找可以找到的每个(可能)适用的计算器。

    如果您不想维护数据,您仍然可以进行我正在谈论的那种转换,并构建一个“已编译”的计算结构。

    如果你愿意,我可以添加更多详细信息,但是我不知道这一点,直到我知道这是你感兴趣的方向。