实施发票销售税策略

5
在南非,我们有增值税(VAT),它与销售税几乎完全相同,目前固定为14%,但可能随时改变。
我需要在由多个发票行组成的发票上(这些发票是不可变的)包括增值税。每行引用一个具有布尔属性“IsTaxable”的产品,几乎所有产品都应征税。
我不想在数据库中存储未税价格,因为这使得很难读取客户实际支付的真实价格,并且无论我在哪里显示这些价格,我都必须记住添加税费。当增值税率发生变化时,对于这个特定的业务,所有价格自动更改是不可取的。
因此,我认为反向计算税费是正确的方法,这种方法可能并不罕见。发票总额是所有发票行总额之和,其中包括任何折扣,并且应该包括税费。因此,发票总额本身已经包含了税费:
TaxTotal = InvoiceTotal / (1 + TaxRate),

在这里,InvoiceTotal包含税费,TaxRate == 0.14

由于发票一旦开具就不能更改(它们是不可变的),所以我应该:

  1. 在我的Invoices表中存储一个单独的Tax金额,不进行更改?还是...
  2. 为每个发票行存储一个税额,并在每次显示发票时计算发票税总额?

从DBA的角度来看,选项2似乎更安全,因为如果发票被手动更改,则会正确计算税费,但是,如果发票已经开具,这仍然会出现不一致的问题。如果我坚持选择选项1,则无法显示单个行项目的税费,但是它使管理税费总额和执行聚合计算更容易,尽管如果发生更改也会产生不一致性。

我不能两者兼顾,因为那样就会重复数据。

  • 哪种方法是正确的?或者反向计算税费是一个非常糟糕的想法吗?
3个回答

4

将税前价值存储在数据库中,您也可以存储含税价值并在大多数情况下使用它。

我预见到的最大问题是发票上增值税的舍入规则。这些规则(至少在英国)非常严格,您的反向计算无法正确处理。

此外,您需要逐个项目地存储税收项目,因为增值税机构将期望您退还准确支付的税款,如果某个项目被退回。在开始之前,您真的需要掌握当地的销售税规则。

我的经验是,即使少了一分钱,您的计算出现错误时,也会遭受指责;如果您接受审计,您需要能够展示如何得出增值税数字,因此不存储任何计算中使用的内容将让您陷入困境。


2
在欧洲,对于某些业务,不同的产品系列可能有不同的费率,因此我将FamilyId存储在Products表中,将TaxCode存储在Families表中。费率存储在VAT表中。我还向客户添加了一个VatCategory,因为某些客户在某些情况下可能支付0%。此外,一些发票可能在不同行上包含不同的增值税率。 - iDevlop

1

我完全同意詹姆斯·安德森的观点!在德国,增值税计算规则与英国一样严格。

我们必须按照增值税百分比(我们有三种类型:0、7和19%)累积净值,保留两位小数。在这个舍入后的值上,我们必须计算增值税。 增值税必须舍入到两位小数,并在发票上显示。

但是,您仍然可以存储包括税费在内的价格。这取决于税收上涨时净价格或最终价格是否保持不变。在德国,通常B2B净价格保持不变,但B2C最终价格保持不变-这取决于情况。

您可以按以下方式计算:

with cPriceIncludingVAT as (
    select  InvoiceNo, VATPercentage,
            PriceIncludingVAT = cast(sum(amount * price) as decimal(12,2))
    from    InvoiceLines inner join VAT on VAT.VATID=InvoiceLines.VATID
    group by InvoiceNo, VATPercentage
),
cVATcalculated as (
    select  InvoiceNo, VATPercentage, PriceIncludingVAT,
            VAT = cast(PriceIncludingVAT * VATPercentage / 
                         (1+VATPercentage) as decimal(12,2))
    from    cVATcalculated
)
select    InvoiceNo, VATPercentage, PriceIncludingVAT, VAT,
          NetPrice = PriceIncludingVAT - VAT
from      cVATcalculated;

如果将此保存为视图,则应该能够精确地重新打印动态计算的增值税值。当有会计系统时,您可以(并且应该)导出与您打印的完全相同的数据。 通常,您应该将这样的值保存为数据库中的字段值 - 但是我理解如果您希望采用更动态的方法...

0
其他答案都很好,但正如idevlop所提到的,未来某个时候你几乎肯定会开始针对不同类别的产品设置不同的费率。从一开始就添加这种功能将为您节省大量的烦恼。我已经经历过这种情况了。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接