【发布时间】:2011-05-21 10:38:52
【问题描述】:
在南非,我们征收增值税 (VAT),它与销售税几乎相同,目前固定为 14%,但随时可能发生变化。
我需要在包含多个发票行的发票(不可变)上包含增值税。每行引用一个带有布尔属性IsTaxable 的Product,并且几乎所有产品都应纳税。
我不想将税前价格存储在数据库中,因为这只会让您难以阅读客户将要支付的实际价格,而且在我显示这些价格的任何地方,我都必须记住添加税。当增值税税率发生变化时,对于这个特定的业务,所有价格都自动变化是不可取的。
因此,我认为反向计税是可行的方法,并且可能并不少见。发票总计是所有发票行总计的总和,其中包括任何行折扣并且应该是含税的。因此,发票总额本身是含税的:
TaxTotal = InvoiceTotal / (1 + TaxRate),
其中InvoiceTotal 是含税的,TaxRate == 0.14
由于发票一旦开出就无法更改(它们是不可变的),我应该:
- 在我的
Invoices表中存储一个不变的Tax数量?或者... - 存储每个发票行的税额,并在每次显示发票时计算发票税总额?
从 DBA 的角度来看,选项 2 似乎更安全,因为如果曾经手动更改过发票,那么税费将被正确计算,但是如果发票已经开出,这仍然存在不一致的问题。如果我坚持使用选项 1,那么我将无法显示单个项目的税款,但它可以更轻松地管理税款总额和进行汇总计算,但如果更改也会出现不一致。
我不能两者都做,因为那会重复数据。
- 正确的方法是什么?或者反向计税真的是个坏主意?
【问题讨论】:
标签: sql-server database-design invoice sales-tax