在处理您自己和发票的付款时处理不同货币的价格

时间:2017-01-28 12:57:13

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

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

a)我是否应再创建一个表InvoicePayments,我将以支付货币的信息存储为currency_id字段

b)或者我应该将currency_id字段保留在表格Invoices中吗?

在#a的情况下,每当客户改变他们想要支付的货币时,我会在InvoicePayments中生成新记录,同时在发票中保留单个记录

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

哪一个更好?对我来说,他们或多或少都是一样的。但是......也许还有我还不知道的东西。

请不要说出短语"这取决于你需要什么" - 一切都取决于我需要的东西。

1 个答案:

答案 0 :(得分:0)

首先,如果有任何方式购买会计软件而不是构建它,那么就这样做。我的第一份专业编程工作是编写涉及国际会计的应用程序。这让人头脑麻木。我看到副总统之间就如何应用外汇汇率进行了实际的争斗。

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

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

invoice  pmt_date    pmt_currency  pmt_amount
--
10132    2016-10-03  USD           89.00

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

invoice  pmt_date    pmt_currency  pmt_amount  exchange_rate
--
10132    2016-10-03  USD           89.00       1.1236
invoice  pmt_date    pmt_currency  pmt_amount  pmt_amount_eur
--
10132    2016-10-03  USD           89.00       100.00

有关哪种汇率适用于每笔付款的规则取决于申请。