跳转到主要内容
术语表

术语表

关于你账本中会遇到的纯文本会计和 Beancount 术语的通俗定义 —— 涵盖账户、指令、分录、成本基础、记账方法、余额断言等。

纯文本会计借用了复式记账的词汇,并补充了一些 Beancount 特有的术语。本术语表定义了你在阅读本文档或你自己的账本文件时会遇到的术语,每个术语都附有简短的示例(如适用)。每个词条都有对应的链接,你可以方便地指向特定定义分享给团队成员。

账户 (Account)

账户是一个命名的分类桶,用于追踪某一种价值流,采用冒号分隔的层级结构书写,必须属于以下五种根类型之一:Assets(资产)、Liabilities(负债)、Equity(权益)、Income(收入)或 Expenses(费用)。层级结构是你账簿的整体组织架构——例如 Assets:US:BofA:CheckingExpenses:Food:Restaurant 会自动进行分类和汇总。每个账户在使用前都必须先进行声明。命名规则请参见 Beancount 语言语法

权责发生制 (Accrual basis)

权责发生制会计在收入赚取时和费用发生时进行记录,无论现金实际何时流动。收付实现制则相反:仅在资金实际易手时才确认收入和费用。权责发生制能更真实地反映一个时期的经营业绩,这就是为什么你在三月发出的发票属于三月份,即使客户在五月才付款。

摊销 (Amortization)

摊销将一笔大额付款分摊到其实际覆盖的各个期间,因此每个月承担其应占的成本份额。一月份支付的一年期保险费是全部十二个月的费用,而不仅仅是一月份的费用。在 Beancount 中,你可以手动编写分摊分录,或使用插件自动生成——参见 摊销

余额断言 (Balance assertion)

余额断言是一种 balance 指令,用于声明某个账户在特定日期开始时必须拥有的余额,这样你的银行对账单就变成了对你账簿的自动检查。如果计算出的余额不同,Beancount 会报错并显示预期金额和实际金额。在每个对账单期间为每个账户添加一个余额断言,是保持账本可信度最简单有效的方法。

2026-01-01 balance Assets:US:BofA:Checking   4,321.00 USD

Beancount

Beancount 是一个开源复式记账系统,其账本是一个纯文本文件,你可以在任何文本编辑器中编辑,并通过命令行工具进行验证。它提供了严格的、可解析的语法、查询语言和网页界面,无需数据库或专有文件格式。由于账本是文本文件,它可以和你的代码一起愉快地存放在 Git 中。从 Beancount 简介开始。

Beancount 查询语言 (Beancount Query Language)

Beancount 查询语言,通常缩写为 BQL,是一种类似 SQL 的语言,用于向你的账本提问。它在解析后的指令上运行,而非在数据库上运行,因此 SELECT account, sum(position) WHERE year = 2026 可以立即从你编辑的同一个文件中得到答案。完整的语法请阅读 查询语言指南

记账方法 (Booking method)

记账方法是当一笔减少交易需要选择从哪些现有批 (lot) 中扣除时,Beancount 应用的规则。可选值有 STRICT(你必须自己指定批)、FIFO(先进先出)、LIFO(后进先出)、AVERAGE(平均成本)和 NONE(无),通过账户的 open 指令为每个账户设置。你选择的方法会改变你已实现的资本利得,因此请选择你的税务管辖区所要求的方法并保持稳定。

会计科目表 (Chart of accounts)

会计科目表是你的账本使用的所有账户的完整列表,以及组织它们的结构。在 Beancount 中,没有单独的科目表文件——open 指令的集合 就是 你的会计科目表。及早设计好它可以避免日后大量的重命名工作;请参阅 行业特定设置 寻找起点。

关闭指令 (Close directive)

close 指令标记一个账户在其后不可再使用的日期,这是你注销一个银行账户或已还清贷款而不删除其历史记录的方法。过去的交易仍然有效并可查询;只有新的分录会被拒绝。随着账本时间的增长,关闭不用的账户可以使报告保持可读性。

