Beancount_05_项目管理


目录:

Beancount系列文章的前四篇已经基本覆盖了常用的复式记账方法。记账本身是一门经验的学问,不仅包括账本身怎么记,还包括了「账本」怎么整理。这篇文章不涉及复杂的会计学概念,只是从经验、工程的角度来讲一讲我实际记账过程中账本是怎么组织的。

账本组织结构

目前为止我们假设所有的Beancount记录都是在单一文件中的,这个文件会随着账目的增多越来越膨胀,直到用编辑器维护不便。

Beancount 允许将账本拆分,然后通过 include 语法将账本进行关联起来。利用这个简单的语法,就可以将一个巨大的账本分成若干个较小的账本,方便管理和查找。但Beancount 最终会把所有交易都读到内存里后按日期重新排序,所以每条交易在文件里出现的顺序并不重要。

尽管有"文件包含语法(include)",但每条记录到底怎么划分还是一个仁者见仁智者见智的话题,下面是我根据自己的经验对账单进行一个分割管理。但首先要明白划分的目的:

  1. 降低维护成本
  2. 尽量减少可能的错误

选择自己合适的组织结构,这是一项大工程

我的账本目录结构如下:

Beancount-Trans-Assets/
.
├── 2022  ; 以年做分割
│   ├── 00.bean  ; include该目录下的其他所有文件
│   ├── 01-expenses.bean  ; 2022年01月份账单(支出、转账等)
│   ├── 02-expenses.bean
│   ├── 03-expenses.bean
│   ├── 04-expenses.bean
│   ├── 05-expenses.bean
│   ├── 06-expenses.bean
│   ├── 07-expenses.bean
│   ├── 08-expenses.bean
│   ├── 09-expenses.bean
│   ├── 10-expenses.bean
│   ├── 11-expenses.bean
│   ├── 12-expenses.bean
│   ├── cycle.bean  ; 周期性费用/交易目录(每月信用卡还款、水电费、车贷房贷等)
│   ├── event.bean  ; 事件记录(位置、入职离职情况、重要日子记录等)
│   ├── income.bean  ; 除投资外的所有收入(薪资、红包、副业等)
│   ├── invoice.bean  ; 报销
│   ├── price.bean  ; 跟踪通货(例如黄金、股票等)价格情况,方便在合适的时候买入卖出
│   ├── securities.bean  ; 投资记录
├── account  ; 保存五类经典账户的启用及关闭
│   ├── assets.bean
│   ├── equity.bean
│   ├── expenses.bean
│   ├── income.bean
│   └── liabilities.bean
├── depreciation.bean  ; 折旧账单,具体使用看'结余与资产',已经列出该账单的详细使用
├── document  ; 存放例如账单文件等文档目录
│   └── Syntax_Cheat_Sheet.png  ; beancount格式小抄
└── main.bean ; 主账本,使用fava main.bean输出可视化界面

最底下的 main.bean 是我的主账本(查账执行 fava main.bean)。该文件的内容如下:

; main文件
; 1. 账本信息
option "title" "xxx的账本"
option "operating_currency" "CNY"  ; 人民币
option "operating_currency" "COIN"  ; 不可流通1:1转换人民币
option "operating_currency" "TIME"  ; 按次记录
2022-01-01 custom "fava-option" "language" "zh"  ; 配置fava以中文显示

; 2. 账户设置
include "accounts/assets.bean"  ; 资产账户设置
include "accounts/equity.bean"  ; 负债账户设置
include "accounts/expenses.bean"  ; 支出账户设置
include "accounts/income.bean"  ; 收入账户设置
include "accounts/liabilities.bean"  ; 权益账户设置

; 3. 插件管理
plugin "beancount.plugins.forecast"  ; 分期插件
plugin "beancount.plugins.auto_accounts"  ; 根据条目自动添加账户插件

; 4. 定期折旧
include "depreciation.bean"

; 5. 交易记录
include "2021_template/2021_template.bean"  ; 该文件是模板文件
include "2022/2022.bean"

我使用 include 导入了 6 个文件,其中 5 个账户设置文件,1 个年度账本。

Assets账户设置文件模板如下:

; 人民币包括各类银行卡,微信支付宝和别人的欠款
2022-01-01 open Assets:Savings:Bank:ZhaoShang:C8837 CNY ; 银行卡
2022-01-01 open Assets:Receivables:Personal:XXX CNY  ; XXX的欠款自己的资产可以理解为先给对方保管当对方还钱后再加回到银行卡并关闭账户

