HOME/把自己当做一家公司:使用 beancount 记账/

0. 复式记账基础与 Beancount

Article Outline

为什么要记账

我们每个人都要跟“钱”打交道。

在跟人打交道时,对人的了解越多,在社交生活中就越得心应手。在跟“钱”打交道也是一样,对自己的财务状况了解越多,在省钱和赚钱上就越得心应手。

记账是了解个人财务最好的方式之一,它可以帮你回答一系列的问题:

  1. 去年在打车、吃饭、买衣服上花了多少钱
  2. 为政府缴纳了多少税,但是享受了多少扣除和福利待遇
  3. 手里的股票、债券、数字货币、不动产、负债折算成美元的净资产是多少
  4. 根据今年的消费制定明年的预算
  5. 从净收入增长预测买房距离
  6. ……

如果日常没有记账,这样的问题很难回答。但即使有记账,记账法的差异也有不同的效果。

为什么要用复式记账

如果你用过支付宝、微信钱包等电子支付,你会在它们的账单里看到自己的收支记录,这称为“借贷记账法”,或者叫“流水账”。

这种记账法是简单、不完备的记账方式,只能记录最简单的现金往来。它确实非常直观,但是由于你只能看到自己的“余额(Balance)”,所以只能对自己的财务有片面的了解。

复式记账(double-entry bookkeeping)则不一样。复式记账是一种科学、严肃的会计记账法,自中世纪诞生以来,被广泛运用于各类商业活动,经得起时间的考验。当然,公司财务工作用的也是复式记账。

使用复式记账,是把自己当成一家公司来看待。

公司是要赚钱的。当你用复式记账的角度来观察自己时,你要做的是如何提高自己的“净值”,而不仅仅是“这个月花了多少”。

随着经历的增长,我们会投资,会有除了工资以外的多种收入,会有房债、车债等债务关系,财务状况会变得复杂起来,那么复式记账会给你一个关于财务的 Big Picture,这是流水账做不到的。

花的钱可以是投资。复式记账会告诉你,你买 Macbook 的钱不是花掉了,而是内化成了你的资产,生产工具的升级能提高你的工作效率。

当然,最重要的变化来自于思想。复式记账对你看待问题的方式产生更积极主动的影响。虽然会计学是古老的,这对大多数人而言,是一门新的知识,知识就是杠杆。

下面用几个例子来表现复式记账的优势。

例1:通过支付宝借钱给他人

假如你通过支付宝借给了同学 10000 块钱。

流水账:

2019.01.01, 借给某同学 10000 块钱
支付宝        -¥10000

最终结果为支付宝余额少了 10000 块,但从账本上是看不出这是借款的,你得“记住”(或者支付宝里标记一下这笔账),这是一笔借款。

复式记账:

2019.01.01, 借给某同学 10000 块钱
资产:支付宝            -¥10000
应收资产:某同学         +¥10000

可以看到复式记账更完整地描述了你借出去钱的来龙去脉:

  1. 从“资产:支付宝”这个账户减少了 10000 块(所以用减号),因为钱是用支付宝转给他的。
  2. 往“应收资产:某同学”这个账户增加了 10000 块(所以用加号),因为他借了钱还给你后依然是你的钱,表现为“应收资产”

最终虽然你的支付宝账户减少了 10000 块,但你的应收账户多了 10000 块,所以你的净资产并没有变化——这更符合事实,因为借出去的钱是要还回来的。

这个例子说明复式记账的两个特点:

一、每一笔交易都涉及两个或两个以上的账户

“资产:支付宝” 和 “应收资产:某同学”这笔借款交易涉及的两个“账户”,钱从前者转移到后者。

在复式记账中,每一笔交易都涉及到多个账户之间的资金流动。这个账户可以是一个银行账户,也可以是一个消费类别(例如打车),也可以是自己的负债(例如首套房贷)

在实际运用时,我们会涉及 5 种不同的账户,分别为“收入(Income)”、“支出(Expenses)”、“负债(Liabilities)”、“资产(Assets)”、“权益(Equity)” 这五个类型。形象地描述,他们像五种不同的杯子,而钱像水,水在你的很多杯子之间倒来倒去,就构成了你的财务状况。

