Beancount 记账小记

1

2021 年 8 月我开始使用 Beancount 记账,到今天正好两年的时间,在这期间记下我所有的消费记录。

记账的缘由大概是好玩,在使用 Beancount 之前,我就用 Notion 记账约半年时间,不过当时记的都是流水账,单纯记录自己在某项消费中花了多少钱。而在使用 Beancount 记账一段时间后我才察觉记账不仅仅好玩,记好账能让你俯视当前的财务状况。

Beancount 是基于 Python 的开源记账工具,使用纯文本和记复式记账法。用法简单、记账方式简洁符合我个人的风格,这也是我使用这么久的原因之一。

而且纯文本保证了你以后可以使用任何软件打开它,复式记账法则记录了交易的来龙去脉,准确记账。ss

2

Beancount 使用复式记账法,遵循会计恒等式,有借有贷,借贷相等。一个账户增加,必有一个账户减少。Beancount 中文翻译为数豆子,你可以想象有 A、B 两个篮子,这两个篮子代表两个真实账户。将 A 篮子中的豆子放入 B 篮子中,那么 A 账户中的豆子就会减少记为支出,而 B 账户中的豆子增加记为收入。这就是复式记账法最简单理解。

举个简单例子:

2023-08-20 open Expenses:Food:Meals ;早中晚餐
2023-08-20 open Assets:CN:Card:1597 ;食堂饭卡
2023-08-20 * "食堂" "吃饭"
    Expenses:Food:Meals        8.30 CNY ;吃饭消费
    Assets:CN:Card:1597       -8.30 CNY ;饭卡付款

在以上例子中可以看到,从饭卡的账户中拿 8.3 块付给吃饭的账户了,保证单笔的总和为 0。假如用用流水账的方式会记录成,今天在食堂吃饭花了 8.3 块。

在 Beancount 中有五类账户: 资产账户 Assets 正数 消费账户 Expenses 正数 负债账户 Liabilities 正数 收入账户 Income 负数 权益账户 Equity 负数

再举个例子:

2023-08-21 open  Income:Company:BaseSalary  ;公司工资
2023-08-21 open  Assets:CN:Bank:1234  ;银行卡
2023-08-21 open  Expenses:Daily:Cosmetics ;日用品

2023-08-21 * "发工资" 
    Income:Company:BaseSalary                 -5000.00 CNY 
    Assets:CN:Bank:1234                        5000.00 CNY 

2023-08-21 * "京东" "购买枕头" 
    Assets:CN:Bank:1234                        -200.00 CNY 
    Expenses:Daily:Cosmetics                    200.00 CNY 

3

我记账比较懒,往往一个月记一次账,或者好几个月后想起来才记账。凭借简单的消费习惯以及支付宝、微信及银行卡的消费记录,比较容易补齐遗漏的账单。

当然也得益于 Beancount 的复式记账法和 VSCode 的插件,让每一笔交易都记得清清楚楚。不会出现错误的金额记录,最多记不清当时买了些什么。

其实手动记账是一件很难的事情,比如我虽然使用 VSCode 与插件降低输入的难度,但因为比较懒不太喜欢每天记账,而且交易多了后,记账相对麻烦,因此我更喜欢使用脚本自动导入账单。

假如你的消费很多,尽量使用自动化导入账单方式,比起零零碎碎的记账,一次性自动导入账户的方式更便捷,因为越简单的事越容易大时间周期的坚持。当然,如果你想避免时间久后忘记自己买了什么,也可以每天记账。

我会使用 double-entry-generator 导入上月的账单,并且使用 ChatGPT 帮助自己写代码和脚本,将导入账单的流程固定下来,这能完成我 90% 的记账工作。其他需要特别关注的交易手动添加,再检查每个资产账户的余额是否与实际一致,这样就完成了每一次记账。

4

在你完成一次记账后使用 Beancount 配套插件 fava,就能看到一份漂亮的账信息。包括你的所有交易以及资产信息,比如资产负债表。这时候就有种满满的成就感。

小结

我们喜欢管理时间,但很少管理自己的财务。而 Beancount 则将散落各处的消费和账户整合在一起,让你的财务如此清晰。

参考

ChangeLog

  • 20230821 完稿
  • 20230820 创建