我已经连续记账 4 年半了,一直在寻找一种记账的最佳实践。不仅是记账,记账的目的是为了分析, 也包括如何更高效地分析你个人的财务状况。最开始用 Nokia 的时候下了一款记账软件, 名字已经不记得了,但我仍然记得大一的某个下午,我郑重地记录了第一顿晚饭。 但也限于当时的软件,没太坚持下去吧。 2012 年 3 月开始用「随手记」,也正是从那时起正经地开始记账了,那时刚开始工作, 记录了第一次发薪水(虽然之前实习也发了补助)。中间一直记了 1300+ 天,直到某天看到了 beancount, 学习了复式记账法,学习了一点会计姿势,了解了一些理财前期准备工作,这就需要更强大的分析工具, 我也就投身到 beancount 的学习中。

这篇文章介绍了使用 beancount 时的一些心得,先推荐下带我入门的这篇文章, 如果你已经看完了它那么「背景」这段可以跳过了。


背景

复式记账

首先是复式记账,核心原则是你的所有账户加起来一定为 0。然后是将科目按收支分为四大类: 收入(Income),花费(Expenses),资产(Assets),负债(Liabilities),收入就是你的工资,分红等, 花费属于那种花出去的消费,比如买吃的,烟酒,资产是你的固定资产,本身有一定价值, 之后你可能还可以出售,比如房、车、工资卡,负债就是你的信用卡,欠款。当你来到这世界上, 你应该身无分文,所以这四项全为 0,之后你领工资,买衣服,置地,借钱都是这几个科目相互转移。 当然,你不可能从出生就开始记账,从某个时间点,你可能已经有了些积蓄,有了些欠款, 他们可能不等,这就需要有个权益(Equity)来平衡,简单来说就是允许你有不平等,不平等的部分从权益里补足。

beancount

接着介绍这个 beancount,这是个软件。它可以从你的账本里读取每条账目,生成你想要的数据, 包括查询当前余额,开销情况,甚至支持 sql 语句实现自定义查询。你的账本实际只是一个简单的文本文件, 你可以用你喜欢的编辑器去编辑它,运气好的话还有人已经为它开发了插件,比如vim-beancount。 每条账目看起来像这样:

2016-10-05 * "微信支付(Tenpay):滴滴出行" "滴滴"
            Liabilities:CMBC:CreditCard
            Expenses:Transport:Taxi                     10.50 CNY

第一行依次为 日期,确认与否(存在争议为!),概述,收款人, 之后每行为一个账户名,表示钱从这个账户转到另一个账户中去,上例表示我用信用卡打了次滴滴, 花了 10.50 RMB。

分析

当你如此这般记了些时间的账后,就到了分析了,你可以用 bean-web 来生成你的账单, 也可以用fava来生成更酷炫的账单。在这里, 我建议你可以先关注下你的每月花销在什么地方,收入 + 花销(学了复式你会知道为什么用加号) 最后剩下多少钱你可以任意支配。更高端的分析我决定留到下篇写。


技巧

在刚学习 beancount 时,我读了许多的文章,教程和别人的例子(会分享在文后),学到了各种技巧, 另外加上自己使用时遇到的问题并最终解决,在此分享出来,这也是我写这篇文章的目的。

记账流程

首先要说的是我的记账流程。目前我会将我的所有花销都尽量集中在一张信用卡上, 这张卡最好也能在境外消费,因为现在境外银联变得多起来了,也不一定要求这张卡一定是 VISA 或 Master Card。 这样每个月我会校对这张卡的账单来了解我上个月的支出情况。其它用不了信用卡的时候, 比如买饮料等,如果有条件就在手机上记一笔,记清楚干什么时间花了多少钱, 回来再记录到账本里。实在记不了也没关系, 比如你这时正喝到不省人事并为你的朋友付了酒钱,之后会有对账纠正这个错误。

对账

