跳转到主要内容
Beancount 中的预算管理

Beancount 中的预算管理

如何使用自定义指令在 Beancount 中设置和可视化按账户的预算,并集成 Fava 界面。

本指南将介绍如何使用 Beancountcustom 指令Fava 网页界面 来设置、管理和可视化按账户的预算。

如何设置预算

预算通过在 Beancount 文件中使用 custom "budget" 指令来定义。语法如下:

YYYY-MM-DD custom "budget" 账户名称 "间隔" 金额 货币
  • 账户名称:要为其设置预算的特定支出或收入账户。
  • 间隔:预算周期。必须为 daily(每日)、weekly(每周)、monthly(每月)、quarterly(每季度)或 yearly(每年)之一。
  • 金额:该周期内的目标金额。

工作原理:

  • 一条预算指令从其指定日期起生效,直到同一账户的另一条预算指令将其覆盖。
  • Beancount 和 Fava 会将所有预算分解为每日等值金额,从而计算任意日期范围内的总预算金额。

示例:

; 设置咖啡的每日预算
2024-01-01 custom "budget" Expenses:Food:Coffee       "daily"      5.00 USD
 
; 设置食品杂货的每月预算
2024-01-01 custom "budget" Expenses:Food:Groceries    "monthly"  600.00 USD
 
; 设置度假的每年预算
2024-01-01 custom "budget" Expenses:Travel:Vacation   "yearly"  3000.00 USD

要调整预算,只需添加一条日期更晚的新指令。例如,从三月份开始增加食品杂货预算:

2024-03-01 custom "budget" Expenses:Food:Groceries    "monthly"  650.00 USD

在 Fava 中可视化预算

Fava 是 Beancount 的网页界面,它会自动检测并在多个关键报告中显示你的预算,让你能够将实际支出与目标进行比较:

  • 损益表净利润支出图表将显示预算值与实际值。
  • 变动(月度):显示每个月的预算金额。
  • 余额(月度):显示随时间累积的预算金额。

高级预算技巧

预算结转

默认的预算系统在每个周期结束后重置。要实施资金未使用部分可结转的 "rollover" 机制,请使用一个专门的资产账户来持有预算资金。

  1. 在周期开始时向预算账户注资:

    2024-02-01 * "注资每月娱乐预算"
      Assets:Checking                  -200.00 USD
      Assets:Budget:Entertainment       200.00 USD
  2. 直接从该预算账户支出:

    2024-02-15 * "看电影之夜"
      Expenses:Entertainment:Movies      30.00 USD
      Assets:Budget:Entertainment       -30.00 USD

    Assets:Budget:Entertainment 账户中的剩余余额即为你的结转金额。

追踪收入目标

你也可以通过使用负数预算金额来为收入账户设定目标。这样 Fava 就能追踪你的收入与目标的对比情况。

; 设置每月收入目标
2024-01-01 custom "budget" Income:Salary      "monthly" -5000.00 USD
2024-01-01 custom "budget" Income:Freelance   "monthly" -1000.00 USD

故障排除

如果你的预算未在 Fava 中显示,请检查以下项目:

  1. 日期格式:确保日期采用 YYYY-MM-DD 格式。
  2. 账户名称:指令中的账户名称必须与交易中的账户名称完全一致。
  3. 间隔拼写:间隔必须是五个有效选项之一,且为小写字母(例如 "monthly")。
  4. 重启 Fava:如果你最近添加了指令,可能需要重启 Fava 服务器才能加载更改。