跳到主要内容

初创公司的 Beancount 设置

一个实用的、可复制粘贴的基线,用于以纯文本格式运行初创公司的账簿。 适用于种子轮前到 A 轮。 这不是法律或税务建议。


beancount-setup-for-startups

经营一家初创公司意味着身兼数职,其中最关键的之一就是“簿记员”。 在您能够负担昂贵的软件或全职会计师之前,您需要一个准确、可审计且不会将您锁定在专有生态系统中的系统。 进入 Beancount:一个开源的纯文本会计系统。

使用 Beancount 意味着您的财务账簿以文本文件形式存在,与您的代码一起位于 Git 存储库中。 它是版本控制的、透明的且可以无限定制的。 本指南提供了一个完整的、可复制粘贴的设置,让您的初创公司从公司成立到 A 轮融资期间的账簿都能运行,并建立在健全的权责发生制会计原则之上。

1) 您将设置的内容

本指南将引导您创建一个完整的、专业级的会计设置。 完成后,您将拥有:

  • 一个在 Git 中管理的单一数据源账簿 (main.beancount),为您提供公司财务的完整、可审计的历史记录。
  • 用于生成美观的报告和图表的 Fava。 Fava 是 Beancount 的一个 Web 界面,可将您的文本文件转换为交互式的利润表、资产负债表和现金流量分析。
  • 一个导入程序结构,您可以在以后添加该结构,以自动从您的银行、信用卡、PayPal 和 Stripe 账户录入交易。 我们将手动开始学习该系统,然后再进行自动化。
  • 一个为现代初创公司设计的、可用于权责发生制的科目表,内置了对递延收入、预付费用和工资负债的支持。
  • 种子融资的原始要素,包括用于记录 SAFE(作为负债或权益)和附带利息的可转换票据的清晰示例。

2) 项目结构(放入您的代码库中)

首先在您公司的 Git 存储库中创建此目录结构。 这种组织方式可确保您的账簿整洁且可扩展。

/ledger
main.beancount
/includes
accounts.beancount
opening-balances.beancount
policies.beancount
/documents
/bank
/invoices
/receipts
/importers # 可选; 在您自动执行 CSV 提取时添加
bank_importer.py
card_importer.py
  • main.beancount:将所有内容整合在一起的中心文件。
  • /includes:保存您的科目表、期初余额和会计政策。
  • /documents:用于存储银行对账单、发票和收据的 PDF 文件的位置,以便形成清晰的审计跟踪。
  • /importers:您未来用于解析银行 CSV 文件的 Python 脚本将驻留在此处。

3) 最小的、合理的 main.beancount

这是您账簿的入口点。 它设置了一些全局选项并包含了其他组件文件。 将此内容复制到 ledger/main.beancount 并自定义标题。

option "title" "Acme, Inc. Ledger"
option "operating_currency" "USD"
option "documents" "ledger/documents"

include "includes/accounts.beancount"
include "includes/opening-balances.beancount"
include "includes/policies.beancount"

; 如果您稍后添加导入程序,您将在此处添加插件行。
; plugin "beancount.plugins.implicit_prices"

4) 启动器科目表(权责发生制优先)

您的科目表是您公司财务交易的完整类别列表。 此启动器模板是为权责发生制会计构建的,与现金会计相比,它可以更准确地了解您公司的健康状况。

将其放入 includes/accounts.beancount 中。 如果您不需要任何账户,请随时删除。

; --- 资产 ---
1970-01-01 open Assets:Bank:Checking USD
1970-01-01 open Assets:Bank:Savings USD
1970-01-01 open Assets:AR USD ; 应收账款
1970-01-01 open Assets:Prepaid:Software USD
1970-01-01 open Assets:Prepaid:Insurance USD
1970-01-01 open Assets:Deposits USD ; 保证金
1970-01-01 open Assets:Equipment USD
1970-01-01 open Assets:Intangibles USD
1970-01-01 open Assets:Crypto:BTC BTC
1970-01-01 open Assets:Other

; --- 负债 ---
1970-01-01 open Liabilities:AP USD ; 应付账款
1970-01-01 open Liabilities:CreditCard:Corporate USD
1970-01-01 open Liabilities:DeferredRevenue USD
1970-01-01 open Liabilities:Payroll:Withholding USD
1970-01-01 open Liabilities:Payroll:EmployerTaxes USD
1970-01-01 open Liabilities:SalesTax:CA USD
1970-01-01 open Liabilities:SAFE USD
1970-01-01 open Liabilities:NotesPayable USD
1970-01-01 open Liabilities:Other