2026-03-31 close Assets:US:OldBank:Checking

商品/资产 (Commodity)

商品是你的账本追踪的任何价值单位——可以是像 USD 这样的货币、像 AAPL 这样的股票代码、像 BTC 这样的加密资产,或者你自创的诸如 VACATION-DAYS 之类的东西。Beancount 绝不会在你不知情的情况下进行不同商品之间的转换,因此一个金额总是由数字和其计价商品成对出现。可选的 commodity 指令允许你附加元数据,例如名称或资产类别。

成本基础 (Cost basis)

成本基础是你实际为一项持仓支付的价格,以你支付时使用的货币记录,并在你持有该持仓期间与之共存。Beancount 用大括号表示——10 AAPL {150.00 USD} 表示以每股 150 美元的价格买入了十股。因为基础随头寸一起变动,所以当你卖出时,资本利得可以直接从计算中得出。参见 库存管理

指令 (Directive)

指令是 Beancount 文件中一条带有日期的命令,而账本完全由指令构成。任何以日期开头的行都是一个指令:open(开户)、close(关户)、balance(余额)、price(价格)、note(备注)、document(文档)、pad(填充)、event(事件)、commodity(商品),以及交易本身。Beancount 在处理前会先按日期对指令排序,因此你可以根据可读性以任何顺序排列它们。

复式记账 (Double-entry bookkeeping)

复式记账是一种会计方法,它将每一个经济事件记录为至少两条相匹配的账目,使得金额总和始终为零。资金不会凭空产生或消失——它只在账户间流动,这就是为什么这种技术能捕捉到单式记账法永远无法发现的错误。Beancount 严格执行此规则:一个交易中如果其分录不平,则被视为错误而非警告。

信封预算法 (Envelope budgeting)

信封预算法在花钱之前就将资金拨给特定用途,这样每个类别都有自己的限额,而不是竞争一个汇总的余额。这个名称来源于人们在发薪日用现金填满纸质信封的做法。在纯文本账本中,你可以使用专用账户或预算指令来模拟信封——参见 预算

Fava

Fava 是 Beancount 的网页界面:提供图表、资产负债表、损益表、查询编辑器和录入表单,都从你的账本文件提供服务。它主要是用于查看的,并在本地运行,因此它改变了你 查看 账簿的方式,而不改变你记录它们的方式。beancount.io 提供了一个与其自有工具集成的托管版本;界面功能 指南涵盖了你可以在那里做些什么。

库存/持仓集合 (Inventory)

库存是一个账户当前持有的所有头寸的集合,每个头寸都有其自己的商品,并且在相关的情况下,还有其自己的成本基础和获取日期。一个三次买入同一支股票的经纪账户,在其库存中会持有三个独立的批,而非一个混合的数字。保持批的独立性是进行精确收益计算的必要条件。

日记账 (Journal)

日记账是你账簿中发生所有事件的按时间顺序排列的列表——按日期排序的交易原始流,未经任何分组或汇总。当你想回答“我三月份到底做了什么?”时,你会查看这个视图。Fava 的日记账页面通常是发现分类错误条目最快的地方。

账本 (Ledger)

账本是一个实体的完整会计记录集合,在 Beancount 中,这指你的纯文本文件(以及它包含的任何其他文件)。这个词既指整个账簿,也指文件本身。因为它是文本文件,所以账本可以像源代码一样进行差异比较、审查、分支和合并。

批 (Lot)

一个批是获取某一商品的一次特定交易,由其成本基础和获取日期标识。在一月份和六月份买入同一支 ETF 会创建两个批,稍后卖出时,你需要选择出售哪个批。批是 Beancount 能够精确计算已实现收益而非近似计算的原因。

2026-06-15 * "Broker" "Buy VTI"
  Assets:US:Broker:VTI     5 VTI {260.00 USD, 2026-06-15}
  Assets:US:Broker:Cash            -1,300.00 USD

说明/叙述 (Narration)

