关于美国税收的特定编程问题(例如:Zip+4或城市/州/等)

本文关键字:Zip+4 例如 城市 问题 美国 于美国 编程 | 更新日期: 2023-09-27 18:04:32

我不确定这是不是问这个问题的合适地方,但这是一个一般的编程问题,我相信很多开发企业应用程序的人以前都遇到过这个问题。我工作的公司目前正在使用"标准"模型来收集订单的税收:城市/州/邮政编码(我们可以包括县)。

我看了几个网站,他们提供了几种不同的税收套餐,这很好。然而,唯一符合我们要求的是Zip+4。我们可能需要这个b/c,德克萨斯州的一些城市将有大约6个税收"区",其中一些重叠。所以Zip+4将是理想的,但在查看数据后,仅德克萨斯州就接近300mb(将其乘以50将使我们的数据库中的查询变得糟糕)。

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

还有人遇到过这样的事情吗?大型数据库专门用于税收似乎是一个荒谬的想法,但不幸的是,我不能使用web服务。

有人有什么想法吗?我真的被这个卡住了…

提前感谢!!

关于美国税收的特定编程问题(例如:Zip+4或城市/州/等)

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

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

第三,我将在一个或多个人类可消费文件中捕获税收规则:

// 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/5, 7/6, '7/7',…会有第一个加法器,而只有7/8/7, 7/8/87/8/9节点会有第二个加法器。

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

如果你不想维护数据,你仍然可以经历我所说的那种转换,并构建一个"编译"的计算结构。

如果你愿意,我可以添加更多的细节,但我要等到我确定这是一个你感兴趣的方向。