像上学,工作,这类通勤日活动,通常具有非常固定的消费过程:

  1. 公共交通费
  2. 早餐,中餐,晚餐

换句话说,通勤日记账,是非常简单的。

我现在的生活,主要活动是工作通勤,所以接下来的例子,会以打工人为视角。不过同样的方法,能用在很多相似的场景中。

户的划分

Beancount中的账户划分,是非常灵活的。就通勤日活动中的第二点,你可以创建下面的账户:

2024-07-22 open Expenses:Food:早餐
2024-07-22 open Expenses:Food:午餐
2024-07-22 open Expenses:Food:晚餐

这样做的好处很显而易见,你可以分别在每个账户观察消费情况,也就是你可以分别观察早餐,午餐,晚餐都花了多少钱,以及他们是怎么变化的。

Beancount账户的名称,除了账户类型后第一级,不能使用中文外,其余均可使用中文。即,不能使用Expenses:早餐作为账户名,但是Expenses:Food:早餐可以。

不过,除了根据“活动-子活动”派生出“账户-子账户”的模式外,我习惯将所有饮食消费(小额)都放在同一个账户Expenses:Food,大额饮食消费(俗称“下馆子”),放在Expenses:Restaruant中,然后通过PayeeNarration来区分早餐,午餐,晚餐。

例如:

2024-06-03 * "小女当家" "晚餐" #meals
  Expenses:Food                                                       36.80 CNY
  Liabilities:CN:ABC:CreditCard

在Beancount的语法中,一笔交易(即postings)的一般形式是:

YYY-MM-DD * "Payee" "Narration" #tag
  Account		Amount
  Account		Amount

详细参考:https://beancount.github.io/docs/beancount_language_syntax.html#syntax-overview

Payee:把他理解为商户,即发生金钱交易的场所;
Narration:把他理解为备注,在上面的例子中,标记了这笔交易是吃晚饭发生的;
#meals:标签,为了方便统计”我正常消费(一天三顿饭)的花销是多少,而设定的;

早餐,午餐,晚餐

典型的一天的,在「记账,从这里开始」中也提到过

2024-06-06 * "缇里咖啡" "早餐" #meals
  Expenses:Food                                                       20.80 CNY
  Income:CN:ABC:Bouns                                                 -0.58 CNY
  Liabilities:CN:ABC:CreditCard

2024-06-06 * "小女当家" "晚餐" #meals
  Expenses:Food                                                       35.00 CNY
  Income:CN:ABC:Bouns                                                 -1.00 CNY
  Liabilities:CN:ABC:CreditCard

在上面的文章中也提到过,我习惯使用信用卡消费,有些信用卡具有消费返现的权益,上述例子中,我为返现来源,单独开设了一类账户:Income:CN:ABC:Bouns

不过最开始,我并没有单独给返现设立单独账户,而是直接进行下面的方式记录:

2024-06-06 * "小女当家" "晚餐" #meals
  Expenses:Food                                                       35.00 CNY
  Expenses:Food                                                       -1.00 CNY
  Liabilities:CN:ABC:CreditCard

“返现”给我的感受,实际上就像我在某件事上少花了钱,少花的这部分,体现在-1.00 CNY 这行。后来发现某些特殊的情况下,使用这种方式会很难处理,而单独开设一个账户就没有那些问题,如果你也有返现的场景,推荐你也可以考虑单独开设一个专门的“返现账户”

公共交通

乘坐公共交通出行的每次消费,当然也可以沿用上述的一般交易形式,这样会让你的账本更详细,同时也会增加你记账的时间。

有这样一种场景:使用公交卡乘坐。对这类消费,可以用一种不同的方式记录。

这样的消费特征有两个:

  1. 公交卡需要定期充值;
  2. 公交卡几乎只能用来乘坐公共交通;

充值公交卡

充值,差不多隔一段时间就会进行一次,记录周期性的交易,你可以参考「使用Snippet快速输入周期性的交易」中介绍的技巧。不过这里,想要特别提到的是,可以对周期性交易打上特殊的标签,对于以后统计账单数据,会有帮助:

2023-09-19 * "深圳通" "充值" #recurring
  Assets:CN:Shenzhentong                                             100.00 CNY
  Liabilities:CN:BoC:CreditCard

同样地,话费的充值(消费),订阅,工卡,饭卡都可以打上这样的标签:

2024-02-16 * "话费" #recurring
  Expenses:Phone                                                     129.00 CNY
  Liabilities:CN:BoC:CreditCard

使用公交卡

如果你像我一样,不关心究竟是乘坐公交汽车还是地铁,也不想每一笔公共交通消费都记录,那么就可以采用定期pad & balance的方式。

定期对账户(余额)进行balance有助于发现账单的漏记,错记。balance在金融术语中翻译为余额,所谓定期对账户进行balance,就是每隔一段时间,记录下当前各个账户中的余额,如果之前记录的交易正确无误,那么这个账户的余额,将和你从银行App中看到的余额相等。

pad翻译为填充,填充可以将多笔相似的交易,压缩成一笔填充记录

具体地,因为我们公交卡中的余额,几乎只能进行公共交通的消费,换句话说,从公交卡中流出的钱,只能到一个账户中 — 公共交通消费账户,因此我们就可以这样记录:

2024-06-22 pad Assets:CN:Shenzhentong Expenses:Transportation
2024-06-23 balance Assets:CN:Shenzhentong                             58.85 CNY

我在2024-06-23这一天,检查了公交卡的余额,剩余58.85 CNY,于是对公交卡账户进行balance:

2024-06-23 balance Assets:CN:Shenzhentong                             58.85 CNY

此时,VS Code的Beancount插件会提示我,账户余额不相等。这种不相等是必然的,因为我显示地告知Beancount,账户应该有58.85 CNY,而对Beancount来说,我在上一次充值后,并没有记录任何消费,因此Beancount中记录的余额是我上一次充值后的余额(实际上是上一次balance后的余额)

关于VS Code的Beancount插件,可以看「关于记账环境的配置方法」里的介绍。

而我们知道,不相等的差额,就是我们乘坐公共交通的消费总额,所以在2024-06-23的前一天(2024-06-22)通过pad指令,将这些消费总额“补上”。

2024-06-22 pad Assets:CN:Shenzhentong Expenses:Transportation

Expenses:Transportation账户,是我们乘坐公共交通的支出账户。

所以,我通勤日典型的账单,是这个样子:
An image to describe post


Beancount Magazine | Beancount 杂志系列是关于使用Beancount记录个人财务的自我实践,分享自己对管理,理解个人财务状况和记账的想法。
如果你也对这些主题感兴趣,不妨订阅试试看,希望能这些内容能对你有帮助😁