我们为 Mac 创建销售点软件,并正在寻求改进我们的税务引擎。现在非常简单,税费由名称、代码和费率组成,可以单独应用于每个产品。虽然这对于某些人来说已经足够好了,但我们收到了很多处理更高级情况的请求。一些例子包括美国市/县销售税、加拿大复合(叠加)税、法国生态税和纽约奢侈税。

我们已经确定了这些税收所具有的大部分特征,并且倾向于某种基于规则引擎的实施。我们不必支持所有情况,但我们希望能够在需要时对其进行扩展(以避免再次重写)。

我们正在寻找以前构建过类似内容的人的建议,或者尝试以优雅的方式解决相同问题的项目示例。

有帮助吗?

解决方案

我会推荐一组数据库表和联接。

例子:

  • 管辖权:州、县、国家、城市等列表。
  • 产品:明显的
  • 店铺:您销售的地点列表
  • 店铺管辖范围(商店 ID、管辖区 ID):该商店负责收取税款的管辖权清单
  • 产品税码(ProductID int,TaxCodeID int):用于税收目的的产品类型:基本型、豪华型等
  • 管辖区税码税率(司法管辖区 ID、税码 ID、利率、利率类型):对于每个适用的司法管辖区和税码组合,提供要应用的税率以及税率类型(复合税率、简单税率等)。

要查找要申请的税费列表,您只需 内部联接 商店的名称、其管辖区、这些管辖区的管辖区税码以及产品的税码。

您可以将 ProductTaxCode 定义为视图,以便所有产品都会收到默认的 TaxCode,除非提供了特殊的 TaxCode。通过抽象 TaxCode,您可以将有关产品(例如“食品”)的相同元数据以不同的方式应用于不同的区域。如果特定司法管辖区对“食品”有自己的定义,您只需添加特定于司法管辖区的代码并根据需要将其应用于产品。

这可能需要对互联网购买、批发购买以及销售以某种方式免税或客户负责汇出的其他情况进行一些调整。它还需要针对客户位置而不是商店决定税率的情况进行调整。

其他调整:例如,在德克萨斯州,我们有一个“免税”周末,州税和地方税不征收 一些 单件销售价格低于 100 美元的产品类别。这个想法是提供更便宜的学习用品、衣服等。为即将上学迎接新的一年的孩子们。这种调整可以通过为未来每个 JurisdictionTaxCodeRate 制定一个日期范围表来实现(只要可以计划)。

其他提示

我的建议是使用数据库表为他们所擅长的(存储值)和规则为他们所擅长的(业务逻辑)。我肯定不会把东西像税率或规则管辖的名单 - 这些应该是在表中。我会用一个规则引擎是定义该决定所适用的交易,其速度的逻辑。所以,举例来说,如果我买了一套产品的网上基于X国公司的船舶从Y国三个不同地点,申请什么税率对交易的哪些部分组成? 规则和数据库表这个组合是很常见的 - 规则确保你看到了正确的事情,而在报告等。例如表格援助,加州DMV这样做与车辆登记费 - 所有的各种费用都存储在一个数据库而确定哪些费用适用于在规则库管理哪辆车的规则。 如果你试图把一切都在规则,你将不能够很好报告,如果你尝试把数据库表中的一切,你将结束与几十个表来管理所有的异常和极端案例。 JT

下面是一个“家规则”城市在科罗拉多州丹佛市城域网的示例:

http://www.c3gov.com/pages/about/division_salestax.html

您,作为零售商,可能还需要缴纳税款发送到不同的位置。对于不属于“家规”的城市(这是一个专用名词,可能只适用于科罗拉多州,但随后可能每个国家都有喜欢一些同样特殊的术语)的城市,你把所有的税支付给谁的状态会然后处理他们到有关各方。科罗拉多州有一个特点,那里有“特别税区”是允许在收集一定的好处销售税(例子中的链接,RTD是公共交通区,“景顺场”就是丹佛野马玩体育场)。

要在Tallent先生关于这个线程的答案扩展,你需要还包括在管辖表表示该税可以去不同的地方的一些方法。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top