; --- 权益 ---
1970-01-01 open Equity:CommonStock USD
1970-01-01 open Equity:APIC USD ; 额外实缴资本
1970-01-01 open Equity:SAFE USD ; 如果您将 SAFE 分类为权益
1970-01-01 open Equity:RetainedEarnings USD
1970-01-01 open Equity:OpeningBalances USD

; --- 收入(负余额)---
1970-01-01 open Income:Revenue:SaaS USD
1970-01-01 open Income:Revenue:Services USD
1970-01-01 open Income:Other USD

; --- 费用 ---
1970-01-01 open Expenses:COGS USD
1970-01-01 open Expenses:Payroll:Wages USD
1970-01-01 open Expenses:Payroll:EmployerTaxes USD
1970-01-01 open Expenses:Benefits USD
1970-01-01 open Expenses:Contractors USD
1970-01-01 open Expenses:Software:Subscriptions USD
1970-01-01 open Expenses:Cloud USD
1970-01-01 open Expenses:Rent USD
1970-01-01 open Expenses:Meals USD
1970-01-01 open Expenses:Travel USD
1970-01-01 open Expenses:Marketing USD
1970-01-01 open Expenses:Legal USD
1970-01-01 open Expenses:Accounting USD
1970-01-01 open Expenses:Insurance USD
1970-01-01 open Expenses:BankFees USD
1970-01-01 open Expenses:Taxes:Income USD
1970-01-01 open Expenses:Taxes:Sales USD
1970-01-01 open Expenses:Other USD

注意

  • 收入账户为负数,因为它们代表复式记账中的贷方。 不用担心,Fava 会自动在报告中翻转符号,因此您的收入将在利润表中显示为正数。
  • 一开始就保持狭窄、有目的性的类别。 添加新帐户比清理杂乱、过于精细的科目表要容易得多。

5) 期初余额(第一天)

您账簿中的第一笔交易奠定了基础。 它记录了您开始跟踪时帐户的初始状态。 将此交易放入 includes/opening-balances.beancount 中,调整日期和金额以反映您的实际起始位置。

2025-01-01 * "Opening balances"
Assets:Bank:Checking 5,000.00 USD
Liabilities:CreditCard:Corporate -500.00 USD
Equity:OpeningBalances -4,500.00 USD

此条目表明,公司成立之初在银行拥有 $5,000,信用卡余额为 $500Equity:OpeningBalances 账户是一个特殊账户,用于确保交易余额为零,这是复式记账的要求。


6) 常见的初创公司交易(复制粘贴)

以下是早期初创公司中最常见的财务事件的示例。 复制、粘贴并根据您自己的用途进行调整。

创始人股票购买(简单,仅限货币)

当创始人以票面价值购买其初始股份时,现金将流入公司并记录为权益。 您的股权结构表(Carta、Pulley 或电子表格)是股份数量的真实来源; 账簿只记录美元。

2025-01-05 * "Founder stock purchase @ par"
Assets:Bank:Checking 800.00 USD
Equity:CommonStock -0.80 USD
Equity:APIC -799.20 USD
; 8,000,000 common @ $0.0001 — counts maintained off-ledger

(可选) 将您自己的股份作为商品进行跟踪

如果您希望账簿跟踪已发行的股份数量,您可以将您的股票定义为“商品”。 这样做更复杂,但可以提供更完整的账簿内记录。

2025-01-05 commodity ACME
name: "Acme, Inc. Common"

2025-01-05 * "Founder share issuance"
Assets:Bank:Checking 800.00 USD
Equity:APIC -799.20 USD
Equity:CommonStock -8,000,000 ACME {0.0001 USD}

SAFE 现金流入(选择分类)

SAFE(未来股权的简单协议)可以被视为负债或一种权益(特别是“夹层权益”)。 请咨询您的会计师以选择正确的方法并保持一致。

; (A) 权益分类(夹层)
2025-02-01 * "Post-money SAFE — SeedFund"
Assets:Bank:Checking 500,000.00 USD
Equity:SAFE -500,000.00 USD

; (B) 负债分类(直到转换)
2025-02-01 * "Post-money SAFE — SeedFund"
Assets:Bank:Checking 500,000.00 USD
Liabilities:SAFE -500,000.00 USD

当定价轮次结束时,您将根据结算文件将 SAFE 余额重新分类为优先股和额外实缴资本。

附带应计利息的可转换票据

与 SAFE 不同,可转换票据明确地是一种产生利息的负债。 您将记录初始现金,然后定期(例如,每季度)记录利息费用。

2025-03-01 * "Convertible Note — 6% annual"
Assets:Bank:Checking 250,000.00 USD
Liabilities:NotesPayable -250,000.00 USD