说明是交易目的的自由文本描述,写在交易行的第二个引号字符串中。它是给人类看的:“月租”、“杂货与日用品”。Beancount 不会解析它,但当六个月后条目含义不再清晰时,你会阅读它。

开户指令 (Open directive)

open 指令声明一个账户、其开始可用的日期,并可选择声明该账户可持有的商品及其使用的记账方法。Beancount 要求每个账户在首次分录之前必须被开启,这可以防止因拼写错误而静默创建一个全新账户。限制允许的商品可以将另一整类错误转变为错误。

2026-01-01 open Assets:US:Broker:VTI   VTI   "FIFO"

填充指令 (Pad)

pad 指令告诉 Beancount 插入必要的金额,以使账户的下一个余额断言成功,并将差额记入第二个账户。它存在的目的是:在生命周期的中途开启账本,而无需重构多年的历史。在初始设置之外使用填充通常意味着掩盖了一个真正的错误。

收款方/付款方 (Payee)

收款方/付款方是你与之交易的对象,写在交易行的第一个引号字符串中。保持收款方/付款方名称一致——始终用 "Whole Foods",而不要时而用 "WholeFoods"——这是使基于收款方/付款方的报告和自动导入器正常工作的关键。Beancount 将收款方/付款方视为可选;一个交易可以只有说明。

纯文本会计 (Plain-text accounting)

纯文本会计是指将你的账簿保存在一个人类可读、受版本控制的文本文件中,并由开源命令行工具进行处理。它用持久性、可审计性和自动化换取了点击式界面的便利:你的数据比任何供应商都长寿,每个更改都是可审查的差异,任何脚本都可以读取它。Beancount、Ledger 和 hledger 是三个最著名的实现。

插件 (Plugin)

插件是 Beancount 在处理你的文件时加载的 Python 模块,使其能够在生成报告之前添加、转换或验证指令。插件使预测、摊销计划表和自定义检查等功能得以实现,而无需改变核心语言。通过在账本顶部添加一行 plugin 来启用它——预测插件 指南通过一个真实示例进行了讲解。

分录 (Posting)

分录是交易的一个单边:包含一个账户、一个金额,以及可选的成本或价格。一笔交易至少需要两个分录,它们的金额之和必须为零。最多一个分录可以留空其金额,在这种情况下,Beancount 会为你计算出平衡数。

价格指令 (Price directive)

price 指令记录两个商品在某个日期的汇率,这是 Beancount 在报告中将其项持仓转换为其市场价值的方式。价格纯粹是参考数据——它们永远不会移动资金,也永远不会出现在交易中。没有它们,投资组合按成本是平衡的,但无法按市场价值进行估值。

2026-06-30 price VTI   271.40 USD

对账 (Reconciliation)

对账是证明你的账簿与外部记录(如银行或经纪行对账单)一致的行为。在纯文本会计中,这基本上是机械性的:为每个对账单日期添加一个余额断言,然后让工具告诉你数字是否匹配。每个月都能干净地对账的账本,是一个你可以放心用来报税的账本。

标签和链接是附加到交易上以在账户层级之外进行分组的两种标记:使用 # 的标签标记一个主题,如 #trip-japan;使用 ^ 的链接将相关条目联系起来,如 ^invoice-2026-014。标签回答“显示此类别中的所有内容”;链接回答“显示属于此事件的所有条目”。两者都可以在 Fava 中筛选,也可以在 BQL 中查询——参见 筛选与搜索

交易 (Transaction)

交易是一个带日期的经济事件及其记录它的分录,是你最常编写的指令。它带有一个标志(* 表示已确认,! 表示需复查)、可选的收款方/付款方、说明,以及两个或多个金额总和为零的分录。Beancount 文件中的其他所有内容都是为了声明、检查或注释交易而存在的。

2026-02-14 * "Blue Bottle" "Coffee with Dana"
  Expenses:Food:Coffee      9.50 USD
  Assets:US:BofA:Checking  -9.50 USD

还是被某个词卡住了?帮助中心 整理了本站所有指南的索引,而 速查表 则将每个指令的语法并列展示。