很早就听闻了复式记账这个名词,但是一直在我的 TODO 上没来得及消化,记得当时主要是看了 wzyboy 和 byvoid 二位的文章,我关注的不同的人选择同样的方式来做一件事情,肯定是有意义的。所以当时我就将复式计帐和 Beancount 放到了我的 Trello 待办事项里面,这几天终于有时间来了解一下了。
首先什么是复式记账,相对复式来说的记账法是单式记账,我之前一直在寻觅的记账软件 其实都是单式记帐,通过消费流水来记账,这种方式比较简单,只能够记录消费状况,其实对于自己财务的整体状况并不是很清楚,通过这样的记账方法最多只能统计到日常的消费状况,而无法回答诸如[[资产损益表]]、[[资产负债表]]等等个人帐务问题。并且对于信用卡消费还款这样的情况,单式记帐软件根本无法满足需求,而且如今个人的资金分散在支付宝,微信,银行卡,证券股票账户等等各种账户中,如果没有很好的管理,时间一长就非常难以追溯。就像 byvoid 在文章中所说的那样 —-“为什么要记账?实际上是要通过记录来增加对自我的认知。”
prerequisite
在继续看下去之前,有一些需要提前了解的概念:
- assets(资产), what you own(cash, money in bank)
- Liabilities(负债), what you owe(credit card account, money you owe your friends)
- Equity (净资产)
- Dividend (红利,股息),通过股票投资而获得的股息或红利
复式计帐
在了解复式计帐前有些名字概念需要提前了解,在提到复制记账额时候肯定会提到这一个恒等式:
也就是:
Assets (资产) = Liabilities (债务) + Equity(权益,或者叫净资产 net worth,或者抵押资产)
转换一下就更好理解,一个人的净资产等于资产减去负债。理解净资产后,在记账软件中我们可能会记入
- 获得一笔收入,比如工资等等,这会增加净资产,这个被叫做 income
- 买食物,买图书等等支出,这会减少净资产,则这个被称为 expense
- 使用信用卡购物,则会增加相应的 Liabilities
- 但是从银行取钱,或者存入定期则并不会增加净资产,也不会减少净资产
资产和债务字面意思都比较好理解,Equity 直接翻译叫做净资产,又有翻译叫做权益,也有一个更细节的公式:
Equity(权益,资产) = Owner's Equity(资产) - Dividends(应付红利) + Retained Earings(净收入)
也就是一个人的资产等于固有资产减去分红加上净收入。这里引入了一个 Dividends 的概念,这样的会计恒等式一般是针对公司主体而言的,所以应付红利则是表示公司对股东的分红。对个人债务而言很少会使用到 Dividends 这样的概念,所以简化一下,净收入又有:
Retained earings(净收益) = Revenue(收入) - Expense (支出)
这个公式就比较好理解了。
所以综上,得到了如上的公式,也就能总结出这几大账户,「其中有些公司记账相关的内容,比如 revenue,dividend,等这里就不提了」, 对于普通人大致可以总结出这几类:
- 资产
Assets
—— 现金 (Cash)、银行存款、有价证券、Investment, Loans credits 等; - 收入
Income
—— 工资 (Paycheck)、奖金 (bonus)、Gift receives, Dividends, Interest 等; - 费用或者支出
Expenses
—— 税金 (Taxes)、外出就餐、购物、旅行、Gift given、捐款 (Donations) 等; - 负债
Liabilities
—— 抵押 (Mortgage)、信用卡应付款 (Credit Cards)、房贷 (house loans)、车贷 (car loans) 等; - 权益
Equity
—— 一般用来记录已有资产;
而这几类的划分也正好和后面要用的 [[Beancount]] 中默认的几类账户是有关系的。
复式记账的优点
一般的流水帐是从资金角度出发,比如,某年某月某日某时某刻买了什么东西,而复式记账则能记录资产的流动:
- 单式记账不考虑资金的来源,只记录消费支出
- 复式记账会考虑资金的去向,和来源,比如资产从收入账户转移到银行账户,或者是从银行账户转移到股票账户
- 复式记账可以将投资和消费区分开,甚至可以记录代金券,积分的账户
- 复式记账适合比较复杂,比如有赊账,债权的情况
- 复式记账可以提供除去开支记录之外的[[资产损益表]] (income statement),[[资产负债表]] (balance sheet),现金流量表,试算平衡表
- 复式记账容易检查出记录中产生错误的地方
借贷记账法
复式记账又分为了借贷记账法,和正负记账法,这里先介绍一下借贷记账法。
借 (debits) 贷 (credits)
Debits 和 Credits 是经济交易中的双向流动:
- Debits represent the flow of economic benefit to a destination
- Credits represent the flow of economic benefit from a source
有借必有贷,借贷必相等
例子:
假如用现金购买了 100 元文具。
DEBIT(进) | CREDIT(出) |
---|---|
文具 | 100 元 |
记账时需要分开记账
在文具账簿分类下
DEBIT | CREDIT |
---|---|
2019-11-11 文具 100 |
在现金账簿下:
DEBIT | CREDIT |
---|---|
2019-11-11 文具 100 |
又用信用卡 25000 购买了电脑:
工具分类下
DEBIT | CREDIT |
---|---|
2019-11-11 电脑 信用卡 25000 |
信用卡下:
DEBIT | CREDIT |
---|---|
2019-11-11 电脑 工具 25000 |
这是常见的 T 字记账法,左边表示 DR 表示增加,右侧是 CR 表示减少。
正负记账法
相较于借贷记账,正负记账则是用 +
和 -
来分别代表流入和流出。非常相似。
假如用上面的例子,那就应该是:
2019-11-11 支出:文具 +100
2019-11-11 现金 -100
Why accounting?
更好的了解自己,认识自己的财务状况,这包括
- 整理自己的账户 (Account),现金,股票账户,甚至虚拟货币账户
- 整理自己过去所有别人欠的,和欠别人的,比如信用卡账单,贷款等
- 了解自己能够支出的现金
- 通过了解自己的财务状况来优化自己的消费,比如不应该在某些方面过度开销
Beancount
Beancount 是一款开源的复制记账软件,基于纯文本,按照特定语法书写的记账规则,可以非常轻松的生成各种资产报表。
A double-entry bookkeeping computer language that lets you define financial transaction records in a text file, read them in memory, generate a variety of reports from them, and provides a web interface.
源代码:http://furius.ca/beancount/
因为开源所以 Beancount 有无限的扩展性:
- 支持货币转换
- 支持编写脚本自动导入银行账单
- 可以定制自己的 UI 界面
- 有非常丰富的图表,甚至可以通过 SQL 生成报表
Beancount 用 Python 编写,可以从 Pypi 中拉取,同时可以安装 fava 一款比较友好的展示界面, Web UI:
pyenv local 3.6.1
python -m venv beancount
source beancount/bin/active
pip install beancount fava
安装完成后可以使用这些命令:
- bean-bake
- bean-check
- bean-doctor
- bean-example
- bean-extract
- bean-file
- bean-format
- bean-identify
- bean-price
- bean-query
- bean-report
- bean-sql
- bean-web, Web server for Beancount ledgers. This uses the Bottle single-file micro web framework (with no plugins).
上手体验,使用 bean-example
输出样例:
bean-example > example.bean
然后使用 fava 展示:
fava example.bean
建议在安装体验完后,仔细阅读作者提供的文档.
beancount 具体语法和使用方式 byvoid 的这篇文章 已经非常清晰,也就不在这里提了。这里只简单记录一下我需要记住的一些语法单词。
账户操作语法,创立账户、备注账户、注销账户:
[yyyy-MM-dd] open Assets:Cash:CNY "CNY"
[yyyy-MM-dd] note Assets:Cash:CNY "现金"
[yyyy-MM-dd] close Assets:Cash:CNY
五种账户类型,Assets,Liabilities,Equity,Income,Expenses,分别对应资产、负债、权益、收入、支出。
账单语法:
[yyyy-MM-dd] [*|?] "payee" "content"
[account1] +[num] [currency-unit]
[account2] (-[num] [currency-unit])
支付宝账单
- 支付宝账单,登录网页版查询
- 银行账单
- 其他账单可以使用这个工具 beancount-import
微信账单
微信账单可以通过如下方式导出,APP,通过“我”-“支付”-“钱包”-“账单”- 右上角“···”-“账单下载”。
导出的账单解压得到 csv,观察 csv 文件,前 16 行是账单信息,从第 17 行开始是真实有效的记录。包括了:
交易时间 交易类型 交易对方 商品 收 / 支 金额(元) 支付方式 当前状态 交易单号 商户单号 备注
处理交通银行信用卡
一种比较直观的方式就是从每个月发送的账单中,将网页的表格下载成 CSV 文件,然后使用自定的脚本批量的添加到 Beancount 中。
[[2021-02-02-beancount-introduction]]
我的管理方式
新建一个目录专门用来记录,该目录使用 git 来做版本管理,敏感内容使用 git-crypt 加密。