6 min read

Hello beancount, again.

距离第一次接触到Beancount已经有两年多,对记账的认知始终停留在“只是记录每一笔花销”。

直到有一天Beancount再一次出现在自己的视野中,虽然自己的收入来源单一但是我似乎对自己的财务状况却很模糊,我不知道我有多少现金可以支配,不知道我的净资产有哪些,有多少。我也不知道我一年的开销大概是什么水平,如果我不工作我需要多少积蓄才能让自己摆脱“没钱”的压力?于是当Beancount再次出现在我的视野中,我决定深入的了解Beancount,深入的了解记账这件事情。事实证明,花费的这段时间确实让我对记账有了新的认知。

Beancount的文档自我了解它开始就非常“繁多”。很多情况下这是一件好事,然而冗长的英文内容和不太连贯的组织形式让我这种初学者很容易迷失在其中。所以这个系列的内容试图从中摘取一些自己认为对初学者重要的内容,加以简略的翻译和重新组织,让更多想要了解并使用Beancount的人有一个更平滑的曲线。

会计和记账

会计和记账显然是两种不同的东西,会计(accounting)包含记账(bookkeeping)。然而大部分人第一次听说Beancount是因为其他人用它来记账。但就像Beancount自己宣称的那样,它是的主要目的是accounting(会计)。

beancount: Double-Entry Accounting from Text Files

会计通常包含以下一种或几种流程:

  1. 记账(Bookkeeping)
  2. 支出统计(Expenses)
  3. 制定预算(Budgeting)
  4. 跟踪投资收益(Investing)
  5. 通过表报了解经济状况(Reports)

如果你之前使用或了解过Beancount,就会知道beancount提供了上面所说的所有功能,而记账就是这里面的核心。所以将Beancount看作一个管理个人财务的会计工具会比把他单单看作一种记账工具会更容易理解它。

记账的本质

记账是一件非常繁琐且麻烦的事情,交易方式的多样化在方便我们支付的同时也让记账变得更加痛苦。

记账的英文是Bookkeeping,或者叫“Keep the books”。指的就是将发生在所有不同账户之间的交易汇总在一个单独的账本中。这个账本就是the Book。

复制不同账户的对账单中的交易金额和交易类型汇总到一个账本中的过程就叫做记账。

Essentially, this means copying the amounts and category of financial transactions that occur in external account statements to a single system that includes all of the “accounts” relating to an entity and links them together. This is colloquially called “keeping books,” or the activity of “bookkeeping.”

如上所述,“复制”和“分类”每一笔交易正是记账这两个字所隐含的。另外一笔交易中交易的来源和去处也至关重要。他们就是发生交易的账户。

账户是每笔交易的出入口

每一笔交易的发生都建立在一组账户之上,交易的内容从一个账户流出,流入到另一个账户。这也是Double-Entry Bookkeeping(复式记账)中double-entry所指代的。

Beancount使用复式记账规则,这种规则要求每一笔交易从入口(可以有多个)进入的金额等于从出口(可以有多个)出去的金额。如果我们把进入用正(+)号表示出去用负号(-)表示,那么一进一出的总和将为0。这也意味着我们的“钱”只是从一个(一些)账户流转的另一个(一些)账户去,不会凭空增多或减少。

账户的四种类型

在Beancount中账户被划分为四种类型,分别是:

  1. Assets(资产类)
  2. Liabilities(负债类)
  3. Expenses(消费/支出类)
  4. Income(收入类)

正如前面所提到的,把Beancount看作一种会计系统会让你更容易理解。账户类型的划分实际上也是依据一些“会计”原则。

对于一种账户的余额,你在任何一个时间点都想要关注它还是只希望了解它一段时间内的总和?

那些余额在任何时候都需要被关注的账户被称为资产负债表账户(Balance sheet accounts)即Assets类和Liabilities类。

那些余额在某一段时间才需要关注的账户被称为损益类账户(Income Statement accounts),即Expenses类和Income类。

损益表中的损表示支出或消费,益表示收入或收益。

结合前面提到的复式记账的规则,这两组账户也相应的有了对应的符号。

账户余额: 正(+) 账户余额: 负(-)
资产负债表(Balance Sheets)账户 Assets Liabilities
损益表(Income Statement)账户 Expenses Income

账户的所有者视角:决定账户余额的符号

资产和负债账户的符号很符合常识,如果你使用信用卡进行消费的话就会发现每笔消费在账单明细上都是正的值,还款会记为负值,并且如果你向没有任何欠款的信用卡中存入额外的钱,你的这笔“充值”就会以负的余额显示在信用卡账户上。

令人最难以理解的是Income(收入)账户的符号。我们每月收到的薪水如果要使用Beancount进行记录,则会以负数的形式记录在收入账户中。第一反应这非常的违反直觉,为什么明明我收到的薪水要以负数记录?这是因为账户的符号是从账户所有者的角度去理解的。

我们的薪水收入本质上是我们用时间和劳动换取的报酬。收入账户的中的负号代表我们的付出,账户中的金额代表这段时间和劳动的价格。

符号的逻辑适用于其余所有类型的账户,负号表示我们的付出,正数表示我们的拥有。

开始使用Beancount

Beancount使用起来比想象中容易许多,尤其是在了解上述的一些基本原则之后。下一篇文章会介绍使用Beancount的基本流程,一旦有了交易记录我们就可以通过各种报表来熟悉我们自己的财务状况。