本文参与少数派 2019 年度征文:多一度思考。

2019 是我完整记账的第一年,在这之前我持续尝试了各种记账软件,都没有找到令我满意的产品,直到我在 2018 年底发现了 beancount1

2019 损益表

Why beancount?

beancount 并不适合大部分用户,首先它的学习成本相对较高,配套网页版 fava 的图表功能也不如市面上的记账软件完善,不过如果你想对自己的数据拥有完全的掌握权,又想感受复式记账的强大,beancount 就是你不二的选择。

我这里不会很详细地介绍 beancount 的功能,而是指出它的特点。如果你对 beancount 产生了兴趣,可以读读其他的入门指南。

开放的数据格式4

2020-01-05 * "信用卡还款"
 Assets:DebitCard:CMB           -100 CNY
 Liabilities:CreditCard:BOCOM   +100 CNY

迈过早期 PC 时代到今天的移动互联网,除了软件的功能性,我们也越来越关注它的 UI 是否精美。UI 承载着用户使用软件的接口,所有的数据读写细节都被包装在了 UI 背后。beancount 则没有 UI,或者说 beancount 的 UI 就是数据本身。习惯了用图形界面来操作数据的用户不免被这种架势吓到,上来就要写神奇代码?尽管 beancount 采用以文本为基础的数据格式有着特定人群(程序员)的偏好,这种以数据格式为中心的记账软件还是带来了很多好处:

  • 快:记账的时候只需要打开文本文件,不再需要等待图形界面慢悠悠地启动
  • 开放性:只要文件不丢失,你就完全拥有这些账单数据,避免软件服务商关门的尴尬处境
  • 可自定义:由于数据在你手中,你完全可以针对自己的需求去处理、分析这些账单数据

复式记账法5

学过会计的同学对复式记账一定不陌生,不过市面上几乎没有记账软件把复式记账的思想暴露给用户。

复式记账有四种主要的账户类型,其核心思想就是把每笔交易与至少两个账户关联。不同于单式记账,在复式记账体系中,收入和支出也是账户的一种。我们可以把 4 种账户类型想象成 4 个桶,工资收入就是把钱从收入 Income 桶中移到资产 Assets 桶中,平时的消费就是把钱从资产 Assets 桶中移到支出 Expenses 桶中,如果你用信用卡,则是从负债 Liabilities 桶中移到支出 Expenses 桶中。


(+) 一般为正数(-) 一般为负数
在某个时间点有意义资产 Assets负债 Liabilities
在某个时间段有意义支出 Expenses收入 Income

当然上面描述的例子仅涉及到 2 个桶,是普通记账软件都能 cover 的简单交易,下面我例举一些在日常生活中不可避免的复杂交易。

薪酬

2020-02-01 * "北京某有限公司" "薪酬"
Income:Salary           -5000 CNY
Expenses:Endowment     +1000 CNY; 养老保险
Expenses:Unemployment     +30 CNY; 失业保险
Expenses:Medical         +300 CNY; 医疗保险
Expenses:Taxes           +100 CNY; 个人所得税
Income:HousingFund       -500 CNY; 公司额外支付的住房公积金
Assets:HousingFund     +1000 CNY; 住房公积金
Assets:DebitCard:CMB   +3070 CNY; 招商银行工资卡

薪酬福利涉及到五险一金,复式记账能够在一笔交易中完整记录各项支出具体占了多少。上面的例子描述了税前工资 5000 的情况,公司额外和你各出 500 缴纳住房公积金,除去个人所得税和各种社会保险,最后入账 3070。

超市购物

2020-02-29 * "超市" "食材 牛奶"
Liabilities:CreditCard:BOCOM   -90 CNY; 交通银行信用卡
Expenses:Food:Ingredients     +40 CNY; 食材
Expenses:Food:Drinks           +50 CNY; 饮品

日常在超市采购往往会牵涉到多个种类的支出。

垫付

2019-10-12 * "帮妈妈购买高铁车票"
 Income:Parents         -17 CNY
 Assets:DebitCard:CCB   -63 CNY; 付款银行卡
 Assets:WeChatPay       +80 CNY; 妈妈发回来的红包

垫付最让人纠结的地方在于你最后收回来的钱和你垫付的钱不一定一致。比如我在帮家人买票时,最后总收回来一个更大的红包。

无限的自定义可能

beancount 直译即 bean count,数豆子。实际上 beancount 没有限定记录的单位必须是货币,你还可以用它来记录股票2 ,甚至记录时间,beancount 开发者还分享了他如何在旅行中处理和伴侣的共享账单3

除了“数豆子”之外,你还可以发挥想象力,利用一些简单的 Python 脚本分析自己的消费情况,这里就不再展开了。

缺点

当然伴随着 beancount 的强大,它也有一些缺点:

  • 上手成本高,需要搭建 Python 环境、学习相关语法才能开始使用
  • 没有手机端 App

个人数据和隐私

一个人的账单数据里蕴含的信息是非常丰富的,看过的电影、买过的书、吃过的餐馆,这些信息的总和比任意一个手机 App 的数据都要多维全面。

今天我们人手一只手机,到底意味着什么?是便捷,还是无所不在的数据收集?要回答这个问题,首先得明确隐私的含义。很多人将隐私误以为将自己的所有信息保密, 这样理解的话,隐私就是个伪命题。实际上隐私是你有权利选择自己的哪些信息公开以及公开给谁,所以我们的隐私还是可以争取的。但是将个人数据交给商业公司的行为实际上是将隐私权让渡给了商业公司。如果你想知道商业公司对你的数据做了什么,与其关心它们给出的用户条款,不如研究一下它们的商业模型。

商业模型

理解一家公司的商业模型有助于理解你(作为用户)与这家公司的底层关系。假设有 2 家提供记账服务的公司:

  • 公司 A,主要收入来源:付费订阅
  • 公司 B,主要收入来源:广告

当你记下一笔支出的时候,A 公司可能会收集你的行为数据用于后续的用户分析,这本质上是为打造更好的用户体验服务的;但是 B 公司就不一样了,为了提高广告的点击率,B 公司可能会访问你的账单数据,通过你的账单了解你的喜好,然后给你精准地推送广告。

A 公司的真正客户是你,而 B 公司的真正客户是广告商,而你只是他们的工具人。

后记

当我们关注一个软件服务的各项功能时,不妨也考虑一下你的隐私吧。


3
4