在南非,我们有增值税(VAT),它与销售税几乎完全相同,目前固定为14%,但可能随时改变。
我需要在由多个发票行组成的发票上(这些发票是不可变的)包括增值税。每行引用一个具有布尔属性“IsTaxable”的产品,几乎所有产品都应征税。
我不想在数据库中存储未税价格,因为这使得很难读取客户实际支付的真实价格,并且无论我在哪里显示这些价格,我都必须记住添加税费。当增值税率发生变化时,对于这个特定的业务,所有价格自动更改是不可取的。
因此,我认为反向计算税费是正确的方法,这种方法可能并不罕见。发票总额是所有发票行总额之和,其中包括任何折扣,并且应该包括税费。因此,发票总额本身已经包含了税费:
我需要在由多个发票行组成的发票上(这些发票是不可变的)包括增值税。每行引用一个具有布尔属性“IsTaxable”的产品,几乎所有产品都应征税。
我不想在数据库中存储未税价格,因为这使得很难读取客户实际支付的真实价格,并且无论我在哪里显示这些价格,我都必须记住添加税费。当增值税率发生变化时,对于这个特定的业务,所有价格自动更改是不可取的。
因此,我认为反向计算税费是正确的方法,这种方法可能并不罕见。发票总额是所有发票行总额之和,其中包括任何折扣,并且应该包括税费。因此,发票总额本身已经包含了税费:
TaxTotal = InvoiceTotal / (1 + TaxRate),
在这里,InvoiceTotal
包含税费,TaxRate == 0.14
由于发票一旦开具就不能更改(它们是不可变的),所以我应该:
- 在我的
Invoices
表中存储一个单独的Tax
金额,不进行更改?还是... - 为每个发票行存储一个税额,并在每次显示发票时计算发票税总额?
从DBA的角度来看,选项2似乎更安全,因为如果发票被手动更改,则会正确计算税费,但是,如果发票已经开具,这仍然会出现不一致的问题。如果我坚持选择选项1,则无法显示单个行项目的税费,但是它使管理税费总额和执行聚合计算更容易,尽管如果发生更改也会产生不一致性。
我不能两者兼顾,因为那样就会重复数据。
- 哪种方法是正确的?或者反向计算税费是一个非常糟糕的想法吗?