会计循环,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” 报告。留意异常——资产账户出现贷方余额,或费用账户出现奇怪数值。
步骤 4:记调整分录
调整分录对基于 权责发生制 的准确报告至关重要。它们确保收入在赚取时确认,费用在发生时确认,而不论现金何时流动。
常见调整包括:
- 应计: 记录已赚但未开票的收入,或已发生但未付款的费用。
- 递延: 处理预付款。如果客户提前为一年服务付款,你将其记为负债 (
Liabilities:UnearnedRevenue
) 并在每月确认 1/12 的收入。 - 非现金项目: 记录资产折旧等。
- 更正: 修正错误或补记银行流水中遗漏的项目,如小额利息收入。
示例:应计收入
你在 8 月 31 日完成项目,但发票要到 9 月才寄出。为在正确期间(8 月)确认收入,做如下调整分录:
2025-08-31 * "Accrue revenue for client project #1042"
Assets:AccountsReceivable 3000.00 USD
Income:Consulting -3000.00 USD
示例:记录折旧
公司对资产有折旧计划。期末时记入费用:
2025-12-31 * "Annual depreciation on computer equipment"
Expenses:Depreciation 4800.00 USD
Assets:Fixed:AccumulatedDepreciation -4800.00 USD
步骤 5:运行调整后试算表并验证
加入调整分录后,再次运行试算表。这就是 调整后试算表,它提供了用于编制财务报表的最终数字。
此时也是运行 Beancount 内置检查的最佳时机:
bean-check main.beancount
该命令会验证所有语法、平衡规则和断言。若无任何输出,说明账本在机械层面上是健全的。