每个月我会在我主信用卡的账单日去对账。如果还有多张信用卡,但账单日不在一起, 可以尝试给信用卡客服中心打电话让他们把账单日改到一起,这样你可以在一天处理完所有事情。 我得说,这是个神圣的事情,所以尽量在周围没人打扰的情况下完成,并且保证你有畅通的网络以便随时去回溯历史。

下面打开信用卡账单的邮件(啥?你让他们寄了纸质账单,难道银行没提醒你节省木材吗?), 逐个对照每条账目(通常账单是从近到远排序,所以你可能要从下往上看),这时你要做的是:

  1. 确认你记得有这笔支出,打上*,不记得就打上!,这时你可能需要翻看一些聊天记录或网站的购物记录
  2. 为这条账目找一个合适的账户,显然一边是你的信用卡,另一边是花费,具体是哪项花费由你决定(当然可能有例外)
  3. 一般信用卡会有收款人,这个一定程度也可以代替这笔花费的内容,但你也可以加一些, 比如我在网上买了些宠物用品,信用卡账单可能显示是个人卖家,我就需要补充上这些信息。
  4. 看下一条

对于我来说,我平时不会逐条记这张信用卡的消费情况,我会写个脚本去抽取邮件中账单的内容, 自动为我生成 beancount 的格式,在账单日导入, 然后将上面的步骤依次执行即可。这个过程可能会花掉大约 10 分钟。 平常可能对一些计划外的购买还需要记个小笔记,防止出现账单上显示个人卖家你却完全想不起来这是给猫买的铃铛的情况。

当然,还会有些别的账户,这时我需要检查下最终余额和实际余额是否一致就行了。 如果很不幸,产生了偏差,那么就需要查看下这些卡的交易记录了。 我相信如果大部分交易都发生主信用卡上,那这点交易还是会很少的。

最后我会对下我的现金,其他的账户随着信息时代到来,都能为我们提供可查的交易记录, 但现金却没有,而且我在之前记账对账时就发现,每个月我的现金总是对不上, 有时候少了几百,有时候又多了些,而我总是没法很好地对上。现在采取 beancount 记账法, 仍然无法避免这个问题,所以我发现如果现金没对上,我会直接将差价认定为花在了吃饭上, 因为我平时很少会用现金做别的事情。偶尔会有给修水管的小哥一些小费,但因为不常发生并且数额不大, 记错用途也影响不大。

好了,处理完这些琐碎的事情,大概会花掉我 20 分钟,当然这包括我打电话问我老婆为什么我的借记卡会被划掉 2000 块钱。

你在刚开始做时,可能会花费 30 分钟到 2 个小时不等的时间,但随着你的消费习惯越来越成熟, 这个时间会快速地缩减。

接下来

可以说这篇文章只讲了我起步用 beancount 的一些情况,当你记了 3 个月,甚至半年账后, 你会发现你遇到了更多更复杂的问题,当你着手开始分析你的财条情况时,你也会感谢你平时的积累。 下一篇我会分享我记账时遇到的一些更困难的问题以及如何解决的。如果你看完这篇小教程还没开始创建你的账本, 那么现在动手吧!

引用

以下是我读过的一些引用,我的建议是 1 作为一个参考书去翻看,但你最好能把整个文章浏览一遍, 因为即使是我推荐的那篇入门文章,其中也省去了许多 beancount 的功能没有讲,比如 note,cost 与 price 的区别等。 引用 2 建议最好可以完整地看一遍,因为里面讲了许多复杂的情况,包括股票投资账户的操作, 这是我没有用到的。引用 3 关于 beancount 的所有资料都在这里,也许它还在更新,所以时常关注吧。 引用 4 是一份 beancount 的 cheatsheet 在刚开始记账会很有用,但前提是你已经仔细阅读过 Language Syntax 了。

  1. Beancount - Language Syntax - Google Docs
  2. Beancount - Cookbook - Sharing Expenses - Google Docs
  3. Beancount - Index - Google Docs
  4. Beancount Cheat Sheet