E commerce 税务引擎示例

E commerce 税务引擎示例,e-commerce,business-logic,rule-engine,E Commerce,Business Logic,Rule Engine,我们为mac电脑创建了销售点软件,并希望改造我们的税务引擎。现在很简单,税收由名称、代码和税率组成,可以单独应用于每种产品。虽然这对一些人来说已经足够好了,但我们已经收到了很多处理更高级情况的请求。例如,美国市/县销售税、加拿大复合(叠加)税、法国生态税和纽约奢侈品税 我们已经确定了这些税收的大部分特征,并且倾向于基于规则引擎的实现。我们不必支持所有案例,但我们希望能够在需要时扩展它(以避免再次重写) 我们正在寻找以前构建过类似的东西的人的建议,或者尝试以优雅的方式解决相同问题的项目示例。我推荐

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

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


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

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

例如:

  • 管辖范围:州、县、国家、城市等的列表
  • 产品:显而易见
  • 商店:您销售的地点列表
  • StoreJudictionary(StoreID,JudictionId):商店所在的辖区列表 负责为客户收取税款
  • ProductTaxCode(ProductID int,TaxCodeID int):用于征税的产品类型:基本型、豪华型等
  • 辖区税收代码税率(辖区ID、税收代码ID、利率、税率类型):对于辖区和税收代码的每个适用组合,提供要应用的税率和税率类型(复合、简单等)
要查找要应用的税种列表,您只需要商店、其辖区、这些辖区的辖区TaxCodeRates以及产品的税种代码的内部联接

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

这可能需要对网上购物、批发购物和其他销售免税或由客户负责汇款的情况进行一些调整。如果税率是由客户所在地而不是商店决定的,则还需要对其进行调整

其他调整:例如,在得克萨斯州,我们有一个“免税”周末,对于个别商品售价低于100美元的某些类别的产品,不征收州税和地方税。这个想法是为去学校过年的孩子们提供更便宜的学习用品、衣服等。这类调整可以通过为每个辖区设置一个日期范围表来实现,该日期范围表将在未来尽可能长的时间内生效。

以下是丹佛市的一个“自治”城市示例:

作为零售商,您可能还需要将税款发送到不同的地点。对于不是“自治”城市的城市(这是一个可能仅适用于科罗拉多州的特殊术语,但可能每个州都有类似的特殊术语),您将向该州支付所有税款,然后由该州向相关方支付。科罗拉多州的一个特点是有“特殊税区”,允许为某些利益征收销售税(在示例链接上,RTD是公共交通区,“Invesco Field”是丹佛野马队比赛的体育场)


为了扩展塔伦特先生关于这一主题的回答,您还需要在辖区表中包括一些表示税收可能流向不同地方的方式

我的建议是使用数据库表来表示它们的用途(存储值),使用规则表示它们的用途(业务逻辑)。我当然不会把税率或司法管辖区列表等东西放在规则中——这些应该放在表格中。我将使用规则引擎来定义逻辑,该逻辑确定应用于哪些事务的速率。例如,如果我在网上从X州的一家公司购买了一套产品,这些产品从Y州运送到三个不同的地点,那么交易的哪些部分适用什么税率? 规则和数据库表的这种组合非常常见-规则确保您查找正确的内容,而表有助于报告等。例如,加州DMV通过车辆登记费做到了这一点——所有的各种费用都存储在一个数据库中,而确定哪种费用适用于哪种车辆的规则则在一个规则库中进行管理。 如果您尝试将所有内容都放在规则中,您将无法很好地报告,如果您尝试将所有内容放在数据库表中,您将得到几十个表来管理所有异常和角落案例。
JT

好的观点。。。这并不是税的计算,但这是系统中的报告告诉用户支票寄往何处以及支票金额所需要的。