税务示例

时间:2009-08-26 19:43:04

标签: e-commerce business-logic rule-engine

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

我们已经确定了这些税收的大部分特征,并且倾向于基于规则引擎的实施。我们不必支持每个案例,但我们希望能够在需要时扩展它(以避免另一次重写)。

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

3 个答案:

答案 0 :(得分:2)

我的建议是将数据库表用于它们有用的东西(存储值)和规则,以便它们有用(业务逻辑)。我当然不会把税率或司法管辖区列表放在规则中 - 这些应该放在表格中。我将使用规则引擎来定义确定应用于哪些事务的速率的逻辑。因此,举例来说,如果我从一个从Y国运到三个不同地点的X国公司在线购买一套产品,那么哪些税率适用于交易的哪些部分? 规则和数据库表的这种组合非常普遍 - 规则确保您在表格有助于报告等时查找正确的内容。例如,加利福尼亚州DMV通过车辆登记费来执行此操作 - 所有各种费用都存储在数据库,而决定哪种费用的规则适用于在规则库中管理的汽车。 如果您尝试将所有内容放在规则中,那么您将无法正常报告,如果您尝试将所有内容放入数据库表中,最终将会有数十个表来管理所有异常和极端情况。 JT

答案 1 :(得分:1)

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

示例:

  • 管辖权:州,县,国家/地区等列表
  • 产品:显而易见
  • 商店:您销售的地点列表
  • StoreJurisdiction (StoreID,JurisdictionID):商店的司法管辖区列表 负责收税
  • ProductTaxCode (ProductID int,TaxCodeID int):用于税收的产品类型:基本,奢侈品等。
  • JurisdictionTaxCodeRate (JurisdictionID,TaxCodeID,的InterestRate,RateType):用于管辖和税法每个适用组合,提供税率要被施加,和速率(化合物,简单等的类型)。

要寻找的税收应用列表,所有你需要的是一个 INNER JOIN商店,它的管辖范围,对于那些司法管辖区jurisdictiontaxcoderates,产品的税务代码

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

这可能需要对互联网购买,批发购买以及销售以某种方式免税或客户负责汇款的其他情况进行一些调整。对于客户所在地而非商店决定税率的情况,还需要进行调整。

其他的调整:这里在得克萨斯州,例如,我们在那里州和地方税不是在收集一个“免税”周末的一些的产品类别,其中个别项目的销售价格是少超过100美元。这个想法是为前往新学校的孩子提供更便宜的学习用品,衣服等。这种调整可以通过为每个JurisdictionTaxCodeRate设置一个日期范围表来实现,只要它们可以计划就可以了。

答案 2 :(得分:1)

这是一个位于科罗拉多州丹佛市的“自治规则”城市的例子:

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

作为零售商,您可能还需要将税款发送到不同的地点。对于那些不属于“本国统治”城市的城市(这个特殊术语可能只适用于科罗拉多州,但可能每个州都有一些同样特殊的术语),您可以将所有纳税款项发送给然后将它们交给相关方。科罗拉多州有一个功能,其中有“特殊税区”,允许收取某些福利的销售税(在示例链接上,RTD是公共交通区,“Invesco Field”是丹佛野马队所在的体育场)。

为了扩展Tallent先生在这个主题上的答案,你还需要在管辖权表格中包含一些表示税收可能会转到不同地方的方式。