跳转到主要内容

你应当掌握的 Beancount 原生插件

发布日期 最后更新 阅读需 5 分钟Mike ThriftMike Thrift
你应当掌握的 Beancount 原生插件
本页总览

最后更新于 2026-09-15。

Beancount 的强大之处不仅在于其纯文本格式,还在于通过插件实现的扩展性。原生插件是内置模块,可以增强 Beancount 的功能、自动化繁琐的任务,并强制执行会计最佳实践。在本全面指南中,我们将探讨 Beancount 中所有可用的原生插件以及如何有效使用它们。

有关这些插件所操作指令的语法,请参阅 Beancount 语法参考。有关将插件与导入器和 Fava 结合使用的真实社区工作流程,请参阅 社区展示。与插件交互的账本选项位于 选项配置 中。

什么是 Beancount 插件?

Beancount 插件是处理你的账本条目以增加自动化、验证或转换功能的 Python 模块。它们在你的账本文件的加载阶段运行,并且可以:

  • 自动化 重复性任务(例如,创建账户声明)
  • 验证 数据完整性(例如,检查重复交易)
  • 转换 条目(例如,从交易生成价格条目)
  • 强制执行 会计规则(例如,每个账户一种商品)

如何使用插件

要在 Beancount 文件中启用插件,请在账本顶部添加一个 plugin 指令:

plugin "beancount.plugins.auto_accounts"
plugin "beancount.plugins.implicit_prices"

某些插件接受配置选项:

; @m49-fragment dateless
plugin "beancount.plugins.check_commodity" "{'Assets:Trading': '.*'}"

原生插件类别

Beancount 的原生插件分为四个主要类别:

1. 自动化插件

2. 验证插件

3. 转换插件

4. 元插件


1. 自动化插件

这些插件自动化重复性的簿记任务,为你节省时间并减少手动错误。

auto_accounts - 自动账户声明

功能: 自动为交易中出现但未显式声明的账户插入 Open 指令。

为什么要用: 消除了在使用前手动声明每个账户的必要。非常适合快速入门或喜欢尽量少样板代码的用户。

示例:

plugin "beancount.plugins.auto_accounts"
 
2026-01-01 * "Coffee shop"
  Expenses:Food:Coffee        4.50 USD
  Assets:Cash                -4.50 USD

没有此插件,你需要手动添加:

2025-12-01 open Expenses:Food:Coffee
2025-12-01 open Assets:Cash

何时使用: 最适合初学者或希望账本不那么冗长的用户。但是,显式账户声明有助于发现拼写错误。


close_tree - 自动关闭账户层级

功能: 当你关闭一个父账户时,此插件会自动关闭其所有子账户。

为什么要用: 保持账户层级的一致性。如果你关闭 Assets:Investments,所有子账户,如 Assets:Investments:StocksAssets:Investments:Bonds 将自动关闭。

示例:

plugin "beancount.plugins.close_tree"
 
2025-06-30 close Assets:Investments
 
; These will be automatically closed:
; Assets:Investments:Stocks
; Assets:Investments:Bonds
; Assets:Investments:RealEstate

何时使用: 在重组账户层级或关闭整个类别的账户时。


implicit_prices - 自动生成价格条目

功能: 从包含成本(@)或总价(@@)的交易分录中合成 Price 指令。

为什么要用: 自动从你的交易中填充价格数据库,无需手动输入价格即可实现准确的市场价值报告。

示例:

plugin "beancount.plugins.implicit_prices"
 
2026-01-02 * "Buy AAPL shares"
  Assets:Investments:Stocks    10 AAPL @ 150.00 USD
  Assets:Cash                 -1500.00 USD

这将自动生成:

2026-01-02 price AAPL  150.00 USD

何时使用: 对于投资跟踪和多币种会计来说至关重要,特别是当你想自动生成价格历史时。


2. 验证插件

这些插件强制执行数据完整性和会计最佳实践,在错误变成问题之前捕获它们。

noduplicates - 重复交易检测

功能: 通过计算并比较交易数据的哈希值来检查没有两笔交易完全相同。

为什么要用: 防止意外重复条目,尤其是在从多个来源导入交易时。

示例:

; @m49-fragment expected-failure
plugin "beancount.plugins.noduplicates"
 
2026-01-02 * "Rent payment"
  Expenses:Rent              1200.00 USD
  Assets:Checking           -1200.00 USD
 
; This would trigger an error:
2026-01-02 * "Rent payment"
  Expenses:Rent              1200.00 USD
  Assets:Checking           -1200.00 USD

何时使用: 始终推荐使用,特别是在从银行对账单导入或使用多个数据源时。


check_commodity - 商品声明验证

功能: 确保你的账本中使用的所有商品都有相应的 Commodity 指令。

为什么要用: 强制执行显式商品声明,帮助你维护清晰的资产和货币列表。

示例:

; @m49-fragment expected-failure
plugin "beancount.plugins.check_commodity"
 
2015-01-01 commodity USD
2020-01-01 commodity AAPL
 
