首页 公告 项目 RSS

使用beancount记账

August 29, 2023 本文有 2186 个字 需要花费 5 分钟阅读

简介

关于记账,我从诺基亚还是满天飞的时候就在研究这个东西,什么口袋记账,鲨鱼记账,松鼠记账,随手记我都用过,但是还是没有坚持下来,最主要的原因是这些软件没有一个是让我感觉到很舒服的,最近看到了 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