复式记账法 && beancount
复式记账法
是一种把每笔交易都记录到复数个账户的记账方法。一般有5个桶:
- 资产 Assets:现金,银行存款,有价证券等;
- 负债 Liabilities:信用卡,房贷,车贷等;
- 收入 Income:工资,奖金等;
- 费用 Expenses:外出就餐,购物,旅行等;
- 权益 Equity:用于存放某个时间段开始前已有的货币。
货币在这五个桶里倒来倒去,出入相抵。这就是会计恒等式。这些桶里剩余的货币数量,则是生成损益表和资产负债表的重要依据。
例子
- 收入-》资产:路上捡到100块。 – 收入桶倒出100块,资产桶增加100块;
- 负债-》资产:看中一件衣服,找人借了200块。 – 负债桶倒出200块,资产通增加200块。
- 资产-》费用:用300块买了衣服。 – 资产桶倒出300块,费用桶增加300块。
- 费用-》资产:衣服不合适退回250块。 – 费用桶倒出250块,资产通增加250块。
要点:
- 收入(Income)通常是负数。意味着装着你一生(过去和未来)所有劳动成功的桶。每次收入都是从桶里取东西。
- 费用(Expenses)通常是正数。意味着装着你一生所有消费的桶。每次支出都是往桶里放东西。
- 负债()大多数情况下是正数,在还清时应该是0。
- 资产总是非负数。
- 权益可以看做是资产净值。
遵循的公式:(收入 + 负债) + (资产 + 费用) + 权益 = 0
使用beancount 记账
安装beancount:pip3 install beancount
安装fava:pip3 install fava
使用 bean查看:bean-web main.bean
使用fava查看:fava main.bean
交易格式
时间 是否核实 交易方 描述 #标签 ^链接
断言(assertion)
标记在某个日期,某个账号 里有多少钱。
例子:2016-02-01 balance Assets:Cash 500.00 CNY
添加了断言之后,beancount就会检查那个账号的数字是否与断言的数字相等,如果不相等就会报错。
填充(padding)
配合断言一起使用。当 beancount 解析到填充语句时,会自动在这条语句和下一条断言语句之间插入一条填充记录,使得断言成功。好处在于无需计算两个数字的差额。
例子:
2015-11-30 pad Assets:Cash Expenses:Food:Drinks
2015-12-01 balance Assets:Cash 200.00 CNY
用途:
- 忘记记账,使用自动填充配平。
- 开户时设定初始余额。
工资入账例子:
2016-01-31 * "工资 2016-01"
Income:SomeCompany:Salary -20000.00 CNY ; 应发工资
Income:SomeCompany:Reimbursement -1000.00 CNY ; 餐补
Income:SomeCompany:Reimbursement +100.00 CNY ; 餐补扣除
Expenses:Government:Pension +1500.00 CNY ; 养老保险
Expenses:Government:Unemployment +100.00 CNY ; 失业保险
Expenses:Government:MedicalCare +500.00 CNY ; 医疗保险
Expenses:Government:HousingFund +3000.00 CNY ; 住房公积金
Expenses:Government:IncomeTax +3000.00 CNY ; 个人所得税
Assets:CMB:C1234 +12800.00 CNY ; 实发工资