跳转到主要内容

在 Beancount 中为上市公司建模

使用 Open Ledger 约定,将上市公司的资产负债表和利润表转换为平衡的 Beancount 账本,附有百事公司一个季度的完整示例和入门模板。

将一份申报文件中的资产负债表和利润表转换为平衡的 Beancount 账本,使用与每个 Open Ledger 公司相同的约定。

本指南完整地走一遍百事公司一个季度的实际数据。这些数字与百事公司 2026 年第二季度财报一致。所有金额均以百万美元(MUSD)为单位。

你将获得什么

你最终会得到一个账本,它能验证期末资产负债表,并将利润表记录为一笔零和交易bea check 通过。利润表和资产负债表报告与申报文件中公布的总数一致。同样的模式驱动着 Open Ledger 上的每家公司以及 open-ledger 标签下的每篇文章。

选择单位和财政年度

operating_currency 设置为与申报文件一致的百万单位。对于以美元报告的公司,使用 MUSD。当申报文件以其他货币报告时,使用 MEURMJPY 或其他 M<CCY> 形式。

一个 MUSD 表示 1,000,000 美元。余额 25998 MUSD 意味着约 260 亿美元现金。

将每个财政期间放在年份目录下的单独文件中。年度文件命名为 FY2025/FY2025.bean。季度文件命名为 FY2026/FY2026Q2.bean。从 main.bean 中按从旧到新的顺序包含它们。

开设会计科目表

main.bean 包含选项、账户开设和包含语句。它不包含余额,也没有收入条目。

1970-01-01MUSD 开设每个账户。保持核心名称在各公司间一致,以便读者可以比较不同账本。

option "title" "PepsiCo, Inc. Financial Statements FY2021-FY2026Q2"
option "operating_currency" "MUSD"
 
; Currency convention:
;   MUSD = Millions of USD (custom unit for readability)
;   1 MUSD = USD 1,000,000
;   Example: "1000 MUSD" means USD 1,000,000,000
;   All figures sourced from PepsiCo, Inc. annual reports / filings.
;   Fiscal years end Dec 31 (52/53-week year; Dec 31 shown).
 
; ── ASSETS ──────────────────────────────────────────────────────────────────
1970-01-01 open Assets:Current:Cash                        MUSD
1970-01-01 open Assets:Current:ShortTermInvestments        MUSD
1970-01-01 open Assets:Current:AccountsReceivable          MUSD
1970-01-01 open Assets:Current:Other                       MUSD
1970-01-01 open Assets:NonCurrent:PropertyPlantEquipment   MUSD
1970-01-01 open Assets:NonCurrent:Goodwill                 MUSD
1970-01-01 open Assets:NonCurrent:IntangibleAssets         MUSD
1970-01-01 open Assets:NonCurrent:Other                    MUSD
 
; ── LIABILITIES ─────────────────────────────────────────────────────────────
1970-01-01 open Liabilities:Current:AccountsPayable        MUSD
1970-01-01 open Liabilities:Current:ShortTermDebt          MUSD
1970-01-01 open Liabilities:Current:DeferredRevenue        MUSD
1970-01-01 open Liabilities:Current:Other                  MUSD
1970-01-01 open Liabilities:NonCurrent:LongTermDebt        MUSD
1970-01-01 open Liabilities:NonCurrent:Other               MUSD
 
; ── EQUITY ──────────────────────────────────────────────────────────────────
1970-01-01 open Equity:OpeningBalance                      MUSD  ; FY2021 initialization
1970-01-01 open Equity:Adjustments                         MUSD  ; year-over-year BS differences
1970-01-01 open Equity:CommonStockAndAPIC                  MUSD
1970-01-01 open Equity:RetainedEarnings                    MUSD
1970-01-01 open Equity:OtherComprehensiveIncome            MUSD
 
; ── INCOME ──────────────────────────────────────────────────────────────────
1970-01-01 open Income:Revenue                             MUSD
1970-01-01 open Income:OtherNet                            MUSD  ; net other income (interest income, etc.)
 
; ── EXPENSES ────────────────────────────────────────────────────────────────
1970-01-01 open Expenses:CostOfRevenue                     MUSD
1970-01-01 open Expenses:ResearchAndDevelopment            MUSD
1970-01-01 open Expenses:SellingGeneralAdministrative      MUSD
1970-01-01 open Expenses:OtherNet                          MUSD
1970-01-01 open Expenses:IncomeTax                         MUSD
 
include "FY2026/FY2026Q2.bean"

Assets:Current:Other 和其他 …:Other 叶子账户吸收残差。建模的明细项目加上该残差始终与申报文件的小计对账

