跳转到主要内容

术语表

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

纯文本会计借用了复式记账的词汇,并添加了一些 Beancount 特有的词语。本术语表定义了你在阅读本文档或自己的账本文件时会遇到的术语,并在有帮助的地方附上简短示例。每个词条都有自己的链接,方便你直接指向某个定义给队友看。

账户

账户是一个命名的分类桶,用于追踪一种价值流,以冒号分隔的层次结构书写,位于五种根类型之一之下:AssetsLiabilitiesEquityIncomeExpenses。这个层次结构是你账簿的整个组织框架——Assets:US:BofA:CheckingExpenses:Food:Restaurant 会自动排序和汇总。每个账户在使用前必须先声明。命名规则参见 Beancount 语言语法

权责发生制

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

摊销

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

余额断言

余额断言是一个 balance 指令,用于声明账户在给定日期开始时必须具有的余额,这样你的银行对账单就变成对账簿的自动检查。如果计算出的余额与断言的容差相差超过该值,Beancount 会大声报错,并显示预期金额和实际金额。该容差是你写入的最后一位小数的单位——4.27 RGAGX 接受从 4.26 到 4.28 的任何值——在货币前加 ~ 可以设置你自己的容差。每个账户每份对账单添加一个断言是保持账本可信的最廉价方法。

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

Beancount

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

Beancount 查询语言

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

记账方法

记账方法是 Beancount 在减少头寸时必须从现有批次中选择扣减哪些批次时应用的规则。Beancount 3.2.3 接受七种名称:STRICT(默认,由你自行识别批次)、STRICT_WITH_SIZENONEFIFOLIFOHIFOAVERAGE。可以在账户的 open 指令上为每个账户设置一种,或通过 option "booking_method" 为整个文件设置。七种中有六种已实现:AVERAGE 可以解析,但在需要记账扣减时会抛出 AVERAGE method is not supported。你选择的方法会改变你的已实现资本利得,因此请选择你的税务管辖区期望的方法并保持稳定。库存管理 对同一批次运行所有七种方法,并发布了在 AVERAGE 下失败的账本。

会计科目表

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

关闭指令

close 指令标记一个账户在某个日期之后不能再被使用的日期,这是在不必删除历史记录的情况下注销银行账户或已还清贷款的方式。过去的交易仍然有效且可报告;只有新的分录会被拒绝。随着账本的老化,关闭不使用的账户可以保持报告的可读性。

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

商品

商品是你的账本追踪的任何价值单位——像 USD 这样的货币、像 AAPL 这样的股票代码、像 BTC 这样的加密资产,或像 VACATION-DAYS 这样你自己发明的单位。Beancount 永远不会在背后替你转换商品,因此金额始终是一个数字与其计价商品配对。可选的 commodity 指令允许你附加元数据,例如名称或资产类别。

成本基础

成本基础是你实际为某项持仓支付的价格,以你支付的货币记录,并在你持有期间随身携带。Beancount 用花括号书写——10 AAPL {150.00 USD} 表示以每股 150 美元购入的 10 股。双花括号会使该数字变成总价而非单价,因此 10 AAPL {{1,500.00 USD}} 记录同一批次。因为基础随持仓移动,资本利得在卖出时自然从算术中得出。参见 库存管理

指令

指令是 Beancount 文件中的一条指令,通常带日期,指令是构成账本的元素。有十二种指令带日期:openclosebalancepricenotedocumentpadeventcommoditycustomquery 以及交易本身。还有一些不带日期,作用于文件而非某一天——optionincludeplugin 以及 pushtag/poptag 对。Beancount 在处理之前会将带日期的指令按日期排序,因此你可以按最易读的顺序排列它们;不带日期的指令在其书写位置生效。

复式记账

复式记账是这样一种实践:将每项经济事件记录为至少两条匹配的条目,使它们的权重总和始终为零。资金永远不会被创造或毁灭——它只在账户之间移动,这就是为什么这种技术能捕获单列清单永远不会发现的错误。权重是一条分录自身的金额,或其成本或价格折算回一种货币后的值,因此两种不同商品的两条腿仍然可以抵消。Beancount 严格执行此规则:分录不平衡的交易是错误,而不是警告。

2026-03-02 * "Bank" "Buy euros"
  Assets:US:BofA:EUR       100.00 EUR @ 1.08 USD
  Assets:US:BofA:Checking -108.00 USD

