关于 Beancount 的常用账户和使用小技巧

本文将介绍我常用的 Beancount 账户和对于维护的一点小技巧。

Beancount 是一款以复式记账为核心复式记账可以通过记录入账和出账和断言来保证不会出现资金的错漏,具体的好处就不在这里展开了,有兴趣了解的道友也可以自行去了解。 的文本记账工具,也可以叫作 Plain Text Accounting (PTA)。

本文就简单介绍一下我常用的账户设计。也算完成了之前文章中提到的目标。

核心

账户设计的核心就是你想了解什么账户的变化。例如,如果你想了解每个月你花费在食物上的金额是多少。 或者你想了解每个月花费在租房、水费等基础消费的金额是多少。这些都是异常灵活的,完全取决于你想了解的内容。

有了目标,你就知道如何设计你的账户了。不过细粒度也是非常重要的,例如没有特别的需求,就没有必要将食物分成早餐、午餐、晚餐、零食和夜宵了,仅开启一个 Expenses:Food 账户即可。 没必要分得那么细,这样只会徒增维护的成本在前些年,我就是将账户分得特别细,包括早餐午餐等,这样给我造成了很大的困扰,因为在导入账单的时候会很痛苦,需要手动分析吃的是啥餐。之前也是不知道陷入了什么误区,总是想着能细则细,万一以后可以用得到呢?其实到现在也没有啥用。

根据 Beancount 的设计,账户分为:Equity, Income,Expenses,Assets,Liabilities。

接下来我就份账户的讲解一下我如何设计的账户。

Equity (平衡)

关于平衡账户,它的本意是在开始记账的初期时对账户进行一个统一的初始化。这很好理解,当时你开始记账的时候身上肯定不是身无分文的,已经有大量的实体账户的,例如银行卡、信用卡等,这就是它存在的目的。我为其设计了两个账户,很简单。

账户名 解释
Equity:Opening-Balances 初始平衡账户:负责初始化
Equity:BadDebts 坏账:对账时可能之差一块钱,实在是不想找了,我一般就会放在这个账户里

Income(入账)

入账也很好理解,就是你获得的资产,可以是现金、工资、礼物和奖品等。我为其设计了五种账户。

账户名 解释
Income:Gifts 礼物:很好理解,别人收给你的礼物的价值,例如别人给你发了 100 块红包,你就可以放到这里
Income:Salary 工资
Income:Interest 利息:这里可以放一些例如银行的结息等有关利息的条目
Income:Sale 销售:这里单独指一些例如出二手,或者卖货之类的条目
Income:Other 其他:一些不好分类的条目就可以放在这里

Expenses(消费)

这也很直观,就是你消费出去的内容

账户名 解释
Expenses:Food 食物:平常的吃喝都可以放在这里
Expenses:Transport 交通:坐公交地铁、火车飞机、共享单车、汽车油费乃至航空燃油都可以放在这里
Expenses:Housing 居住:租房、买房如果你愿意的话,买房可以放在资产那里,不过在我眼里买房算是消费
Expenses:Utilities 基础设施:煤气、供暖、电费、话费、水费等
Expenses:Software 软件:当今社会每个人或高或低,肯定都会有软件类消费,电视会员,云盘会员等
Expenses:Personal 个人:这部分主要是花在自己身上的部分,例如买衣服、剪头发、美容等
Expenses:Shopping 购物:日用品、卫生纸、扫把、拖布、湿巾、洗碗机、电视、电脑等。反正是消费行为都可以放在这里
Expenses:Entertainment 娱乐:去游乐场、看电影、买玩具之所以买玩具没有在购物账户中,是我认为买玩具更是纯粹的娱乐行为,而购物是更基础的行为
Expenses:Health 健康:去看医生、看牙医、做手术、配眼镜、买药都算医疗健康
Expenses:Education 学习:买书、买课、上学都算学习
Expenses:Travel 旅行:住酒店在我写这段的时候,我突然觉得旅行这一账户其实没多大必要,可以被娱乐、购物、居住、交通等账户覆盖掉,感觉可以移除。
Expenses:Insurance 保险:所有有关保险的都可以放到这里
Expenses:Tax 税费:个人所得税、五险之类的是的,五险在我眼里也算税的一种,毕竟也是归税务局管。
Expenses:Penalty 罚款:开个车总会有罚款的
Expenses:Fees 服务费:各种服务费点名批评微信账户提现手续费!活不起了?他妈的手续费收 0.1%
Expenses:Gifts 礼物:送给别人的礼物
Expenses:Pet 宠物:因为有宠物单独给它开了一个账户
Expenses:Other 其他:兜底用的

Assets(资产)

你的资产,银行卡、现金等。这里你可以根据你的资产自行设计。但是推荐不要设计的过深。 以中国银行卡为例,不要设计成:Assets:DebitCard:BOC:1234 这种,只需要 Assets:DebitCard:BOCAssets:BOC 即可。 这样更简短,也更好输入。

Liabilities(负债)

你的信用卡、花呗,贷款等。依旧不推荐设计的过深,最好不要超过两个层级。最主要的原因同上面相同,是为了减少复杂度。

那如果我想细区分怎么办?

可以看到,我设计的账户基本只有一个层级,这是为什么呢?是为了减少复杂度,越复杂的账户体系越难维护。 越简单的账户体系越好分类,越不会出现一笔交易不知道放到哪里的问题。

那如果我想更细致一点怎么办?比如我就是想知道我早中晚各吃了多少,这个礼物送给谁了。

也简单,用 Beancount metadata 功能就好了。如下所示。

2026-06-01 * "翻斗花园神人麻辣烫"
  type: "dinner"
  Liabilities:CBS                     -18000.00 CNY
  Expenses:Food

这样进行处理的时候就可以对 type 进行搜索,还是很方便的,这样既减少了账户维护难度,还提供了更多的信息。

上面还说到 Travel 不是很必要。那如何记录某比交易是在旅行期间造成的呢?

使用 Beancount 的标签功能。

2026-06-01 * "翻斗花园神人麻辣烫" #2026-travel
  type: "dinner"
  Liabilities:CBS                     -18000.00 CNY
  Expenses:Food

只需要在第一行处标记标签即可 #2026-travel

总结

其实总体来说账户设计的核心已经将清楚了,就是在自己的需求下尽量扩大范围,提供一个广义的账户,而不是极度细分的账户。

对于这种需要长期投入的内容来说,可维护性是第一位,只有能长期维护,才可以持久下去,不是吗?