2025-06-30 * "Accrue note interest Q2"
Expenses:Interest 3,750.00 USD
Liabilities:NotesPayable -3,750.00 USD
; 250,000 * 6% * 0.25 = 3,750

年度 SaaS 销售额(递延收入 + 每月确认)

这是权责发生制会计的基石。 当客户预先支付一年的费用时,您不会立即获得所有收入。 您将其计入负债 (DeferredRevenue),然后每月确认 1/12 的收入。

2025-03-10 * "Annual subscription — AcmeCo — INV-001"
Assets:AR 1,200.00 USD
Liabilities:DeferredRevenue -1,200.00 USD
narration: "SaaS annual prepay"

2025-03-20 * "Payment INV-001"
Assets:Bank:Checking 1,200.00 USD
Assets:AR -1,200.00 USD

; 确认月份 1/12(每月重复或编写脚本)
2025-04-01 * "Revenue recognition 1/12 — INV-001"
Liabilities:DeferredRevenue 100.00 USD
Income:Revenue:SaaS -100.00 USD

预付费用和摊销

这是递延收入的逆运算。 当您预先支付一项服务费用(如年度软件或保险)时,您将其记录为一项资产 (Prepaid),然后每月“摊销”或支出其中的一部分。

2025-03-01 * "Annual software prepaid"
Assets:Prepaid:Software 1,200.00 USD
Assets:Bank:Checking -1,200.00 USD

2025-04-01 * "Amortize prepay 1/12"
Expenses:Software:Subscriptions 100.00 USD
Assets:Prepaid:Software -100.00 USD

工资单(净现金,含预扣税款 + 雇主税款)

工资单条目包含多个部分:工资总额费用、雇主的税费、支付给员工的净现金以及您已预扣的、必须汇给政府的税款负债。

2025-04-15 * "Payroll — Apr 15"
Expenses:Payroll:Wages 15,000.00 USD
Expenses:Payroll:EmployerTaxes 1,200.00 USD
Liabilities:Payroll:Withholding -4,000.00 USD
Assets:Bank:Checking -12,200.00 USD

销售税的收取和汇款(例如加州)

当您收取销售税时,这笔钱不是您的。 这是您欠州的负债。 您在销售时记录负债,并在汇款时清除负债。

2025-05-10 * "Invoice #123 — CA taxable"
Assets:AR 1,088.75 USD
Income:Revenue:SaaS -999.00 USD
Liabilities:SalesTax:CA -89.75 USD

2025-06-05 * "Payment #123"
Assets:Bank:Checking 1,088.75 USD
Assets:AR -1,088.75 USD

2025-07-20 * "Remit CA sales tax Q2"
Liabilities:SalesTax:CA 89.75 USD
Assets:Bank:Checking -89.75 USD

外汇和加密货币(轻量级)

Beancount 本机处理多种货币。 使用 price 指令记录汇率,并使用 {} 成本语法来处理特定交易。

2025-03-01 price EUR 1.0832 USD

2025-03-02 * "AWS EU charge"
Expenses:Cloud 90.00 EUR
Liabilities:CreditCard:Corporate -90.00 EUR

2025-03-05 * "Buy BTC for testing"
Assets:Crypto:BTC 0.0200 BTC {3400.00 USD}
Assets:Bank:Checking -3,400.00 USD

7) 使用 Fava(一个命令生成报告)

Fava 是一款出色的 Web 界面,可让 Beancount 数据栩栩如生。 这是对您认真数据录入的回报。

  • 安装: $ pip install fava
  • 运行: $ fava ledger/main.beancount
  • 有用的视图利润表资产负债表日记账(用于按账户/标签筛选)和 查询(用于自定义类 SQL 查询)。

快速 Fava 过滤器:

  • account:DeferredRevenue:显示您的递延收入账户中的所有活动。
  • tag:#invoice-001:标记与特定发票相关的交易并对其进行过滤。
  • from:2025-01-01 to:2025-12-31:专注于特定的财务期间。

8) 每月结算清单(15–45 分钟)

在每个月末,请完成此清单以确保您的账簿准确且是最新的。 这种自律性使报税时间和投资者尽职调查变得轻而易举。

  • 银行/信用卡:导入或手动输入所有交易。 根据您的对账单核对余额。
  • AR/AP:过账所有已开具的发票和已收到的账单; 将已付款的项目标记为已清算。
  • 收入:过账所有预付合同的每月收入确认条目。
  • 预付款:摊销所有预付费用的 1/12(或适当的比例)。
  • 工资单:从您的工资单提供商的报告中预订日记账分录。
  • 销售税:预订您当月的销售税负债。
  • 种子工具:计算任何可转换票据的应计利息。
  • 健全性检查
    • 您的利润表收入是否大致与您预期的 MRR/ARR 相符?
    • 您的烧钱率和生存时间是否与您的财务计划一致?
    • $ bean-check 运行是否没有错误? Fava 的报告看起来是否正确?
  • 使用简洁、一致的注释提交到 Git(例如,close: 2025-04)。