使用 pad 和 balance 验证资产负债表

在期末前一天从 Equity:Adjustments 进行 pad。在期末日期断言申报文件中的数值。为每个账户写一对 pad 和 balance。

资产保持正余额。负债和权益保持负余额。残差行保留一条注释,指明它们对账的申报文件小计。

2026-06-29 pad Assets:Current:Cash                        Equity:Adjustments
2026-06-30 balance Assets:Current:Cash                     25998 MUSD
 
2026-06-29 pad Assets:Current:ShortTermInvestments        Equity:Adjustments
2026-06-30 balance Assets:Current:ShortTermInvestments     15600 MUSD
 
2026-06-29 pad Assets:Current:AccountsReceivable          Equity:Adjustments
2026-06-30 balance Assets:Current:AccountsReceivable       10398 MUSD
 
2026-06-29 pad Assets:Current:Other                       Equity:Adjustments
2026-06-30 balance Assets:Current:Other                    15604 MUSD  ; current assets residual (67600 total current)
 
2026-06-29 pad Liabilities:Current:AccountsPayable        Equity:Adjustments
2026-06-30 balance Liabilities:Current:AccountsPayable     -8318 MUSD

以同样的方式覆盖整个报表:每个资产和负债账户,以及 Equity:CommonStockAndAPICEquity:RetainedEarningsEquity:OtherComprehensiveIncome。每个期间文件以横幅开头,注明公司名称、期间、单位和来源 URL。

将利润表记录为一笔交易

将交易日期设为财政期间结束日。收入过账为负数。费用过账为正数。Equity:Adjustments 吸收净利润,使条目总和为零。

在交易上方的注释中放置算术检查。在信任该条目之前,检查结果必须为零。

; Check: -23000 + 10350 + 400 + 8740 + 230 + 688 + 2592 = 0 ✓
 
2026-06-30 * "PepsiCo, Inc." "FY2026Q2 Income Statement"
  Income:Revenue                         -23000 MUSD
  Expenses:CostOfRevenue                   10350 MUSD
  Expenses:ResearchAndDevelopment          400 MUSD
  Expenses:SellingGeneralAdministrative    8740 MUSD
  Expenses:OtherNet                        230 MUSD
  Expenses:IncomeTax                       688 MUSD
  Equity:Adjustments                      2592 MUSD  ; net income offset

收入为 23,000 MUSD。净利润为 2,592 MUSD。当其他收入净额为正时,将其过账到 Income:OtherNet,而不是 Expenses:OtherNet。在一个期间内永远不要同时使用两者。

验证并阅读报告

对根账本运行检查:

bea --file main.bean check

一个干净的账本退出码为 0,且无输出。当你需要机器可读的有效性并要求 data.valid: true 时,推荐使用 bea --json --no-input --file main.bean check

阅读公司财政窗口的利润表,而不是碰巧共享相同标签的日历季度:

bea --json --no-input --file main.bean report income-statement --time '2026-04-01 - 2026-06-30'

Fava 中打开同一文件以浏览资产负债表和利润表。对照申报文件确认三件事:; Check: 注释总和为零,总资产等于总负债加权益,以及交易中的净利润等于申报文件中的净利润。

从模板开始

在发明新科目表之前,先复制这个形状。下面的实时模板是一家虚构的 Example Industries Inc. 的 FY2025 账本,以 MUSD 为单位。它使用相同的账户名称、pad 和 balance 模式,以及单笔利润表交易。

在新标签页中打开 Example Industries Inc. 上市公司模板

将此模式下载为 public-company-starter.bean,然后运行 bea --file public-company-starter.bean check。该文件与上述科目表、pad/balance 和利润表围栏匹配:现金最终为 25998 MUSD,应付账款为 -8318 MUSD,收入为 -23000 MUSD,所得税为 688 MUSD,以及 Equity:Adjustments 在 pad 和净利润抵消后为 -56690 MUSD。将百事公司的金额替换为你申报文件中的数字,并保留账户名称。

浏览 Open Ledger 上的所有真实公司。复制模板的结构,然后将虚构金额替换为你申报文件中的数字。

下一步

  • Open Ledger 上研究更多实时公司账本。
  • 阅读 open-ledger 标签下的盈利分析文章。
  • 当你需要家庭或自由职业者入门模板而不是 10-K 时,从 工作账本示例 复制个人财务模式。
  • 查看 财务报告模板,了解较小账簿中利润表和资产负债表报告的形状。

来源:https://beancount.io/zh/docs/model-a-public-company-in-beancount