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