精选案例 · 数据处理与可视化 / Agent 自动化
Beancount 平行预算插件 — parallel_budget
一款由 AI(DeepSeek-v4-flash + OpenClaw Agent)全程生成的 Beancount 预算管理插件。采用平行记账(复式分录)方式,自动在交易末尾追加 Equity:Budget:* 账户脚注,不修改原始流水,预算余额可直接在 Fava 资产负债表查看。…
案例速读
README 完整解释了平行记账的核心思路(三组复式分录:支出、预算消耗、余额扣减),并给出了具体用法示例和 AI 生成过程。该插件解决了 Beancount 内置 budget 在 Fava 中不直观的问题,且完全由 AI 从零生成,是展示 AI 赋能复式记账工具的优秀案例。 建议从 「Beancount 平行预算插件 — parallel_budget」、「背景」、「核心思路」、「什么是平行记账?」 进入正文,先确认真实任务和模型辅助过程。
- 重点看 平行记账的设计模式可复用于其他需要额外核算的场景、AI 生成完整插件的流程(需求→代码→文档→示例)可参考、CLI 报表和 Fava Dashboard 配置可直接套用。结合 数据处理与可视化 / Agent 自动化 / beancount / plugin 和「Beancount用户、复式记账爱好者、需要直观预算视图的用户」,它更适合作为任务检索后的精读材料。
- 正文目录和原始材料仍然是判断依据;导读只帮助你更快定位阅读重点。
- 首读入口
- 背景
- 读者
- Beancount用户、复式记账爱好者、需要直观预算视图的用户
- 复用
- 平行记账的设计模式可复用于其他需要额外核算的场景
- 结构
- 10 个目录入口
原文内容
Beancount 平行预算插件 — parallel_budget
图片暂时无法显示:Type
图片暂时无法显示:AI
用 AI 词元生成的 Beancount 预算管理插件,采用「平行记账」思路,不使用内置
budgetdirective。
背景
Beancount 内置的 budget 机制需要配合 bean-query 按特定语法查询,不够直观,也无法在 Fava 的资产负债表上直接看到预算执行情况。于是我用 AI(DeepSeek-v4-flash + OpenClaw Agent)全程生成了这个插件。
核心思路
什么是平行记账?
传统的预算跟踪方式往往需要修改原始交易——比如给支出加标签、分类目、或者单独记一笔预算消耗。这不仅容易破坏原始账目的干净性,还让后续审计变得麻烦。
平行记账的思路是:不动原始交易,额外增加一套"影子"账目。
你的支出还是那笔支出(Expenses:Food:Grocery 不变),但插件会自动在交易末尾追加两条脚注:
Assets:CreditCard:Demo -120.50 USD ← 原始支出不动
Equity:Budget:Expenses:Food 120.50 USD ← 新增:记录预算消耗
Equity:Budget:Balance:Food -120.50 USD ← 新增:扣减预算余额
这三条脚注形成一组完整的复式分录,所有预算信息都沉淀在 Equity:Budget:* 账户里,不影响你原有的资产负债结构。
为什么用复式记账做预算?
传统的预算工具(如 YNAB 或 Excel 表格)通常是"单式"的——只看花了多少、还剩多少。而 Beancount 是复式记账,每一笔都有来有去。
parallel_budget 把预算也做成复式的:
| 账户 | 作用 |
|---|---|
Equity:Budget:Expenses:{name} |
累计该预算下的实际支出(借方) |
Equity:Budget:Balance:{name} |
预算余额(贷方),周期初=预算额,周期末=剩余 |
Equity:Budget:Income:{name} |
预算投入(贷方),周期初调整时使用 |
每一笔支出触发:
Expenses:Food:Grocery +120.50 ← 你花钱了
Equity:Budget:Expenses:Food +120.50 ← 平行标记:这笔算 Food 预算
Equity:Budget:Balance:Food -120.50 ← 平行标记:Food 余额减少
每周期初触发一次调整:
Equity:Budget:Income:Food +X.XX ← 预算投入
Equity:Budget:Balance:Food +X.XX ← 余额增加到预算金额
关键细节:调整金额
X.XX不是硬塞预算额,而是补差值——如果上期还剩 1847.50,本期预算 2000,只补 152.50。不会因为跨期重复充值。
这样做的好处
- 原始账本零污染 — 你的收支流水还是原来的样子,预算数据独立在
Equity:Budget:*下 - Fava 直接可见 — 在 Fava 资产负债表里展开
Equity:Budget就能看到每个预算的余额,无需额外报表 - 可审计 — 每一分钱怎么来的、怎么花的一清二楚,符合复式记账的完整链条
- 零冲突 — 不与 Beancount 内置
budgetdirective 冲突,可以同时使用
用法示例
2026-01-01 custom "parallel_budget" "Food" "monthly" 2000 USD
2026-01-01 custom "parallel_budget" "Renovation" "once" 20000 USD
支出会自动匹配前缀并标记平行账脚注。
配套工具
- Fava Dashboard —
dashboards.yaml提供预算执行面板 - CLI 报表 —
report.py终端表格输出预算状态 - 示例账本 —
examples/下可直接make run运行
AI 参与
本插件的所有代码、文档和示例均由 OpenClaw + DeepSeek-v4-flash 生成。具体过程:
- 需求描述 — 用户用自然语言描述"想要一个平行记账的 Beancount 预算插件"
- 代码生成 — AI 理解复式记账原理,生成插件核心逻辑(交易标记、周期调整、余额计算)
- 迭代优化 — 多轮对话中修复了:跨周期余额累计问题、一次性预算的特殊处理、前缀匹配逻辑
- 文档与仪表板 — AI 自动生成 README、Fava dashboard 配置、CLI 报表脚本
- 示例账本 — 生成可运行的示例帮助快速上手
从零到完整可用的 Beancount 插件,全程未手写一行代码。
链接
- GitHub:https://github.com/ertuil/beancount_parallel_budget
- 镜像:https://git.elliot98.top/elliot/beancount_parallel_budget