; This would trigger an error without a commodity declaration:
2026-01-02 * "Buy Bitcoin"
  Assets:Crypto              0.5 BTC @ 45000 USD
  Assets:Cash             -22500.00 USD

何时使用: 建议用于维护严格的商品跟踪并防止股票代码中打错字。


check_average_cost - 成本基础验证

功能: 验证成本基础在交易中是否正确保留,特别是在使用平均成本记账法时。

为什么要用: 确保你的成本会计在税务报告和资本利得计算中保持准确。

何时使用: 对于投资组合以及任何需要准确成本跟踪的场景都至关重要。


check_closing - 平仓余额验证

功能:closing 元数据扩展为余额检查,确保平仓交易后仓位为零。

为什么要用: 确认当你卖出全部仓位时,余额确实为零(没有剩余的零碎股)。

示例:

plugin "beancount.plugins.check_closing"
 
2026-01-02 * "Close entire AAPL position" #closing
  Assets:Investments:Stocks   -100 AAPL {150.00 USD}
  Assets:Cash                15500.00 USD
  Income:Investments:Gains    -500.00 USD

#closing 标签告诉插件验证这笔交易后,你的 AAPL 仓位是否为零。

何时使用: 当卖出全部仓位以确保没有遗留时。


coherent_cost - 货币/成本一致性检查

功能: 验证货币是否会不一致地使用——同时有或没有成本注解。

为什么要用: 防止混淆裸货币(如 100 USD)和带成本货币(如 100 USD {1.2 CAD}),这可能导致会计错误。

何时使用: 建议多币种账本使用,以保持一致性。


leafonly - 叶账户强制执行

功能: 确保只有叶账户(没有子账户的账户)可以接收分录。

为什么要用: 强制执行清晰的账户层级,即像 Expenses:Food 这样的汇总账户没有直接分录,只有它们的子账户如 Expenses:Food:GroceriesExpenses:Food:Restaurants 才能有。

示例:

; @m49-fragment expected-failure
plugin "beancount.plugins.leafonly"
 
; This would trigger an error:
2026-01-02 * "Grocery shopping"
  Expenses:Food              50.00 USD  ; Error: Should post to a leaf account
  Assets:Cash               -50.00 USD
 
; Correct way:
2026-01-02 * "Grocery shopping"
  Expenses:Food:Groceries    50.00 USD  ; Correct: Posting to leaf account
  Assets:Cash               -50.00 USD

何时使用: 当你希望保持严格的层级会计和清晰的分类时。


nounused - 未使用账户检测

功能: 识别被打开但从未在交易中使用过的账户。

为什么要用: 帮助你清理账户声明,发现潜在的打字错误或废弃账户。

何时使用: 定期使用,以审计和清理你的账户结构。


onecommodity - 每账户单一商品

功能: 强制执行每个账户只能持有一种商品。

为什么要用: 防止在同一账户中混合不同资产,这通常是会计最佳实践。

示例:

; @m49-fragment expected-failure
plugin "beancount.plugins.onecommodity"
 
2026-01-02 * "Buy stocks"
  Assets:Investments         10 AAPL @ 150 USD
  Assets:Cash             -1500.00 USD
 
; This would trigger an error:
2026-01-03 * "Buy more stocks"
  Assets:Investments         5 GOOGL @ 140 USD  ; Error: Different commodity
  Assets:Cash              -700.00 USD

何时使用: 当你倾向于严格的账户分离时(一股/资产一个账户)。


sellgains - 资本利得验证

功能: 交叉检查申报的资本利得与集中销售(Lot Sales)计算出的收益,确保你的盈亏计算准确无误。

为什么要用: 捕获手动资本利得计算中的错误,这对于准确的税务报告至关重要。

示例:

plugin "beancount.plugins.sellgains"
 
2026-01-02 * "Sell AAPL shares"
  Assets:Investments:Stocks   -10 AAPL {140.00 USD}
  Assets:Cash                1500.00 USD
  Income:Investments:Gains   -100.00 USD  ; Plugin validates this is correct

插件将验证:销售收入 (1500) - 成本基础 (1400) = 收益 (100)

何时使用: 对于任何交易股票、加密货币或其他涉及资本利得的资产的人来说必不可少。


unique_prices - 价格唯一性检查

功能: 确保每个商品每个日期只能有一个价格条目。

为什么要用: 防止可能导致错误估值的冲突价格数据。

何时使用: 建议在手动输入价格或从多个价格源导入时使用。


check_drained - 账户清算验证

功能: 标记在转账或平仓后你认为应为空的账户中仍持有的余额(包括未计价货币或剩余批次)。

为什么要用: 捕获 balance 断言和 #closing 标签可能遗漏的剩余余额——特别是在多商品转账后非常有用。

状态(检查于 2026-09-15): 在当前 PyPI 版本线(3.2.3)上的 beancount/plugins/check_drained.py 中,存在于 Beancount 3.x 代码树中。

何时使用: 在大型投资组合重组或关闭经纪账户后。


3. 转换插件

这些插件以有用的方式修改或增强你的账本数据。

currency_accounts - 货币交易账户

功能: 实现显式跟踪外汇转换的货币交易账户。

