简介
关于记账,我从诺基亚还是满天飞的时候就在研究这个东西,什么口袋记账,鲨鱼记账,松鼠记账,随手记我都用过,但是还是没有坚持下来,最主要的原因是这些软件没有一个是让我感觉到很舒服的,最近看到了 beancount,发现这个真的是一个很强的东西,总得来说就是两个字: 优雅
什么是beancount
Beancount是一种用于跟踪财务交易和生成财务报表的开源会计软件。它采用纯文本格式的账簿文件,以及一种基于Python的领域特定语言(DSL)来描述交易和账户操作。
对于我来说,最重要的就是纯文本,这个意思就是我可以使用 git 去做版本管理,而且不用担心记账软件的服务器关闭导致数据丢失,当然beancount也不存在什么服务器不服务器的,而且可以生成各种报表,方便我知道什么时候花了多少钱,有多少账户,每个账户里面多少钱,有多少负债,总资产多少
什么是复式记账
Beancount 记账方法叫复式记账。
复试记账最主要的特点是: 每个交易都涉及至少两个账户,并且对这些账户的影响必须保持平衡。这是通过同时记录借方(Debit)和贷方(Credit)项来实现的。借方和贷方是会计术语,表示增加或减少账户余额的方向。
平时我们的记账方式是,比如我在 2023 年 8 月 29 号的时候 花 200 块钱买了一个路由器,记为下面
2023-08-29 买路由器 -200
但是复式记账是
2023-08-29 买路由器
银行卡 -200
路由器 200
简单来说,复式记账中,每一次交易都会设计到两个账户,这个例子中路由器和银行卡都是属于账户,他们之间相加就是 0,保持平衡
安装 beancount
这个很简单,首先你要安装 python,之后
pip install beancount
安装完beancount之后我们可以安装fava
pip install fava
Fava是一款开源的财务报表工具,专为Beancount账簿文件设计。它提供了一个直观的Web界面,用于浏览、查询和可视化Beancount账簿中的财务数据。
配置账本元数据
首先你要创建一个账本,简单来说就是一个后缀为.bean
的纯文本文件,比如main.bean
,之后你需要配置一些账本元数据
option "title" "我的账本" ;账本名称
上面 option
是配置账本元数据的关键字,后面的 title
表示配置账本名称,我的账本
表示title
的值 ;
后面的是注释
除了配置账本名称你还需要配置这个账本的主要货币
option "operating_currency" "CNY"
同样option
是配置账本元数据的关键字,后面的 operating_currency
表示要配置这个账本的主要货币,CNY
表示人民币
配置账户
配置完成元数据之后就是配置你的账户,beancount 有下面的账户类型
- Assets: 资产账户,比如你的银行卡账户,支付宝微信账户,股票账户等等,资产账户通常以正数表示,表示资产的增加或净值的增长。
- Liabilities: 负债账户,比如你的信用卡,花呗,贷款等等,负债账户通常以负数表示,表示负债的增加或净值的减少。
- Income: 收入账户,比如你的工资,股息,收入等等,收入账户通常以正数表示,表示收入的增加。
- Expenses: 费用账户,费用账户一般用来记录你的支出,比如购买东西,房租,吃饭消费等等,费用账户通常以负数表示,表示费用的增加或支出的金额。
- Equity: 所有者权益账户,一般不直接使用,Beancount 中一般用来平衡其他账户,比如初始化账户
下面是开户的案例
2023-08-24 open Assets:ALIPAY CNY ;支付宝
前面时间表示开户的时间,open
表示开户的关键字,Assets
表示账户类型,ALIPAY
表示账户名称,CNY
表示账户所使用的货币,;
后面表示注释
初始化账户
初始化账户其实就是给所有的账户一个初始化的值,然后使用Equity:OpenBalance
平衡记账,其实就是记一次账
2023-08-24 * "" "初始化余额"
Assets:CMBCHINA 1.63 CNY
Equity:OpenBalance -1.63 CNY
上面表示我的招商银行里面有 1.63 元,而这 1.63 元复式记账中,因为要收支平衡,这个钱就从Equity:OpenBalance账户中来
记账
下面是一个记账案例
2023-08-25 * "午饭" "黄焖鸡"
Expenses:Food 19 CNY
Assets:CMBCHINA -19 CNY
表示在2023-08-25时候,黄焖鸡花了 19 块钱,使用招商银行付款
总得来说如下
日期 * "交易方" "交易备注"
账户 金额 货币
账户 金额 货币
我的账本案例
下面是我的账本模板,大家可以参考下,注意所有;
开头的都是注释
;[账本的基础信息]
option "title" "我的账本"
option "operating_currency" "CNY"
;收入(Income):工资、投资收益等。
;支出(Expenses):衣、食、住、行等。
;资产(Assets):储蓄卡余额、支付宝余额、股票账户余额、房子、车子等。
;负债(Liabilities):信用卡欠款、房贷、车贷等。
;权益(Equity):这个账户比较特殊,在账户初始化、误差处理等少数场合使用。
;[欠款]
2023-08-24 open Liabilities:CMBCreditCard CNY ;招商银行信用卡
;[账户]
2023-08-24 open Equity:OpenBalance ;用于账户初始化,支持任意货币
2023-08-24 open Assets:CMBCHINA CNY ;招商银行
;[收入类型]
2023-08-24 open Income:Salary CNY ;工资
;[支付类型]
2023-08-24 open Expenses:Food CNY ;吃饭
;[初始化账户]
2023-08-24 * "" "初始化余额"
Assets:CMBCHINA 1.63 CNY
Equity:OpenBalance -1.63 CNY
;[初始化欠款]
2023-08-24 * "" "初始化欠款"
Liabilities:CMBCreditCard -1.16 CNY
Equity:OpenBalance 1.16 CNY
;[交易记录]
;日期 * "交易方" "交易备注"
; 账户 金额 货币
; 账户 金额 货币
;[2023-08-24]
2023-08-24 * "超市" "购买巧克力"
Expenses:Food 1 CNY
Assets:CMBCHINA -1 CNY
使用fava
你可以使用fava可视化你的账户
fava main.bean
之后打开
http://127.0.0.1:5000
推荐编辑器
你可以使用 vscode 去编辑,并且安装 beancount 插件
https://github.com/Lencerf/vscode-beancount
最佳
最后
当然,如果你熟悉 cicd 的话,你可以把账本放在 git 上,然后使用各种 cicd 工具去部署 fava,然后可视化你的账户
欢迎关注我的博客www.bboy.app
Have Fun