外币消费可以分为两种场景
- 信用卡直接消费外币,人民币还款;
- 先兑换外币,再用外币消费;
第一种场景,多为在线消费,比如海淘。
第二种场景,多为现金消费,比如境外游。
而用Beancount记录货币兑换主要有两种方式,
- 记录单价
- 记录总价
大多数情况下,我都习惯记录总价,而单价(即货币汇率)都交给Beancount自动处理。
我们先来看第一种场景,直接消费外币,然后用人民币还款:
直接消费外币
2024-05-27 * "Apple" "Apple Care+" #recurring
Expenses:Subscriptions 9.99 USD
Liabilities:CN:ABC:CreditCard
可以发现,消费外币其实和消费人民币没有差别,只是最后记录的货币从CNY
更改为了USD
直到我们需要给信用卡还款时,才需要做一些变动:
2024-03-30 * "信用卡还款"
Liabilities:CN:ICBC:CreditCard 70.48 USD @@ 510.16 CNY
Assets:CN:ICBC:Checking -510.16 CNY
由于我们消费USD
的时候,负债账户Liabilities:CN:ABC:CreditCard
会一直累计同种货币的金额,所以我们需要偿还同种货币,才能让Liabilities:CN:ABC:CreditCard
对应种类货币的余额变为0,表示我们没有任何以USD
计价的负债。
上面的例子中,全额还款时,负债账户入账70.48 USD
,合计510.16 CNY
,资产账户Assets:CN:ICBC:Checking
扣除510.16 CNY
合计,用@@
表示。
我们也可以这样记:资产账户Assets:CN:ICBC:Checking
扣除510.16 CNY
合70.48 USD
,负债账户入账(70.48 USD)
2024-03-30 * "信用卡还款"
Assets:CN:ICBC:Checking -510.16 CNY @@ 70.48 USD
Liabilities:CN:ICBC:CreditCard
这两种方法是等效的。
二种场景:先兑换外币,再进行消费,在原理上都是一样的,比如下面的例子:
兑换外币
2024-03-20 * "泰铢换汇"
Assets:CN:ICBC:Checking -10010.00 CNY @@ 50000.00 THB
Assets:CN:ICBC:Checking 50000.00 THB
2024-03-21 * "泰铢取现"
Assets:CN:ICBC:Checking -50000.00 THB
Assets:Wallet:Cash 50000.00 THB
消费外币
2024-04-05 * "水果切零食"
Expenses:Travel 75.00 THB
Assets:Wallet:Cash
因为我的钱包Assets:Wallet:Cash
已经存入了从银行兑换的泰铢(THB),所以我们直接消费泰铢,不会导致钱包账户出现泰铢余额为负的情况。
到这里你可以发现,不同种类的货币之间的兑换,主要是使用@@
来表示合计
。那么怎么知道1美元能兑换多少人民币(USD/CNY)或者1人民币能兑换多少泰铢(CNY/THB)呢?
Fava自动追踪汇率变化
1美元能兑换多少人民币,我们可以直接用美元总价除以人民币总价得到,但是如果我们经常进行此类消费,每次都要这样计算,岂不是太麻烦了。
事实上Beancount的可视化界面Fava,可以自动做到这一切,我们只需要浏览图表,就能知道汇率是怎么变化的:
在你的账本,添加下面一行内容,fava上出现Commodities
一栏,里面记录了所有你进行兑换的不同种“货币”
plugin "beancount.plugins.auto"
当然,你也可以手动记录汇率,就像下面的例子,把@@
改为@
,总价改为单价:
不过我认为,手动记录汇率(单价),更多的适用于投资活动,对于消费行为,使用@@
记录总价更符合真实的交易行为,也更方便一些。
关于此系列
Beancount Magazine | Beancount 杂志系列是关于使用Beancount记录个人财务的自我实践,分享自己对管理,理解个人财务状况和记账的想法。
如果你也对这些主题感兴趣,不妨订阅试试看,希望能这些内容能对你有帮助😁