; 代币不方便流通但与人民币1:1等值兑换包括储值卡,公积金账户及投资
2022-01-01 open Assets:Savings:Recharge:YiMing COIN  ; 充值
2022-01-01 open Assets:Savings:Recharge:YongHeDouJiang COIN  ; 2022-01-01是我的初始化时间
2022-09-09 close Assets:Savings:Recharge:YongHeDouJiang  ; 当储值卡不再使用后推荐及时关闭fava中也随之不再显示
2022-01-01 open Assets:Investment:AliPay:Gold  ; 投资可以按克重来计算

; 点券与人民币非等值兑换
2022-01-01 open Assets:Savings:Recharge:HuaWei:Read TOKEN
2022-01-01 open Assets:Savings:Recharge:WangZhe TOKEN  ; 例如在王者荣耀中1人民币=10点券

; 按次消费
2022-09-04 open Assets:Savings:Time:Foot TIME  ; 洗脚有点类似储值消费但又是按次来使用的(经实际验证我将该记录保存至time.bean文件消费后则关闭该账户)

2022.bean 文件仍然没有交易记录,而是继续导入其它账本,其账本如下:

; 2022.bean文件
include "0-default/00.bean" ;默认目录,每月日常支出,收入,转账等(当年的收入、转账、event 事件)
include "1-securities/00.bean" ;证券投资目录(股票和基金买卖记录)
include "2-trip/00.bean" ;旅行 & 出差目录(旅行出差的账本,命名日期-地点.bean)
include "3-cycle/00.bean" ;周期性费用/交易目录(每月信用卡还款、水电费、车贷房贷等)
include "4-project/00.bean" ;项目目录(车子、房子等大宗商品)

概括起来,我的账本结构分三层:

第 1 层:main.bean 作为主账本,include 各个账户文件及每年账本文件。

第 2 层:每年有个目录,下设年份.bean 的文件,include 各个子目录下 00.bean 文件。

第 3 层:每个子目录下 00.bean 文件 include 该目录下所有正式的记账文件。

这样设计优点:

  • 按年组织,往年数据直接存档,不会被破坏
  • 年份目录下进行分类记录,避免放在一个文件不好维护

总结

还是那句话,复式记账只有规范,没有对错。我把我的记账原则总结成了以下规则,在记账前先行判断:

  1. 如果是收入(对于先替别人付,然后别人转账给我的条目记为应收款项而不是收入,参考Beancount_02_借贷记账法中的借贷管理),统一记录到当年的income.bean中,如果收入较多(我不理解,但我大受震撼),可以将最近的收入上往下记录,这样打开文件可以直接看到最近的收入;

  2. 如果该支出属于投资类型,那么就加入到securities目录。若是考虑到投资种类,可以在投资类型下继续细分为股票、黄金等;

  3. 如果该支出是一个周期项目,例如信用卡还款、订阅、话费、贷款、折旧等,加入到cycle.bean目录中。

  4. 如果是在旅游、出差过程中产生的支出,则记录在[]-expenses.bean目录中并打上标签pushtag #20221001-hangzhoupoptag #20221001-hangzhou方便索引;如果遇到需要报销的场景,则额外为报销添加链接^201909-out

  5. 如果该支出是一个大宗项目(具体多少算大宗根据自身情况),同样根据标签#Hone进行索引。

  6. 不属于以上情况,统一加入按日期划分的文件

2024-01-08 * "古茗" "商品详情"
    time: "18:23:03"
    uuid: "4200002101202401080969304458"
    status: "WeChat - 支付成功"
    Expenses:Food:DrinkFruit +26.00 CNY
    Liabilities:CreditCard:Bank:ZhaoShang:C4523 -26.00 CNY
  1. 每月1号早将所有账户balancae断言后再对账,所有账单条目清晰后对于利息造成的误差使用pad进行填充。对于pad和balance日期有疑问可回看Beancount_04_结余与资产
2023-01-14 balance     Liabilities:CreditCard:Bank:ZhongXin:C6428  -4633.20 CNY  ; 信用卡
2023-01-13 pad         Assets:Savings:Bank:NingBo:C1746 Income:Investment:Interest  ; 投资收益
2023-01-14 balance     Assets:Savings:Bank:NingBo:C1746             2395.62 CNY  ; 银行卡
2023-01-13 pad         Assets:Savings:Bank:ZhaoShang:C8837 Income:Investment:Interest
2023-01-14 balance     Assets:Savings:Bank:ZhaoShang:C8837          7959.36 CNY
2023-01-13 pad         Assets:Savings:Web:WechatPay Income:Investment:Interest
2023-01-14 balance     Assets:Savings:Web:WechatPay                  784.54 CNY
2023-01-14 balance     Assets:Savings:Web:AliPay                       0.00 CNY