多币种会计:已实现与未实现汇兑损益
外币交易如何记账与重估,已实现差异与未实现差异的区别,以及为什么必须同时保存原币和本位币。
当你使用非记账本位币开具发票时,你立刻会遇到两个问题:客户欠你 10,000 美元;而你的账簿是以欧元记账的;并且开票当天的汇率将不同于客户付款当天的汇率。
这个差额就是汇兑差额(foreign exchange difference),它是一笔真实的收益或损失,而不是四舍五入产生的误差。多币种会计的核心规范,就是在正确的时间将它记录在正确的账户中。
三种币种,而非一种
每一笔外币交易最多涉及三种币种:
- 交易币种(transaction currency):单据计价的币种。例如客户欠款 10,000 美元。
- 记账本位币(functional / base currency):你的账簿及财务报表所使用的币种。在 Nordlet 中,这是公司的本位币,在创建公司时根据其所在国家/地区进行设置。
- 报告币种(presentation currency):如果你需要使用其他币种进行报告时所用的币种,主要用于合并报表(consolidation)。
构建多币种系统时的第一条规则是:**同时存储交易币种金额和本位币金额,并记录所使用的汇率。**如果只存储折算后的金额,系统将无法向客户说明他们在各自币种下欠了多少钱;如果只存储外币金额,那么每生成一份报告都必须重新折算,但究竟应采用哪个时间点的汇率呢?那些在这一点上处理错误的系统,事后通过添加列是无法修复的。
记录交易
向美国客户开具 10,000 美元的发票,当时的汇率为每欧元兑 1.10 美元:
| 账户 | 借方 | 贷方 |
|---|---|---|
| 2410 应收账款 (10,000 USD) | 9,090.91 | |
| 5001 服务收入 | 9,090.91 |
应收账款既是 10,000 美元,也是 9,090.91 欧元。这两者都是客观事实,且缺一不可。
已实现差异
当汇率变动为 1.05 时,客户支付了 10,000 美元:
收到的金额:10,000 USD ÷ 1.05 = 9,523.81 EUR
记账的金额:10,000 USD ÷ 1.10 = 9,090.91 EUR
汇兑收益: 432.90 EUR
| 账户 | 借方 | 贷方 |
|---|---|---|
| 2710 银行存款 (USD 账户) | 9,523.81 | |
| 2410 应收账款 | 9,090.91 | |
| 5803 汇兑收益(正) | 432.90 |
这笔收益是已实现的(realized),因为交易已经完成,资金已经到账,且差额是永久性的。它应当归入财务活动损益,而不是营业收入:你并没有销售更多的商品或服务,纯粹是汇率发生了变动。
其镜像分录则记入 6803 汇兑损失(负)。
未实现差异
现在假设会计期间结束时客户仍未付款。你的账上仍然挂着 10,000 美元的应收账款(初始记账为 9,090.91 欧元),而期末收盘汇率表明它的价值为 9,523.81 欧元。
会计准则要求对货币性项目(monetary items)(包括外币应收账款、应付账款、现金和贷款)在每个资产负债表日按照收盘汇率进行重新折算,并将差额计入当期损益:
| 账户 | 借方 | 贷方 |
|---|---|---|
| 2410 应收账款 | 432.90 | |
| 5803 汇兑收益(正) | 432.90 |
这笔收益是未实现的(unrealized),因为款项尚未收到,汇率在明天完全有可能反转。尽管如此,系统依然必须对其进行确认,因为资产负债表必须如实反映债权在报告日的价值。
非货币性项目不需要重新折算。 以外币购买的存货、固定资产和预付款项将继续按其历史汇率保留,因为它们并不构成收取固定数量货币单位的权利。
当发票最终结清时,先前确认的未实现差异将转为已实现差异。实务中的处理方式有两种:一是在下期期初冲销重估分录,并在结算时由系统记入完整的差额;二是追踪重估后的账面价值并仅记入增量部分。这两种方法最终的汇总结果完全相同,但如果将它们混用会导致重复计算。
采用哪种汇率,何时采用
- 交易日汇率(Transaction date):发票开具日或付款当天的汇率。大多数系统使用中央银行公布的汇率;在欧元区,这通常是欧洲央行(ECB)参考汇率,而立陶宛的实务则遵循会计用途公布的汇率。
- 收盘汇率(Closing rate):报告日的汇率,用于重估货币性项目。
- 平均汇率(Average rate):作为一种实务变通方法,有时允许用于一段期间内的收入和费用。
无论你选择哪种汇率,都必须一致应用,并将其存储在交易单据中。数年后仅凭一句“我们使用的是欧洲央行汇率”是无法还原数据的,而每张单据存储具体汇率则可以做到。
Nordlet 是如何处理的
发票带有其自身的币种,而总账则以公司的记账本位币保存:即公司所在国家的法定货币,除非在创建公司时选择了其他币种。当开具或登记单据时,系统会解析其对应日期的汇率并将其存储在单据中,本位币金额据此计算得出。因此,每张外币发票既保留了其票面金额,也保留了将其折算时的汇率。
汇率来源于汇率表,该表同时支持集中导入的汇率和公司自定义的汇率覆盖。当遇到周末或节假日导致当天无汇率时,系统会自动回溯至该日期或之前的最近一个汇率,而不会直接报错。导入的汇率按每 1 欧元报价;对于记账本位币不是欧元的公司,系统会通过欧元进行交叉换算(cross rate),而公司自定义的覆盖汇率始终按“每 1 单位公司本位币兑换多少单位外币”进行报价。
已实现的汇兑差额是自动处理的。 当在银行对账(bank reconciliation)中将付款与发票进行匹配时,发票记录的本位币金额与付款本位币金额之间的差额将通过专用的过账规则自动记账:bank.fxGain 记入 5803 账户,bank.fxLoss 记入 6803 账户。部分付款会产生按比例计算的差额。付款不一定非要使用发票的币种:例如,欧元账户收到 915 欧元可以用来结算一张 1,000 美元的发票。匹配操作会取按发票币种结算的金额(invoiceAmount);如果未指定该金额,系统会使用发票上存储的汇率将付款的本位币价值折算为发票币种金额,上限为未结清的金额。发票的已付金额将按该发票币种金额增加,而付款的本位币价值与按发票汇率释放的本位币价值之间的残差即为已实现的差额。取消匹配操作会精确撤销当时记录的金额。
期末对未结余额的重估不是自动完成的。 这是目前的实际差异:外币应收账款、应付账款和银行存款余额上的未实现差异不由系统自动计算或过账。在期末,该重估需要结合 POST /v1/reports/partner-balances 中的未结项目以及收盘汇率,通过人工编制记账凭证(journal entry)来完成。
对于集团而言,合并报表(consolidation)是一个独立的机制:每个成员公司的财务报表会按收盘汇率因子折算为集团的报告币种,并且每个成员公司都会报告相应的折算因子,以便使该影响清晰可见,而不是被掩盖。
FAQ
已实现汇兑收益与未实现汇兑收益有什么区别?
已实现收益产生于外币交易结算时——资金已经发生转移且差额是永久性的。未实现收益产生于在报告日对未结余额进行重新估值时——款项尚未收到,且汇率在结算前仍有可能再次发生变动。
开具发票时应该使用哪种汇率?
应当使用交易日当天的汇率,通常为央行公布的汇率。最重要的是保持一致性,并将所使用的汇率存储在单据中,以便日后能够解释折算过程。
外币汇兑收益属于营业收入的一部分吗?
不属于。它们应当归入财务活动损益,与营业收入分列——汇率变动不属于销售行为。将汇兑收益呈现在营业收入中会夸大企业的经营业绩。
哪些余额需要在期末进行重估?
货币性项目:外币应收账款、应付账款、现金和贷款。存货、固定资产和预付款项等非货币性项目则保持其历史汇率不变。
我应该以原币还是折算后的币种存储金额?
两者皆需存储,同时还要存储所使用的汇率。如果仅存储折算后的金额,将会丢失客户实际欠款的原始面值;如果仅存储外币金额,则迫使后续每次都要以未知的汇率进行重新折算。任何严谨的多币种总账系统都会同时保留这三项数据。