二、每一笔交易中,各账户的变动金额之和为零

“资产:支付宝” 减少的部分和 “应收资产:某同学” 增加的部分之和,刚好是 0。这称为这笔账是“平”的,也就是对账完成。

在复式记账中,所有的交易内的账户变动都应该是“平”的,并且所有交易的变动总额也应该是“平”的。

例2:超市购物

假如你去超市购物,买了猫粮(200块),还买了一些牛肉、蔬菜(100块)作为晚餐。

流水账:

2019.01.01, 超市购物,买猫粮、晚餐等
支付宝                  -¥300

复式记账:

2019.01.01, 超市购物,买猫粮、晚餐等
资产:支付宝           -¥300
支出:食物              +¥100
支出:宠物食物          +¥200

看上去虽然复式记账比较繁琐,因为单独给猫的食物支出被单独列出来了。但当你想统计今年在宠物上花了多少钱时,复式记账会非常清晰,使用流水账没法满足要求。

例3:工资收入

假如你税前工资 8000 元,今天刚好发工资了。

流水账:

2019.01.01,发工资 8000 元
银行卡             +¥6552

复式记账:

2019.01.01, 发工资 8000 元
收入:东家             -¥11056
支出:税              +¥48
资产:公积金         +¥560
资产:单位公积金      +¥560
支出:社保           +¥840
支出:单位社保       +¥2496
资产:银行卡            +¥6552

在流水账,你只会看到自己的余额多了 6552 块钱,五险一金等本应属于你的资产这一信息丢失了。虽然社保的钱可能拿不回来了,但是公积金是真金白银。

但在复式记账法中,你每个月工资的流向会变得一览无遗。你很清楚自己的公积金账户还有多少钱,给官家交了多少税,给国家做了多少贡献。

关于五个杯子的补充说明

在上文我们提到了 5 种不同类型的账户:分别为“收入(Income)”、“支出(Expenses)”、“负债(Liabilities)”、“资产(Assets)”、“权益(Equity)” ,并在例子中体现了其中的一部分用法。

为了方便记下来的讲解,在此特地补充说明一些要点:

  1. 收入(Income) 总是负数——因为你一直在赚钱,需要不断从“收入”转账到“资产”
  2. 支出(Expenses) 总是正数——因为你一直在花钱,需要不断从“负债”或“资产”转账到“支出”
  3. 负债(Liabilities) 在大多数情况下是正数,在还清时应该是 0 —— 典型的是信用卡,正确记账的信用卡负债图表会呈现周期性。
  4. 资产(Assets) 总是非负数——因为你无论如何总有资产,无论是现金还是房子,他们总有价格
  5. 权益(Equity) 直接使用较少,程序会自动计算,实际上可看作自己的资产净值

会计恒等式 资产=负债+所有者权益所有者权益 = 资产-负债。我们关心自己的财务状况时,大多数情况下看所有者权益即可得知自己的身价几何。

为什么要选择 Beancount

复式记账有很多办法,为什么要选择 Beancount 呢?

从刚才的例子中,我们也看到了:复式记账虽好,但使用起来确实很繁琐。这样难怪会计会成为一门单独的学科了。

所以使用 Beancount 的原因非常简单。因为 Beancount 有助于自动化这个过程,降低复式记账复杂程度。

尤其是对于程序员来说,Beancount 有巨大的优势:

  1. 账本都是文本(Plain-Text),有明确的格式,容易被程序解析,也容易被程序生成。
  2. 账本可嵌套。它提供的 include 语法可以让我们很容易用多个文件组成了一个复杂的大账本,能应对复杂的财务情况。
  3. 自带一套命令行工具。beancount 安装后,会提供一系列的工具,方便被脚本调用。
  4. 自带一套查询语言 BQL。BQL 很类似于 SQL,通过 BQL 可以进行非常复杂的查询,方便进行财务分析。

例如在使用 Beancount 时,可以依托信用卡的自动化系统,加上一点点编程知识,就能完成自动化的消费记账任务。日常正常刷卡,记账工作都由计算机来完成。

Beancount 简直是为程序员量身定制的复式记账神器呀。如果你是一个程序员,希望对自己的财务有更高的要求,那么选择 Beancount 是不会错的。