Beancount & Fava 家庭资产管理搭建

Python3 安装

官网下载 Python3 64位

Beancount & Fava 安装

1
2
pip install beancount
pip install fava

相关安装问题

用pip去安装一些第三方包的时候会出现如下错误,缺少C++编译器,因为有些程序需要使用,没有C++接口会报错,下载VisualCppBuildTools_Full.exe

百度网盘:https://pan.baidu.com/s/12CtRtvbFBL29H_OlD_--lA 提取码:py5a
115网盘:https://115.com/s/sw63yvc3373?password=g355&# 访问码:g355
参考地址:https://blog.csdn.net/love906897406/article/details/125355524

Beancount & 复式记账 介绍

Beancount基于会计恒等式底层原理进行记账

复式记账底层结构一般分为五大类

  • 资产 Assets
  • 负债 Liabilities
  • 收入 Income
  • 支出 Expenses
  • 权益 Equity
关系 行为 记账
收入 -> 资产 工资收入:10000元 资产+10000
负债 -> 资产 信用卡刷:10000元 负债-10000、资产+10000
资产 -> 支出 购买Iphone14花费:20000元 资产-20000、支出+20000
费用 -> 资产 二手Iphone14卖了:10000元 资产+10000、支出-10000

收入 -10000

负债 -10000

资产 10000

费用 10000

每笔交易在不同账户的数字加起来和为0是复式簿记的重要特性和原则,也是用来检验账目正确性的重要依据。

Income收入通常是负数、Expenses支出通常是正数、Equity一般用于初始化当前资金

你赚的钱(Income),加上你借来的钱(Liabilities),最终要么变成你自己的钱(Assets),要么就是花掉了(Expenses),最终得到的是个零。

(Income + Liabilities) + (Assets + Expenses) + Equity = 0

Assets 资产

  • 储蓄卡 DebitCard
  • 余额宝 Alipay
  • 微信零钱 Weixin
  • 基金 Fund

Liabilities 负债

  • 信用卡 CreditCard
  • 贷款 Loan

Income 收入

  • Job 工资
  • Interest 利息(银行卡、余额宝)
  • Trade 交易(二手)

Expenses 支出

  • Clothing 衣
  • Food 食
  • Housing 住
  • Transportation 行

Equity 权益

  • Opening-Balances 开始记账记录初始金额用

基本语法

1
YYYY-MM-DD <操作> <参数...>

创建商品单位

1
2
1998-07-22 commodity AAPL
name: "Apple Computer Inc."

对商品定价

1
2
2015-04-30 price AAPL   125.15 CNY
2015-05-30 price AAPL 130.28 CNY

创建和关闭账户

账户需要显式的创建,这里的关键字是open,当现实中账户关闭的时候,也可以关闭close 。账户命名是通过冒号连接起来。

比如

1
2
3
4
2002-01-17 open Assets:Cash CNY
2002-01-17 open Equity:Open-Balances
2002-01-17 open Liabilities:CreditCard:CN:CMB
2020-01-17 close Liabilities:CreditCard:CN:CMB

交易

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2014-05-05 * "COCO咖啡店" "一杯奶茶"
Liabilities:CreditCard:CN:CMB -12.00 CNY
Expenses:Food 12.00 CNY

2016-01-31 * "LineWell" "工资"
Income:LineWell:Salary -20000.00 CNY ; 应发工资
Income:LineWell:Reimbursement -1000.00 CNY ; 餐补
Income:LineWell: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 ; 实发工资

通常 * 表示交易数据无误,而!表示交易数据可能有错。

* 后的两个string,第一个是payee,就是收款方, 可选的,也可以省略 第二个是narration 就是描述,

断言 Balance Assertion

编程的同学应该很容易理解. 这个概念和测试中的断言是一个意思。

当你对某一个账户在某个时间点上做断言的时候,

1
2015-06-01 balance Liabilities:CreditCard  -634.30 CNY

Beancount会根据这个来验证其账目的正确性,如果不匹配,则会报错。这个时候就需要对账找出并且修复错误。显然,时不时的对账户做断言是保持账户正确性的必要条件。而且如果出错,你只需要对比上一次正确断言和当前出错断言之间的记录即可。

填充 Padding

填充是和断言一起使用的,当断言出现在填充之后(二者时间之内不能有其他交易),beancount会自动根据pad的参数,将余额调整至断言中的数据。

1
2
2019-12-31 pad     Liabilities:CreditCard:US:Chase:SapphirePreferred  Equity:Opening-Balances
2020-01-01 balance Liabilities:CreditCard:US:Chase:SapphirePreferred -95.0 CNY

这个在初始化账本的时候,需要设定账户初始值的时候会频繁使用。

记账结构

个人家庭记账目录结构数以及文件描述,完善ing~

MyBeanCount
├── main.bean 主账本
├── 2022
├── 2023
├── 2024
│ ├──2024.bean 2024账本
│ ├──1-Income
│ │ └── income.bean 2024收入
│ ├──2-Expenses
│ │ ├── expenses.bean 2024支出
│ │ ├── 202401.bean 1月支出
│ │ ├── 202402.bean 2月支出
│ │ ├── 202403.bean 3月支出
│ │ ├── 202404.bean 4月支出
│ │ ├── 202405.bean 5月支出
│ │ ├── 202406.bean 6月支出
│ │ ├── 202407.bean 7月支出
│ │ ├── 202408.bean 8月支出
│ │ ├── 202409.bean 9月支出
│ │ ├── 202410.bean 10月支出
│ │ ├── 202411.bean 11月支出
│ │ └── 202412.bean 12月支出
│ ├──3-Trip
│ │ ├── trip.bean 2024旅行
│ │ ├── 20240402-beijing.bean 20240402北京旅行
│ │ └── 20240602-beijing.bean 20240602北京旅行
│ ├──4-Entertainment
│ │ ├── movie.bean 电影
│ │ └── show.bean 演出
│ └──5-Cycle
│ ├── vip.bean vip年度续费
│ └── creditcard.bean 年度信用卡
└── accounts
├── assets.bean 开户(储蓄卡、余额宝)
├── liabilities.bean 开户(信用卡、花呗、贷款)
├── expenses.bean 开户
├── income.bean 开户(工资卡)
└── equity.bean 开户

参考博客 & 文档

排名不分先后,自学过程中参考过的文章

把自己当做一家公司:使用 beancount 记账

Beancount —— 命令行复式簿记

Beancount复式记账(一):为什么

记账神器 Beancount 教程

Beancount 记帐小进阶之一–环境配置

使用Beancount管理家庭财务

复式记账指北(一):What and Why?

复式借贷记账法 Beancount (0) - 先导