docs: 冻结预算 v4 语义架构最终规范 将两轮独立复审及最终采纳意见收敛为唯一实施文档,明确架构定稿不等于生产内核验收,也不承诺识别录入或导入层面的财务错误。 补齐消费分类的正式写入域:增加 BudgetClassificationClaim,规定费用与收入分录必须完整分类,外部切片与行内 budget 互斥,并按 booked 子腿逐项认领,避免多桶重复领取同一金额。 固定历史价值分摊协议:统一价格下按原生数量精确比例分配原总价,预算外切片同样参与守恒,退款保持有符号结果;支付分配须逐切片认证,零数量和拆 lot 情况分别定义拒绝或精确分配路径。 区分完整快照的报告失效与人工证据的局部重验:无关交易变化必须重算报告,但不得要求未变的旧归属、配组和计价证据全部重新审批。补充分类重复认领与价值不守恒诊断。 修正证券迁移预期:在投资资产归命名用途的前提下,真实账本有 433 笔带成本资产及费用收入对手的交易需要显式组审阅,而非仅有 66 笔带价格交易;明确生成提案、批量审阅不能替代人工确认。 收拢过时草案与复审材料,移除最终规范对旧文档的链接;保留支持域、拒绝边界、复审裁决摘要和后续生产验收要求,声明语义变更必须升级 schema 并提供迁移与回归测试。 验证:Astra 新增 4 项分类算术检查通过;Beancount 3.2.3 只读加载真实账本 8932 entries、0 errors;git diff –check 通过。此提交只包含文档,不包含 v4 生产实现或真实账本迁移。
docs: 冻结预算 v4 语义架构最终规范
将两轮独立复审及最终采纳意见收敛为唯一实施文档,明确架构定稿不等于生产内核验收,也不承诺识别录入或导入层面的财务错误。
补齐消费分类的正式写入域:增加 BudgetClassificationClaim,规定费用与收入分录必须完整分类,外部切片与行内 budget 互斥,并按 booked 子腿逐项认领,避免多桶重复领取同一金额。
固定历史价值分摊协议:统一价格下按原生数量精确比例分配原总价,预算外切片同样参与守恒,退款保持有符号结果;支付分配须逐切片认证,零数量和拆 lot 情况分别定义拒绝或精确分配路径。
区分完整快照的报告失效与人工证据的局部重验:无关交易变化必须重算报告,但不得要求未变的旧归属、配组和计价证据全部重新审批。补充分类重复认领与价值不守恒诊断。
修正证券迁移预期:在投资资产归命名用途的前提下,真实账本有 433 笔带成本资产及费用收入对手的交易需要显式组审阅,而非仅有 66 笔带价格交易;明确生成提案、批量审阅不能替代人工确认。
收拢过时草案与复审材料,移除最终规范对旧文档的链接;保留支持域、拒绝边界、复审裁决摘要和后续生产验收要求,声明语义变更必须升级 schema 并提供迁移与回归测试。
验证:Astra 新增 4 项分类算术检查通过;Beancount 3.2.3 只读加载真实账本 8932 entries、0 errors;git diff –check 通过。此提交只包含文档,不包含 v4 生产实现或真实账本迁移。
Beancount 预算分析工具。输入账本 + 预算配置,自动生成预算统计与多格式报告。
支持 TUI 交互模式(无参数或 --tui 启动)和 CLI 批处理模式(带参数运行)。
--tui
详细功能清单与用法见 QUICKSTART.md
TUI 模式 — 推荐日常使用:
# 直接启动,全键盘操作(路径从 budget-tool.toml 加载) cargo run # 显式 TUI:命令行路径作为初始值(TUI 内按 z 可再改) beancount-budget-tool --tui \ --budgets budgets.yml --config config.yml --ledger-dir ./transactions/
模式划分:
budget-tool.toml
--tui [--budgets X --config Y --ledger-dir Z --ledger F]
-m
--year
--compare
--help
--version
TUI 内按 z 可修改预算文件 / 配置文件 / 账本目录 / 币种。编辑时按 Enter 保存并立即重跑报告,然后返回设置字段选择页;按 Esc 取消编辑并返回字段选择页,再按 Esc 返回主界面。改动仅本次会话生效(不写回 toml)。
z
CLI 模式 — 脚本/自动化:
beancount-budget-tool -m 2026-06 \ --budgets budgets.yml --config config.yml \ --ledger-dir ./transactions/ --scope cumulative
三样东西:
budgets.yml
default_monthly
config.yml
budget:
cargo build --release
default_monthly: # 月预算模板(可选) 储蓄: 700 生活费: 饮食: 2000 交通: 300 数码: 3000 "2026-06": # 6月只写与模板不同的部分 数码: 5000 # 覆盖模板 → 5000 # 生活费.饮食 没写 → 继承模板 2000
生活费.饮食
生活费.交通
YYYY-MM template
tracking_buckets
default_expense_bucket: 生活费 defaults: # 账户 → 桶(最长前缀匹配) "Expenses:Consume:饮食": 生活费.饮食 "Expenses:Consume:交通": 生活费.交通 tracking_buckets: # 跟踪桶:只追踪不预算 - 基金.旅游 - 大额支出 # 多币种汇率(无 @@ 注释的纯外币交易自动换算) currency_rates: JPY: 0.04327 USD: 6.77 asset_bucket_accounts: # 资产桶(可选) 储蓄: - "Assets:Bank:建设银行"
; 基本用法 2026-06-17 * "京东" "买耳机" budget: "数码" Expenses:Consume:电子 2000 CNY Assets:Bank:工行 -2000 CNY ; 多桶 + 金额拆分 2026-06-25 * "基金定投" budget: "电子产品900, 旅游900" Assets:Invest:基金 1800 CNY Assets:Bank:工行 -1800 CNY ; 多币种:@@ 自动转换,或配 currency_rates 2026-07-16 * "Hotel" "日本旅行住宿" budget: "宁波日本之旅" Expenses:Travel 158.12 USD @@ 1070.16 CNY Liabilities:CreditCard -158.12 USD @@ 1070.16 CNY
-m, --month <YYYY-MM>
--from/--to <YYYY-MM>
--year <YYYY>
--budgets <FILE>
--config, -c <FILE>
--scope <month|cumulative>
--bucket <NAME>
--bucket-view <s|m|d>
--sort-by <name|planned|actual|remain>
--expand
--compare <YYYY-MM>
--filter <KEYWORD>
--out-dir <DIR>
--csv-pivot
--out-json
--currency <CODE>
src/ cli.rs CLI 参数 config.rs budgets.yml + config.yml 加载 ledger.rs Beancount 账本解析(含 @@ 价格注释) budget.rs 预算引擎(FlowKind 分类 + 多币种转换) util.rs 基础类型(ReportScope)+ CJK 对齐 tui.rs TUI 交互界面 main.rs 入口 + CLI/TUI 路由 + 集成测试 report/ mod.rs 重导出 shared.rs 共享工具 + 文件导出 text.rs 终端文本报告 md.rs Markdown 报告 csv.rs CSV 导出 json.rs JSON 导出
summary-{range}.md
.txt
buckets-{range}.csv
bucket-{桶名}-{range}.md
asset-locations-{桶名}-{range}.md
pivot-{range}.csv
summary-{range}.json
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
beancount-budget-tool
Beancount 预算分析工具。输入账本 + 预算配置,自动生成预算统计与多格式报告。
支持 TUI 交互模式(无参数或
--tui启动)和 CLI 批处理模式(带参数运行)。快速开始
TUI 模式 — 推荐日常使用:
模式划分:
budget-tool.toml)--tui [--budgets X --config Y --ledger-dir Z --ledger F]-m/--year/--compare等)--help/--versionTUI 内按
z可修改预算文件 / 配置文件 / 账本目录 / 币种。编辑时按 Enter 保存并立即重跑报告,然后返回设置字段选择页;按 Esc 取消编辑并返回字段选择页,再按 Esc 返回主界面。改动仅本次会话生效(不写回 toml)。CLI 模式 — 脚本/自动化:
三样东西:
budgets.ymldefault_monthly模板 + 按月覆盖config.ymlbudget:metadata 标注交易所属桶构建
核心概念
budgets.yml — 纯预算计划
生活费.饮食、生活费.交通YYYY-MM template键)config.yml的tracking_bucketsconfig.yml — 全局配置
Beancount 标注
CLI
-m, --month <YYYY-MM>--from/--to <YYYY-MM>--year <YYYY>--budgets <FILE>--config, -c <FILE>--scope <month|cumulative>--bucket <NAME>--bucket-view <s|m|d>--sort-by <name|planned|actual|remain>--expand--compare <YYYY-MM>--filter <KEYWORD>--out-dir <DIR>--csv-pivot--out-json--currency <CODE>项目结构
输出文件
summary-{range}.md/.txtbuckets-{range}.csvbucket-{桶名}-{range}.mdasset-locations-{桶名}-{range}.mdpivot-{range}.csvsummary-{range}.json