信封预算法

信封预算法在你花钱之前就为某个用途预留资金,因此每个类别有自己的限额,而不是竞争一个合并的余额。这个名字来源于人们在发薪日用纸信封装现金的做法。在纯文本账本中,你可以用专用账户或预算指令来建模信封——参见 预算

Fava

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

库存

库存是账户当前持有的头寸集合,每个头寸有自己的商品,并且在相关情况下有自己的成本基础和取得日期。一个三次买入同一只股票的经纪账户在一个库存中持有三个单独的批次,而不是一个混合的数字。保持批次独立是进行准确收益计算的可能前提。

日记账

日记账是账簿中发生的一切的按时间顺序列表——交易的原始流,按日期排序,在任何分组或汇总之前。这是当你想要回答"我三月份实际做了什么?"时浏览的视图。Fava 的日记账页面通常是发现错误分类条目最快的地方。

分类账

分类账是一个实体的完整会计记录集,在 Beancount 中意味着你的纯文本文件(加上它包含的任何内容)。这个词既指整个账簿集合,也指文件本身的名称。因为它是文本,分类账可以像源代码一样被 diff、审查、分支和合并。

批次

批次是一次特定的商品取得,由其成本基础和取得日期标识。在一月份和六月份各买入一次同一 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

摘要

摘要是对交易用途的自由文本描述,写在交易行的第二个带引号字符串中。它是给人看的:"每月房租"、"杂货和日用品"。Beancount 不解析它,但当六个月后条目不再有意义时,它就是你要读的内容。

开启指令

open 指令声明一个账户、它开始可用的日期,以及可选地它可能持有的商品和它使用的记账方法。Beancount 要求每个账户在其第一条分录之前被开启,这可以防止打字错误悄悄创建一个全新账户。限制允许的商品可以将另一整类错误变成错误。

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

补平

pad 指令告诉 Beancount 插入使账户上下一次余额断言成功所需的任何金额,并将差额记入第二个账户。它存在的唯一目的是:在账簿中途开启时不必重建多年的历史。在初始设置之外使用补平通常意味着掩盖了一个真实错误。

收款方

收款方是你与之交易的人,写在交易行的第一个带引号字符串中。保持收款方一致——总是 "Whole Foods",而不是有时 "WholeFoods"——是使基于收款方的报告和自动化导入器工作的原因。Beancount 将收款方视为可选;交易可以只带摘要。

纯文本会计

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

插件

插件是 Beancount 在处理你的文件时加载的 Python 模块,允许它在构建报告之前添加、转换或验证指令。插件是在不更改核心语言的情况下实现预测、摊销计划和自定义检查的方式。你在账本顶部用独立的 plugin 行启用它,绝不能用 option——option "plugin" "…" 会被拒绝并报错 Option 'plugin' may not be set预测插件 指南演示了一个真实示例。

分录

分录是交易的一条腿:一个账户、一个金额,以及可选的一个成本或价格。需要在交易中总和为零的并不是原始金额,而是它们的权重:普通金额自身就是权重,10 FUND @ 38.46 USD 的权重是 384.60 USD,而 10 FUND {384.61 USD} 的权重是 3,846.10 USD,因为单花括号表示单价。最多只有一条分录可以留空其金额,在这种情况下 Beancount 会替你计算平衡数字。完整的权重规则参见 精度与容差

价格指令

price 指令记录两种商品在某一天的汇率,这是 Beancount 在报告中将会持仓转换为市值的方式。price 指令纯粹是参考数据:它不移动任何资金,也不属于任何交易。不要将其与分录中写的 @ 价格混淆,后者是算术——它使 10 FUND @ 38.46 USD 具有 384.60 USD 的权重,从而决定交易是否平衡。没有价格指令,投资组合在成本基础上仍然平衡,但无法按市值估值。

2026-06-30 price VTI   271.40 USD

对账

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

标签和链接

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

交易

交易是一个带日期的经济事件以及记录它的分录,这是你最常写的指令。它带有一个标志(* 表示已确认,! 表示需要审查)、一个可选的收款方、一个摘要,以及两条或更多权重总和为零的分录。Beancount 文件中的其他一切的存在都是为了声明、检查或注释交易。

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

还有不明白的词?帮助中心 索引了本站的所有指南,速查表 将每个指令的语法并排展示。

来源:https://beancount.io/zh/docs/glossary