Beancount.io 简介
本指南综合了使用强大的开源纯文本会计工具 Beancount 进行纯文本会计的最佳实践。它涵盖了基本理念、从基础到高级的语法、复杂资产的实际案例研究以及长期账本管理策略。
第一部分: “为什么”——智能记账的基础
在深入研究“如何做”之前,理解“为什么”至关重要。 有效的记账是个人财务管理的基础,也是实现财务清晰和自由的必要步骤。
超越费用跟踪:通往财务清晰之路
简单的费用跟踪应用程序会告诉你你的钱花在了哪里。 一个强大的会计系统不仅会告诉你这些,还会告诉你更多:它提供了你财务健康的完整画面,包括你的净资产、现金流和你的投资表现。 主要目标是 可观察性——获得对你财务生活的清晰、数据驱动的理解,使你能够做出明智的决策、评估风险并朝着退休等长期目标努力。
为什么使用复式记账?平衡系统的力量
与单式记账(简单的费用清单)不同,复式记账法将每笔交易记录为至少两个账户之间的价值流动。 它的核心原则是基本会计等式:
该系统确保你的账簿始终保持平衡,从而大大减少错误。 它通过生成重要的报表(如资产负债表(你拥有和欠款)和利润表(你赚取和花费的金额))来提供完整的财务状况。
第二部分:Beancount 入门
Beancount 是一个强大的、基于 Python 的纯文本会计工具。
在 Beancount.io 上使用 Fava 的初体验
Beancount.io 提供了一个强大的环境,将 Beancount 引擎与移动应用程序(iOS、Android)和 Web 应用程序 - Fava 相结合,Fava 是一个出色的基于 Web 的界面,用于可视化你的账本。 无需安装。 当你使用该平台时,你将直接与账本文件(例如,main.bean)的文本编辑器进行交互,并实时查看 Fava 生成的报告更新。
Fava 将你编写的纯文本转换为交互式图表、财务报表和可过滤的交易列表,让你清楚地了解你的财务报告。
五种核心账户类型
Beancount 使用五种顶级账户类型,它们构成了你的账本的结构:
| 账户类型 | 描述 | 典型余额 |
|---|---|---|
资产 | 你拥有的东西(现金、银行账户、投资、财产)。 | 正数 |
负债 | 你欠的东西(信用卡债务、贷款、抵押贷款)。 | 负数 |
收入 | 钱的来源(工资、奖金、利息)。 | 负数 |
支出 | 钱的去向(食物、租金、旅行、税收)。 | 正数 |
权益 | 你的净资产;用于初始余额。 | 负数 |
Beancount 等式
Beancount 强制执行其自身的会计等式版本,其中整个账本中所有过账的总和等于零:
这就是为什么按照惯例,收入、负债 和 权益 账户持有负值——它们是增加你的 资产 和 支出 的资金来源。
第三部分:Beancount 的语言 - 核心语法
Beancount 中的所有条目都是以日期开头的指令。
定义账户 (open) 和商品
在使用账户之前,必须使用 open 指令声明它。 你还可以选择指定它将持有的货币或“商品”。
; YYYY-MM-DD open Account:Name [Commodity1, Commodity2, ...]
2020-01-01 open Assets:Bank:US:Chase:Checking USD
2020-01-01 open Liabilities:CreditCard:US:Discover USD
2020-01-01 open Expenses:Food:Groceries
2020-01-01 open Income:Salary:Google
商品可以是真实世界的货币(例如,USD、JPY),也可以是你定义的任何自定义单位,例如航空公司里程(MILES_UA)或股票代码(HOOL)。
记录你的第一笔交易 (*)
交易是最常见的条目。 它们以日期、标志(* 表示完整交易,! 表示未完成交易)、可选的收款人和描述开头。 随后的每一行(缩进两个空格)都是对账户的“过账”。
; YYYY-MM-DD * "Payee" "Description"
; Account1 Amount Commodity
; Account2 -Amount Commodity
2024-07-28 * "Trader Joe's" "每周杂货"
Expenses:Food:Groceries 125.50 USD
Liabilities:CreditCard:US:Discover -125.50 USD
为方便起见,如果交易只有两个过账,则可以省略第二行的金额,Beancount 将自动计算。
2024-07-28 * "Trader Joe's" "每周杂货"
Expenses:Food:Groceries 125.50 USD
Liabilities:CreditCard:US:Discover
交易级别的平衡: 更重要的是,对于日常使用,每笔单独的交易也必须平衡——单个交易中所有过账的总和必须等于零。 如果交易不平衡,Beancount 将显示如下错误:

处理多币种交易 (@ 和 @@)
Beancount 擅长多币种会计。
- 使用
@指定每单位换算价格。 - 使用
@@指定换算的总成本。
; 用美元卡购买欧元机票
2024-08-01 * "Lufthansa" "飞往柏林的航班"
Expenses:Travel:Flights 500.00 EUR @@ 545.00 USD ; 500 欧元总共花费我 545 美元
Liabilities:CreditCard:US:Discover -545.00 USD