会计循环,Beancount 风格
财务报表并非凭空出现。它们是称为 会计循环 的结构化、可重复过程的最终产物。虽然原则是通用的,但你使用的工具可以极大改变体验。本指南将以 Beancount——这款强大的纯文本会计工具——为中心,带你走完整个会计循环。
我们将看到 Beancount 的文本优先方法如何消除繁琐步骤、哪些环节应当自动化,以及哪些报告能为你的财务健康提供最清晰的视图。 🧑💻
TL;DR: Beancount 工作流
- 捕获 & 记账: 在
.beancount
文本文件中以干净的双重分录记录每笔交易。 - 验证 & 对账: 使用
balance
断言确认账本与银行对账单匹配,并运行bean-check
捕获错误。 - 审查: 生成未调整试算表进行快速检查。
- 调整: 为应计、递延、折旧及其他期末项目做分录。
- 复审: 检查调整后的试算表确保一切正确。
- 发布 & 结账: 生成损益表、资产负债表和现金流量表。Beancount 中的结账是可选的,因为报告具备日期感知能力。
此流程可视化如下:
步骤 1:捕获并记录交易
这是基础步骤。每个财务事件——销售、采购、银行费用——都必须记录。在 Beancount 中,你通过在一个简单的文本文件(通常命名为 main.beancount
,或按年份拆分为多个文件)中创建交易来完成此操作。
每笔交易必须遵循双重记账规则,即所有分录的合计必须为零。Beancount 会为你强制执行此规则。
2025-08-10 * "Walmart" "Purchase of office supplies"
Expenses:Office:Supplies 45.67 USD
Assets:Bank:Checking -45.67 USD
- 技巧: 使用
#project-phoenix
或#client-acme
等标签为数据添加维度。这样在后期查询和报告时会极其灵活。
对账卫生 ✅
确保准确性的最强大功能是 balance 断言。在账单周期结束时(例如月末),声明账户的 应有 余额。
2025-08-31 balance Assets:Bank:Checking 12345.67 USD
如果截至该日期影响 Assets:Bank:Checking
的所有交易合计不等于 12345.67 USD
,Beancount 将抛出错误。这个简单指令让你的账本成为自审文件。
对于回填历史数据,pad
指令可以自动创建平衡交易,使你的期初余额匹配首个断言。
步骤 2: “记入账本” (免费赠送!)
在传统会计系统中,你先在 “日记账” 中写分录,然后在单独的 “过账” 步骤中将这些数值复制到 “总账”。
使用 Beancount,你的 .beancount
文件即是日记账也是总账。 当你写入并保存交易时,已经完成了过账。没有单独的步骤。这种直接性是纯文本会计的核心优势——所见即所得。
步骤 3:准备未调整试算表
在进行调整之前,需要快速进行 “这是否相加?” 检查。试算表 是列出每个账户及其总余额的简易报告。所有借方余额的总计必须等于所有贷方余额的总计。
你可以使用简单查询生成它:
bean-query main.beancount \
"SELECT account, sum(position) GROUP BY 1 ORDER BY 1"
或者,使用更直观的方式,在 Fava(Beancount 的网页界面)中打开账本并导航至 “Trial Balance” 报告。留意异常——资产账户出现贷方余额,或费用账户出现奇怪数值。