【问题标题】:Dealing with prices in different currencies when handling payments by yourself and Invoices自行处理付款和发票时处理不同货币的价格
【发布时间】:2017-06-14 01:59:51
【问题描述】:

我有一张 Invoice 和 InvoiceItems 表,我将自己处理付款。客户可以用不同的货币支付,但我销售的服务价格是单一货币,比如欧元。或者至少目前是这样。 我的问题是:

a) 我是否应该再创建一个表 InvoicePayments,我将在其中存储以哪种货币进行付款的信息作为 currency_id 字段

b) 还是应该将currency_id 字段保留在发票表中?

在 #a 的情况下,每次客户改变他们想要支付的货币的想法时,我都会在 InvoicePayments 中生成新记录,同时在 Invoice 中保留一条记录

在 #b 的情况下,每当客户改变他们想要支付的货币的想法时,我都会在 Invoice 中生成新记录。

哪个更好?对我来说,它们或多或少是一样的。但是....也许有些事情我还不知道。

请不要说“这取决于你需要什么”这句话——一切都取决于我的需要。

【问题讨论】:

  • 如果您将Invoices 保留为您的参考货币(欧元),您将获得最大的灵活性,并让InvoicePayments 处理货币汇率并获得实际的付款 详细信息。此外,如果需要,发票甚至可以拆分为不同的付款。
  • @joanolo,谢谢,很有帮助。

标签: database postgresql database-design payment payment-processing


【解决方案1】:

首先,如果有任何方法购买会计软件而不是构建它,那就去做吧。我的第一份专业编程工作是编写一个涉及国际会计的应用程序。真是令人麻木。我亲眼目睹了副总裁之间关于如何应用外币汇率的实际斗争。

但是,如果您必须构建它,您不仅需要存储支付全部或部分发票的货币,还需要存储适用于该付款的汇率或有效价值。日常用户不应更新汇率或有效价值。

汇率随时间而变化。因此,看起来像这样的付款行并不能告诉您 2016 年 10 月 3 日的 100 欧元发票是否已全额支付。

发票 pmt_date pmt_currency pmt_amount -- 10132 2016-10-03 89.00 美元

今天的汇率是 1 欧元 = 1.0681 美元。 2016 年 10 月 3 日的汇率为 1 欧元 = 1.1236 美元。下表中的任何一个都可以存储这种事实。

发票 pmt_date pmt_currency pmt_amount exchange_rate -- 10132 2016-10-03 89.00 美元 1.1236 发票 pmt_date pmt_currency pmt_amount pmt_amount_eur -- 10132 2016-10-03 89.00 美元 100.00

关于每次付款适用哪种汇率的规则取决于应用程序。

【讨论】:

  • 如何从表中的汇率推断出哪种货币更贵?是1 EUR = 1.1236 USD 还是1 USD = 1.1236 EUR
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-12
  • 2013-01-11
  • 2011-12-19
相关资源
最近更新 更多