记账方式
首先先回答我几个问题:
- 为什么要记账,换句话说记账的目的是什么?
- 现有的记账方式不满足需求吗?
对自己有清晰的认知
接第一个问题,为什么要记账,以及你是否已经想好如何将记账这件事融入你的生活甚至变成一辈子的习惯。记账这件事是那种容易让人因为一时冲动开始,但是很快就放弃的事情。每个记过账的人都有不同的原因和契机,但能坚持下来的则凤毛麟角。
我的回答是,实现财务自由(即资产产生的收入不少于生活开销)。如果不知道自己有多少开销,甚至不知道自己有多少资产、收入,即使一夜暴富,财务自由也是一件虚无缥缈的事,因为你不知道现有的资产够你生活多久,换句话说就是「退休」,只不过有人能在三十多岁退休,有人要六十岁,有人则要到八十岁。只要在预期的寿命之间资产产生的现金流能覆盖生活所需的开销,这就是财务自由。我对资产产生现金流的定义较为宽泛,不仅包括利息、分红、租金、版税这类收入,还包括了直接通过资产折现的收入,即净资产减少。
为什么要选择复式记账(Double-Entry)?
要想回答第二个问题,咱们需要先了解普通记账,这也是大部分人使用的方法:只记录收支,而不记录各账户的变动。这就有一个问题,你不清楚自己各个账户中都有多少钱,也就不清楚自己的总资产是多少。而且若是充值消费的场景,你是记为一次性支出呢还是分次来记录呢,如果按一次性支出,当你消费时,就不需要再记录支出的场景就会出现记账的空白;但如果按分次使用来记录,那账单就更乱了(只记录了这么一部分钱,那其他大部分的钱哪儿去了)。这种记账方式一开始简单,但能带来的价值有限,只是开支记录而已,长期看来难以说服自己为了这些价值而忍受麻烦的记账过程。
虽然有各种各样的手机应用号称可以简化记账,它们把用户交互做得更加简单友善,有的还可以从银行账户、信用卡公司直接抓取数据,降低心理障碍,但与此同时它们却带来了另一个问题,就是数据所有权、安全性和持久性的疑虑。这些工具大多都是把数据存储在云端的,对于大公司,利用数据做大数据分析来完善用户画像是必然的事情(账单上的信息真的太多太多)。更麻烦的是,它们几乎都是自己的专有格式,无法导出保存,或者哪怕可以导出也难以使用。一旦软件停止更新,用户的数据就危在旦夕:难以导出,难以复用,很难跨平台或跨设备同步。这也意味着你不得不一直用一个产品,直到有一天倒闭或者服务关闭为止。这对任何人来说都是不可接受的,因为在互联网时代能活过十年的产品非常稀少,无论是像Google这样随意关闭服务的大公司,还是随时有可能倒闭的小公司。
相比普通的流水账,复式记账的核心理念是账户之间的进出关系,要求所有的记录全部入账,它可以保证账目的完整性和一致性,即"有借必有贷,借贷必相等"。复式记账可以提供除了开支记录之外的损益表、资产负债表、现金流量表、试算平衡表等报表。复式记账还可以把投资和消费轻易区分,譬如购入房产、汽车等可以作为资产项目入账并定期折旧。同理对各种代金券、点数积分的购入一样要算入资产而不是消费。
[核心]会计恒等式
作为会计学的核心,复式记账是一种实践中诞生的技术。除了最基本的会计恒等式之外,复式记账只有规范,没有对错。那么什么是会计恒等式呢?最基本的形式就是:
资产 = 负债 + 权益(净资产)
这个等式对于没有接触过会计学的人来说可能不太容易理解,但是记账实践过马上会明白的。理解的难点在于,会计学上的「资产(Assets)」和一般人对一个人富有程度的理解不太一样,因为资产是负债和权益的总和,负债(Liabilities)也是资产的一部分。
更容易理解的部分其实是权益(Equity),在个人理财的上下文中,又和净资产(Net Assets)是等价的,也就是经常说的「个人净值」。净资产需要由总资产排除负债,一个人到底是否富有,看的是净资产,而不是资产。
举例说明,一个人首付20万元,贷款80万元,买了价格为100万元的房产。假设这个人没有别的资产和负债,那么他的资产就是100万元,负债是80万元,而净资产是20万元。在房价没有变化的情况下,买房对一个人的净资产没有什么影响(忽略手续费的话),而他的资产和负债都暴增,也就是所谓的「扩大资产负债表」。
如果你理解了会计恒等式,那么复式记账的一切知识障碍已经扫除了。
Beancount安装
再说一遍,复式记账在于实践,在开始实践之前学很多艰深的会计学概念没有任何意义。要开始实践,就要有工具上手了。推荐使用Beancount,原因如下:
- Beancount是一个开源工具,用Python实现的,可以本地运行。
- 账本是一套基于文本的语法,方便存储和管理,个人拥有全部的数据,如果觉得不好用可以随时转移到另一套工具,还可以使用Git管理。
- 账本的语法很规范,也具备灵活度,像编程语言一样可以嵌套引入,也有语法高亮和代码检查工具。
- 有完整的命令行工具链和可视化工具fava,还有基于SQL的查询和报表生成。
- 没有货币概念,记录的是commodity(通货),你不仅可以拿来记钱,也可以拿来记信用卡积分,记实物黄金等一切能记录的东西。
使用Beancount之前首先需要Python 3运行环境。Beancount可以轻易从PyPI获得,使用以下命令(这里是一个示例账本:链接):
pip install beancount fava # 其中beancount是核心包,包括了命令行工具,fava是网页可视化工具
fava example.bean # fava [示例文件]
Running Fava on http://localhost:5000 # 输出反馈
至此为止Beancount环境就已经设置好了。
致非程序员群体
不少人畏惧使用命令行(CLI)和纯文本来记账,尤其是非程序员的群体,但这些只是习惯问题。看到这,相信你们大概都使用过APP记账,对于APP上的支出例如餐饮、交通、居家等,在Beancount中不过是换算成餐饮账户、交通账户罢了。且APP记账的时间点一般为消费后及时记录,Beancount则抽出10分钟统一为按天/按周进行记录。
在后续账户初始化及项目管理中,可能存在配置复杂的情况,在此我提供目录结构,程序运行成功后使用浏览器通过127.0.0.1:5000即可访问。