一直都有记账的想法。
我们经常都会有的困惑:感觉没干什么,工资就没了。随着工作年限的增加,愈发觉得对自我财务进行管理非常重要。这既能察觉不必要的花费,又不至于过于紧缩,什么都不敢消费。也正如 BYVoid 所说:记账是个人理财的基础,更是通往财务自由的必经之路。
复式记账
何为复式记账?
复式记账不同于通常的流水账。
在流水账里,我们把每一笔支出和收入进行一个描述性的记录,例如:
1 | 2020年4月15日,抢到红包5.2元,开心。 |
但要了解复式记账,就要首先理解下面几个概念:
- Income 收入
- Assets 资产
- Expenses 支出
- Liabilities 负债
如图:
图中显示,我们的每次财务行为,都被抽象为钱在这四个“桶”之间流转。如图中所示一样,我们的钱全部来源于“收入”和“负债”,最终流向“资产”和“消费”,总体上始终满足:
1 | 收入+资产+负债+支出=0 |
为了等式成立,收入和负债使用负数表示。并且每一次记账行为,至少会涉及两个“桶”间的关联。这里用几个例子说明:
*2020年4月15日,抢到红包5.2元,开心。*可以记录为:
1 | 2020年4月15日,收入-5.2元。 |
*2020年4月16日,使用支付宝花费34.1元购买水果和酸奶。*可以记录为:
1 | 2020年4月16日,资产-34.1元购买水果和酸奶。 |
不难发现,每一笔账单都会有两条记录,并且两条记录的和为0;这也许就是 复式记账(Double Entry Bookkeeping) 中 Double Entry 的所在吧。复式记账记录了资金的流动,使其更具有可靠性和可参考性。
作为一个已经著名经久的记账方法,我们远不至于再在记事本上手写这些账目。这里介绍一种简单且高效的复式记账工具。
安装 Beancount 和 fava
Beancount 的优点很突出:
- 开源,使用 Python 实现,可以本地运行。虽然部署需要一些 Python 环境,但身为程序员来说,简直轻车熟路。
- 基于文本,使用灵活。也就是可以使用 Git 便捷的进行版本控制。简直为程序员量身打造。
fava 是 Beancount 的可视化工具。虽然关于这两者的部署运行,网上已经有很多文章,这里还是简单列出步骤:
1 | # 1. 安装 |
虽然是简单的几步,但是在我第一次安装的时候,还是碰到了一些问题:
- pip 下载速度太慢,请求超时。(可以使用国内的镜像源 https://pypi.tuna.tsinghua.edu.cn/simple )
- windows 10 缺少类库,导致安装失败。(可以下载 Microsoft Visual C++ Build Tools,自行安装即可)
- 部分依赖库版本和本地已有的版本不一致导致安装失败。(更新本地的依赖)
开始记账
也许你已经安装完毕,磨拳搽掌准备行动。
我这里介绍一种初始化账单数据的方案,如果你有其他方案,也可以邮件交流。
一个场景:
小明现在有 工行卡1234(10000元),现金(2000元),欠花呗(1200元);有5000元股票。
然后小明决定今天开始记账,他可以按下面操作开始。
首先创建一个账单文件 xiaoming.bean
。
1 | * 指定账单使用的货币单位 |
在 xiaoming.bean
目录下执行 fava xiaoming.bean
。打开浏览器访问 http://localhost:5000/
,应该就可以看到自己的账目信息。
这里需要注意的是,2020-04-17 balance Assets:ICBC1234 10000.00 CNY
这条语句(包括下面几条同语法的语句)中的 balance
一般表示所记录日期当天的开始时间,所以这里记录了 2020-04-16
的资产目录,而从 2020-04-17
开始记录每天的资金流水。
关于 fava
的使用,这里就不再赘述。
实践经验
大额转账的处理
对于一个大额的转账类收入或支出,如果直接归入收入或支出,会导致统计图的比例被挤压。
我的方案是:创建一个 Equity:Exchange
负责转账记录,然后在 事件
中创建 转账
条目用以记录。如下:
1 | 2020-05-12 * "爸转账5万元" |
金额的浮点误差
使用一段时间发现 beancount 在金额计算上因为浮点数非精确计算的性质,会出现 0.01
的误差(我的习惯所有账户金额保留两位小数),虽然对总账目影响很小,但还是必死强迫症。
我的方案是:创建一个 Equity:Balance-Error
账户,定期对误差进行消除。
1 | 2020-07-10 * "平衡账户浮点误差" |
参考文档
Beancount复式记账(一):为什么
Beancount复式记账(二):借贷记账法
Beancount复式记账(三):结余与资产
Beancount复式记账(四):项目管理
Beancount使用经验,通过Beancount导入支付宝&微信csv账单