复式记账(一)- 初识 beancount

在一次偶然的机会了解到 beancount

beancount 是一个开源软件,支持以纯文本的方式进行复式记账,提供、查询、可视化、导入等能力

流水账的问题

日常中,我们常用流水账的方式进行记账:

时间 金额 备注
2020-05-01 5 肠粉
2020-05-01 13 午饭外卖
2020-05-01 1800 发工资了
2020-05-02 5.9 手机壳

一笔交易只与一个账户进行关联,简单清楚。但无法适用于复杂的场景。

假设一个常见场景:

今天中午和同事拼车点外卖,从我的信用卡支付了 168 元的账单。随后 AA 收款,微信收得 84 元、现金收得 42 元。

试想一下通过流水账记录有什么问题?

  1. 如果将 168 直接记录为餐饮支出,则会导致后续进行支出分析时 “餐饮” 消费虚高;
  2. 想要记录实际的 “餐饮” 支出需要进行额外的计算,并且在导出账单时无法匹配账单上的金额;
  3. 如无提别标注,微信、现金收得的 AA 款项将记录为 “收入”,与实际存在出入;

复式记账示例

同样的场景按照 beancount 的复式记账格式,则可记录为:

2022-05-9 * "财付通-美团平台商户" "午餐拼车"          ; 2022-05-9 发生了一笔确切的交易(* 表示交易是明确的)收款人是 "财付通-美团平台商户",我们对它添加了 “午餐拼车” 的备注
    Liabilities:CreditCard:CMB:3722     -168 CNY    ; 信用卡支出
    Assets:WeChat                       84 CNY      ; 微信零钱 AA 账户增加了 84 元
    Assets:Cash                         42 CNY      ; 现金 AA 账户增加了 42 元
    Expenses:Lunch                                  ; 根据会计恒等式,差价计入午餐支出账户中

通过上面的记录,可以很直观的反映出实际的资金流动情况。

餐饮支出不再是 168 元,而是剔除 AA 收款后的 42 元。

即根据会计恒等式 资产 + 负债 + 权益(净资产)= 0 计算 -168 + 84 + 42 + x = 0 得出 x = 42

记录中的金额也能与微信、银行等机构导出账单金额保持一致,方便后期进行回溯分析。