为什么要用: 提供货币兑换交易的详细跟踪,适用于需要此报告的会计准则。

何时使用: 当你需要单独跟踪外汇收益/损失或满足特定会计要求时。


commodity_attr - 商品属性验证

功能: 验证商品指令是否具有必需的属性(如 exportname 等)。

为什么要用: 确保你的商品元数据完整且一致。

何时使用: 当你为报告或出口目的维护详细的商品元数据时。


4. 元插件

这些插件是为了方便而将其他插件集合在一起。

auto - 所有自动插件

功能: 通过一个指令启用一组“宽松”或自动插件。

何时使用: 适合希望以最少配置获得最大自动化的用户快速设置。


pedantic - 所有验证插件

功能: 一次启用所有严格验证插件。

为什么要用: 强制执行最大的数据完整性和会计严谨性。非常适合生产环境账本或准确性至关重要的场景。

示例:

plugin "beancount.plugins.pedantic"
 
; This is equivalent to enabling:
; - check_commodity
; - check_average_cost
; - coherent_cost
; - leafonly
; - noduplicates
; - nounused
; - onecommodity
; - sellgains
; - unique_prices

何时使用: 对于生产账本,当你希望获得最大验证并愿意保持更严格的会计实践时。


推荐的插件配置

对于初学者

plugin "beancount.plugins.auto_accounts"
plugin "beancount.plugins.noduplicates"
plugin "beancount.plugins.implicit_prices"

这个最小的设置提供了自动化,同时防止常见错误。

对于投资者

plugin "beancount.plugins.auto_accounts"
plugin "beancount.plugins.implicit_prices"
plugin "beancount.plugins.sellgains"
plugin "beancount.plugins.check_average_cost"
plugin "beancount.plugins.unique_prices"

专注于投资跟踪和资本利得准确性。

对于严格会计

plugin "beancount.plugins.pedantic"
plugin "beancount.plugins.sellgains"
plugin "beancount.plugins.check_closing"

生产环境的最大验证。

Beancount.io 的默认配置

Beancount.io,我们在所有新账本文件中默认包含 auto_accounts 插件:

plugin "beancount.plugins.auto_accounts"

这在易用性和功能之间提供了很好的平衡,以便快速上手。


插件状态检查于 2026-09-15

对照 Beancount 3.2.3(PyPI,2026-09-15)上的实时 beancount/plugins 树:

插件模块仍然存在说明
auto_accountsclose_treeimplicit_prices自动化集未变
noduplicatescheck_commoditycheck_average_costcheck_closingcoherent_costleafonlynounusedonecommoditysellgainsunique_prices验证集未变
currency_accountscommodity_attr转换集未变
autopedantic元插件未变
check_drained如上所述;在旧指南中容易遗漏

本指南的原始草案和上述日期之间,原生集合中没有移除此处未列出的内容。社区(非原生)插件仍然属于 Awesome Beancount 插件列表社区展示——将第三方仓库视为独立版本,在启用生产账本之前检查每个仓库的最后发布。


最佳实践

  1. 从最小集开始,根据需要添加:auto_accountsnoduplicates 开始,随着账本成熟再添加验证插件。

  2. 单独测试插件: 添加多个插件时,一次启用一个以了解其效果。

  3. 仔细阅读错误消息: 插件错误通常指向需要修复的真实会计问题。

  4. 生产环境使用 pedantic 一旦你的工作流程建立,考虑启用严格验证。

  5. 结合自定义插件: 原生插件与自定义插件(如 forecast 插件)配合使用,以实现最大的功能。


超越原生插件

虽然原生插件提供了核心功能,但 Beancount 生态系统包含许多社区开发的插件,满足专业需求:

  • fava.plugins.forecast - 用于重复交易预测
  • fava.plugins.link_documents - 用于将交易链接到收据文件
  • 用于特定银行 CSV 格式的自定义导入器
  • 税务特定的计算器和报告

探索 Beancount 生态系统 获取更多选项,以及 社区展示 了解人们如何将原生插件与导入器和 Fava 组合使用。


结论

Beancount 的原生插件将纯文本会计从手动过程转变为自动化、验证和稳健的财务管理系统。通过理解和利用这些内置工具,你可以:

  • ✅ 自动化繁琐的簿记任务
  • ✅ 在错误变成问题之前捕获它们
  • ✅ 保持严格的数据完整性
  • ✅ 生成准确的财务报告
  • ✅ 专注于财务洞察,而不是数据录入

今天就开始在你的账本中尝试这些插件。从 auto_accountsimplicit_prices 开始,然后随着你的会计实践成熟逐步添加验证插件。

准备好尝试这些插件了吗? 前往 Beancount.io,立即在你的账本文件中使用它们!


来源


对 Beancount 插件有疑问?在我们的 社区论坛 加入讨论,或查看我们的 文档

探索一个实时加密货币示例账本:

在新标签页中打开 加密货币示例账本

分享这篇文章

来源:https://beancount.io/zh/blog/2026/01/02/beancount-plugin-you-should-know

发布日期: 2026年1月2日

最后更新: 2026年9月15日