Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/apache/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database design 英国增值税从17.5%更改为15%——这将如何影响您的代码?_Database Design_Configuration Management - Fatal编程技术网

Database design 英国增值税从17.5%更改为15%——这将如何影响您的代码?

Database design 英国增值税从17.5%更改为15%——这将如何影响您的代码?,database-design,configuration-management,Database Design,Configuration Management,英国增值税制度正在从17.5%变为15%。您在代码中使用了哪些策略来存储VAT,以及更改将如何影响您的应用程序。您是存储增值税历史记录以便计算旧价格,还是将旧发票存储在单独的表中?这是一个简单的配置设置,还是你猜到了?存储增值税的理想方式是什么?我们从所有内部应用程序共享的数据库表中提取增值税,这意味着就我们的新代码而言,这对我们来说没什么大不了的。像这样将它集中起来是明智之举。我昨晚在代码中找到一个表,其中存储了应用程序的重要配置设置 Table tbl_config config_id

英国增值税制度正在从17.5%变为15%。您在代码中使用了哪些策略来存储VAT,以及更改将如何影响您的应用程序。您是存储增值税历史记录以便计算旧价格,还是将旧发票存储在单独的表中?这是一个简单的配置设置,还是你猜到了?存储增值税的理想方式是什么?

我们从所有内部应用程序共享的数据库表中提取增值税,这意味着就我们的新代码而言,这对我们来说没什么大不了的。像这样将它集中起来是明智之举。

我昨晚在代码中找到一个表,其中存储了应用程序的重要配置设置

Table tbl_config
   config_id int
   config_name varchar(255)
   config_value varchar(255)
其中一个设置是服务器的主管理员用户名和密码组合(unhashed)。我猜创建它的开发人员总是想要访问它,以防他忘记!不用说,它现在不见了。

不要保存它。算算吧!
我建议存储基于百分比的利率/利息的方法是:

你应该有一张像“VAT_param”这样的桌子

利率|自(日期)起生效|至(日期)生效

我相信,

任何可以计算的东西, 不应保存“

特别是在这样的情况下,你需要根据其他人的百分比(如税收、利息等)来计算价值,不要让时间-空间的权衡回避你。以后你会为自己花时间在太空上而庆幸

然后,增值税应根据该期间的有效税率,根据发票日期准确计算。会的

  • 确保冗余最少(请不要谈论旧表或新表。几年后,如果利率每年变化一次,你将开始发毛)

  • 有一个集中的单轴来控制速率。您的VAT_参数表


我有一种不愉快的感觉,我继承的系统中有两个在某个地方硬编码了速率

更糟糕的是,如果它是硬编码的,我将只是替换硬编码的值,因为我没有时间来正确地更改它

更糟糕的是,我不知道我将在哪里得到时间来真正做改变。所以我想这件事不会在星期一的变动前及时完成。当然还有更有趣的问题,比如我们10英镑的认购是基于10英镑,包括17.5%的增值税(8.515英镑或其他任何金额)。现在将是9.79英镑左右,把所有10英镑的广告和所有基于10英镑的网站计算都搞得一团糟

所有这些都是因为负责小猪存钱罐的白痴想要一个标题。

不要计算它。保存它! HMRC对于获得正确数额的增值税非常挑剔。增值税计算的四舍五入在用户指南中的规定有些模糊,将其留给未来的实施者来实现可能会带来麻烦。通过在输入发票/行项目时存储金额,可以避免此问题

这似乎是对存储的浪费,违反了冗余原则,但所涉及的存储量很小,将来可能会省去很多麻烦。当然,不用说,货币金额(甚至可能是带有小数部分的增值税税率)应该存储为一个乘以的整数,以避免二进制小数表示法舍入错误也悄然出现

中央速率存储器 您绝对应该使用中央速率存储。但是,我建议仅提供输入新发票时使用的当前默认费率。这些可以与开始和结束日期一起存储,以便在必要时进行自动切换。可以为每张发票(或发票行)存储这些费率以及发票开具时计算的增值税金额,以提供当时情况的绝对快照

不要忘记适应不同的增值税税率(例如,标准税率、降低税率、零税率、无增值税),以及与其他欧盟国家的增值税注册实体进行交易的可能性,在这些国家,您可能无需缴纳增值税——通常需要缴纳增值税的发票

您可能会得到这样一个表(示例):

id |税率名称|增值税税率|开始日期|结束日期 --------------------------------------------------- 1 |标准| 1750 | 01/01/1991 | 30/11/2008 2 |标准| 1500 | 01/12/2008 | 31/12/2009 等
上表只是一个例子。增值税税率存储为“基点”(例如百分之一百个百分点)的整数,但假设增值税税率不会超过小数点后两位。很明显,您可以用一个额外的列来扩展它,以缓解这个问题,但这似乎有点太过分了

我们的增值税税率存储在一个数据库表中,所以对我们来说没什么大不了的,尽管我不得不举手说,由于我们对代码所做的一些修改的性质,增值税在几个地方是硬编码的(我的错!),我已经设法以另一种更令人兴奋的方式重新编写了

我的想法

a-我通常更喜欢计算增值税而不是存储增值税,但在这种情况下,计算增值税(以及用于计算增值税的费率和代码)应与每笔交易一起存储。这是因为它将是必须重复生成的文档的源数据。您还希望能够将销售的增值税金额与财务分类账中的增值税金额相匹配。您不想每次都以相同的方式重新生成发票或增值税报告之类的文档

b-增值税(或其他税)值应绝对存储在表中,并注明生效日期和税率。如果它是硬编码的,现在就做软编码的工作,因为它很可能在不久的将来再次改变

c- id | Rate name | VAT rate | Start date | End date --------------------------------------------------- 1 | Standard | 1750 | 01/01/1991 | 30/11/2008 2 | Standard | 1500 | 01/12/2008 | 31/12/2009 etc
SELECT * FROM vat WHERE NOW() > vat_date ORDER BY vat_date DESC LIMIT 1