9) 元数据和文档(简化审计)

您的账簿应该是自我记录的。 使用元数据并链接到源文档以创建万无一失的审计跟踪。 未来的您(和您的会计师)会感谢您的。

  • 向交易添加元数据,如 payee:narration:invoice:customer:link: 以提高清晰度。
  • 将源 PDF 文件(发票、收据、银行对账单)附加到您的 ledger/documents/ 文件夹,并使用 document: 元数据标签链接它们。
  • 使用标签(#payroll#saas#vendor-aws#invoice-001)轻松进行过滤和分析。

示例:

2025-03-10 * "Annual subscription — AcmeCo" #saas #invoice-001
payee: "AcmeCo"
invoice: "INV-001"
document: "documents/invoices/INV-001.pdf"
Assets:AR 1,200.00 USD
Liabilities:DeferredRevenue -1,200.00 USD

10) 稍后导入(当您有时间时)

首先手动输入前一两个月的交易。 这是了解系统和您自己的消费模式的最佳方式。 一旦您感到舒适,您就可以编写简单的 Python 导入程序来自动化该过程并减少苦力。

典型的导入程序顺序:

  1. 银行 CSV → Assets:Bank:Checking
  2. 信用卡 CSV → Liabilities:CreditCard:Corporate
  3. Stripe/PayPal 付款报告 → 收入和现金映射

将您的导入程序保存在 /ledger/importers 中,并像对待任何其他代码更改一样查看它们生成的交易。


11) 政策(放入 includes/policies.beancount

此文件是您记录您的会计决策以保持一致性的地方。 这是一个简单的文本文件,但对于保持自律至关重要。

  • 权责发生制基础; 按比例确认 SaaS 收入。
  • 记账本位币为美元; 以每日汇率或交易汇率记录外汇。
  • 资本化阈值(例如,超过 $2,500 的项目成为 Assets:Equipment 项目; 否则,它们会立即被费用化)。
  • 差旅/餐费:业务目的必须在 narration 字段中记录。
  • 权益记录:明确说明您是使用仅限货币还是股票商品方法。
  • SAFE/票据:记录您选择的分类(负债或权益)。

示例 policies.beancount

; Policy: Accrual basis, revenue deferred and recognized monthly.
; Policy: USD functional currency. FX gains/losses are derived from cost/price data.
; Policy: Capitalize tangible assets over $2,500 with a 3-year straight-line depreciation.
; Policy: SAFEs are recorded as Liabilities until conversion in a priced round.

12) 快速故障排除

  • 日记账中的收入看起来是负数:这是正确的! 收入是贷方。 Fava 报告将显示为正数。
  • 余额未归零:您可能有一笔未完成的交易。 交易的分录必须总和为零。 使用 Fava 的日记账视图查找罪魁祸首。 作为一项临时措施,您可以向 Equity:Suspense 账户添加一个平衡分录以使文件有效,然后调查并修复根本原因。
  • 外汇不匹配:确保您有相关日期的 price 指令,或者您在您的记账本位币中指定了成本基础,例如 90.00 EUR {97.49 USD}

13) 在账簿外跟踪的内容(保留链接)

Beancount 用于您的财务交易,但有些事情最好在专用系统中管理。 关键是从您的账簿链接到它们。

  • 股权结构表:使用 Carta、Pulley 或电子表格。 从您在 Beancount 中的融资交易链接到已签署的结算文件。
  • 董事会同意书、股权激励计划、409A 报告:将这些存储在安全位置,并将 link: 元数据添加到相关的股权交易。
  • 纳税申报表:存储最终的 PDF 文件,并从年终结算交易链接到它们。

随时可复制的入门文件(一体化)

如果您希望从单个文件开始,然后再扩展到包含结构,您可以简单地将上面各部分的文件内容粘贴到一个大的 main.beancount 中。 您可以随时在以后账簿增长时重构它。

该框架为您的初创公司财务提供了一个坚实、可扩展的基础。 通过将您的账簿以纯文本格式保存在版本控制下,您可以获得无与伦比的透明度和控制权,从而从一开始就为您的公司建立财务纪律。