初创公司的 Beancount 设置
一个实用的、可复制粘贴的基线,用于以纯文本格式运行初创公司的账簿。 适用于种子轮前到 A 轮。 这不是法律或税务建议。
经营一家初创公司意味着身兼数职,其中最关键的之一就是“簿记员”。 在你能够负担昂贵的软件或全职会计师之前,你需要一个准确、可审计且不会将你锁定在专有生态系统中的系统。 进入 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,信用卡余额为 $500。 Equity: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 导入程序来自动化该过程并减少苦力。
典型的导入程序顺序:
- 银行 CSV →
Assets:Bank:Checking - 信用卡 CSV →
Liabilities:CreditCard:Corporate - 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 中。 你可以随时在以后账簿增长时重构它。
该框架为你的初创公司财务提供了一个坚实、可扩展的基础。 通过将你的账簿以纯文本格式保存在版本控制下,你可以获得无与伦比的透明度和控制权,从而从一开始就为你的公司建立财务纪律。
