英国增值税制度正在从 17.5% 变为 15%。您在代码中使用了哪些策略来存储增值税,以及更改将如何影响您的应用程序。您是否存储了大桶的历史记录以便计算旧价格,或者是否将旧发票存储在单独的表中?这是一个简单的配置设置,还是你拒绝了?存储增值税的理想方式是什么?
9 回答
不要计算它。存储它!
HMRC 对获得适量的增值税非常挑剔。增值税计算的四舍五入在用户指南中的规定有些含糊,留给未来的实施者来解决可能是自找麻烦。通过在输入发票/行项目时存储金额,可以避免此问题。
这似乎是对存储的浪费,违反了冗余原则,但涉及的存储量很小,将来可以省去很多麻烦。当然,不言而喻,货币金额(甚至可能是带有小数部分的增值税率)应该存储为乘以整数,以避免二进制小数表示舍入错误也蔓延。
中央费率存储
您绝对应该使用中央速率存储。但是,我建议这仅提供输入新发票时使用的当前默认费率。这些可以与开始和结束日期一起存储,以便在必要时进行自动转换。可以为每张发票(或发票行)存储这些费率以及开具发票时计算的增值税金额,以提供当时情况的绝对快照。
不要忘记适应不同的增值税税率(例如标准、减税、零税率、无增值税)以及与其他欧盟国家/地区的增值税注册实体进行交易的可能性,在这些国家您可能需要免增值税发票通常要缴纳增值税。
您最终可能会得到这样的表格(示例):
编号 | 费率名称 | 增值税率 | 开始日期 | 结束日期 -------------------------------------------------- - 1 | 标准 | 1750 | 1991 年 1 月 1 日 | 2008 年 11 月 30 日 2 | 标准 | 1500 | 2008 年 1 月 12 日 | 2009 年 12 月 31 日 ETC
上表只是一个例子。增值税率存储为“基点”的整数(例如百分之一),但假定增值税率永远不会超过小数点后 2 位。您显然可以用一个额外的列来扩展它来缓解这个问题,但这似乎有点太过分了!
不要存储它。算了!
我推荐的存储基于百分比的利率/利率的方法是:
你应该有一个像'VAT_param'这样的表
利率 | 自(日期)起生效 | 有效至(日期)
我相信,
“任何可以计算的东西, 都不应该被保存”
尤其是在您需要根据其他百分比(如税收、利息等)计算价值的情况下,不要让时空权衡躲避您。以后你会为自己花时间在空间上而祝福自己。
然后应根据发票日期,根据期间的有效税率巧妙地计算增值税。它会
确保最少的冗余(请永远不要谈论旧表或新表.. 几年后,如果利率每年变化一次,您将开始紧张)
有一个集中的单枢轴来控制速率。您的 VAT_param 表。
我的想法 ...
a- 我通常更喜欢计算而不是存储,但在这种情况下,计算的增值税(以及用于计算的费率和代码)应与每笔交易一起存储。这是因为它将是必须重复生成的文档的源数据。您还希望能够将销售中的增值税金额与财务分类帐中的增值税金额相匹配。您不想冒每次都无法重新生成发票或增值税报告等文件的风险。
b- 增值税(或其他税)值绝对应存储在表格中,并附有生效日期和税率。如果它是硬编码的,现在就做软编码的工作,因为它很可能在不久的将来再次改变。
c- 这在美国是一个巨大的(并且已经解决的)交易,因为销售税因州、县甚至城市而异。我在洛杉矶县生活和工作,销售税率为 8.25%。向南 10 英里,在奥兰治县,销售税率为 7.75%。互联网和目录零售商必须知道正确的费率,因为它是由交货地点决定的!
祝你好运。
我们从所有内部应用程序共享的数据库表中提取增值税,这意味着对我们的新代码而言,这对我们来说没什么大不了的。像这样保持中心化必须是明智之举。
我有一种令人讨厌的感觉,即我继承的两个系统在某处硬编码了速率。
更糟糕的是,如果它是硬编码的,我将只是替换硬编码的值,因为我没有时间正确更改它。
更糟糕的是,我不知道我将在哪里获得时间来实际进行更改。所以我想它不会在星期一的变化中及时完成。当然还有更有趣的问题,例如我们的 10 英镑订阅是基于 10 英镑,包括 17.5% 的增值税(8.515 英镑或其他)。现在将是 9.79 英镑左右,把所有以 10 英镑做广告的东西弄得一团糟,所有网站的计算都基于 10 英镑。
这一切都是因为负责存钱罐的白痴想要一个头条新闻。
我们将增值税率存储在数据库表中,所以这对我们来说没什么大不了的,尽管我必须举起手说,由于我们对代码所做的一些修改的性质,增值税是硬编码的在几个地方(我的错!),我设法以另一种更令人兴奋的方式重新捏造!
我只是在做一些事情,以便在汇率变回时做到这一点。
无论您采用哪种方式,都无需在您的增值税表中记录开始日期和结束日期,因为增值税期间直接连续运行。
您可以通过执行如下查询来访问正确的增值税,其中 vat_date 是增值税税率的开始日期。
SELECT * FROM vat WHERE NOW() > vat_date ORDER BY vat_date DESC LIMIT 1
关于 store vs calc 参数。如果您存储它,您以后可以随时计算它 - 如果您改变主意;)
我昨晚在代码中找到了一个表格,其中存储了应用程序的重要配置设置。
Table tbl_config
config_id int
config_name varchar(255)
config_value varchar(255)
其中一项设置是我们用于服务器的主要管理员用户名和密码组合(未散列)。我猜创建它的开发者总是想访问它,以防他忘记了!不用说,它现在已经消失了。