Sql server 实施发票的增值税策略
在南非,增值税(VAT)与销售税几乎相同,目前固定为14%,但随时可能发生变化 我需要将增值税包括在由多个发票行组成的发票上(不可变)。每行引用一个带有布尔属性的Sql server 实施发票的增值税策略,sql-server,database-design,invoice,sales-tax,Sql Server,Database Design,Invoice,Sales Tax,在南非,增值税(VAT)与销售税几乎相同,目前固定为14%,但随时可能发生变化 我需要将增值税包括在由多个发票行组成的发票上(不可变)。每行引用一个带有布尔属性的产品,IsTaxable,并且几乎所有产品都应纳税 我不想将税前价格存储在数据库中,因为这只会使读取客户将要支付的实际价格变得困难,无论我在哪里显示这些价格,我都必须记住添加税。当增值税税率发生变化时,对于这一特定业务,所有价格自动变化是不可取的 因此,我认为逆向税收计算是一种可行的方法,而且可能并不罕见。发票总额是所有发票行总额的总和
产品
,IsTaxable
,并且几乎所有产品都应纳税
我不想将税前价格存储在数据库中,因为这只会使读取客户将要支付的实际价格变得困难,无论我在哪里显示这些价格,我都必须记住添加税。当增值税税率发生变化时,对于这一特定业务,所有价格自动变化是不可取的
因此,我认为逆向税收计算是一种可行的方法,而且可能并不罕见。发票总额是所有发票行总额的总和,包括所有行折扣,并且应包含税费。因此,发票总额本身含税:
TaxTotal = InvoiceTotal / (1 + TaxRate),
其中,InvoiceTotal
含税且TaxRate==0.14
由于发票一经开具就无法更改(它们是不可变的),我应该:
发票
表中存储一个未更改的税款
金额?或者- 哪条路正确?或者,反向税收计算真的是个坏主意吗
我的经验是,如果你的计算结果只差一分钱,你可能会被拖下水,而且,如果你经过审计,你需要能够显示你是如何得出增值税数字的,因此不存储计算中使用的任何东西会让你大吃一惊。我完全同意詹姆斯·安德森的观点!德国的增值税计算规则与英国一样严格 我们必须按增值税百分比(我们有三种类型: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;
如果将其保存为视图,则应能够准确地重新打印动态计算的增值税值。如果有会计系统,您可以(也应该)导出与打印的数据完全相同的数据。
通常,您应该将这些值保存为数据库中的字段值-但我知道如果您希望采用更动态的方法…其他答案很好,但正如idevlop所提到的,几乎可以肯定的是,在未来某个时候,您将开始对不同类别的产品采用不同的费率。提前添加该功能将在以后为您节省大量的心痛。曾经去过那里,做过那件事。+1。在欧洲,对于某些业务,不同的产品系列可能有不同的费率,因此我将FamilyId存储在Products表中,将TaxCode存储在families表中。费率存储在VAT表中。我还向客户添加了一个类别,因为有些客户在某些情况下可能支付0%。此外,一些发票可能在不同的行中包含不同的增值税税率。