为你的小企业财务排毒 —— Beancount 方式
在30天内将一个混乱的总账转换为平静、现金充裕的企业——使用纯文本会计。
简要总结
- 分离、简化和锁定你的账簿,使用精简的科目表、一致的导入和自动化的余额检查。
- 显示重要信息——销货成本、管理费用、现金储备——通过快速的
bean-query
报告。 - 消除噪音(未使用的订阅、重复工具)和编码良好习惯(每周对账、每月结账、附加收据)。
- 让税务季节变得无聊,通过在一个地方保持对账单、收据和余额可验证。
为什么要"排毒"?
小企业的财务混乱不仅仅是杂乱无章——而是昂贵的。它隐藏浪费的支出,模糊你的真实盈利能力,并将税务季节变成疯狂的寻宝游戏。财务排毒是一个专注的30天重置:你识别什么推动(和泄露)金钱,移除复杂性,然后制度化简单、可重复的例程来保持清洁。
Beancount是这项工作的完美工具,因为它是透明的、可脚本化的和可验证的。与黑盒软件不同,纯文本总账意味着每个数字都是可解释的。每个检查和余额都可以通过指令和查询自动化,创建一个强制清晰度的自审计系统。这个指南将带你通过一个四周计划来实现这一点。
第0周 —— 设定你的基线
在你能够清理之前,你需要一个坚实的基础。这周是关于定义你财务世界的结构。
创建精简的科目表
你的科目表是你财务系统的骨架。这里的目标是极简主义。不要为每一个你可能有的支出创建账户。从你今天使用的基本要素开始;你总是可以稍后添加更多。杂乱的科目表鼓励错误的分类,并使高级分析变得困难。
这里是一个简单、有效的起点:
; 核心实体
2025-01-01 open Assets:Bank:Checking USD
2025-01-01 open Assets:Bank:Savings USD
2025-01-01 open Liabilities:CreditCard:Business USD
2025-01-01 open Income:Sales
2025-01-01 open Expenses:COGS
2025-01-01 open Expenses:Overhead:Rent
2025-01-01 open Expenses:Overhead:Utilities
2025-01-01 open Expenses:SaaS
2025-01-01 open Equity:Opening-Balances
锁定你可以验证的余额
纯文本会计中最强大的功能是断言现实的能力。balance
指令告诉Beancount:"在这个日期,这个账户恰好有这么多钱。"如果不是,Beancount会抛出一个错误。这是你的主要安全网。
开始时,使用pad
与balance
结合来从银行对账单初始化你的账户。pad
指令创建一个交易,强制账户到正确的开始余额,将差异记入权益账户。
; 从对账单初始化
2025-01-01 pad Assets:Bank:Checking Equity:Opening-Balances
2025-01-01 balance Assets:Bank:Checking 12345.67 USD
**谨慎提醒:**谨慎使用pad
。它是为了干净的开始,而不是为了掩盖反复出现的对账错误。
第1周 —— 分离和简化流程
有了结构到位,是时候澄清资金如何通过你的业务流动了。
保持业务 ≠ 个人
这是小企业财务的黄金法则。混合资金是造成混乱和税务头痛的原因。
- 维护一个专门的企业银行账户和一张企业信用卡。
- 在你的总账中反映这种分离:
Assets:Bank:Business:Checking
,Liabilities:CreditCard:Business
。 - 如果你给自己付款,将其记录为分配到
Equity:Owner-Draws
。永远不要直接从企业账户分类个人支出。
标准化供应商类别
你为AWS、Google Cloud和Vercel付费吗?不要创建三个单独的账户。将它们全部映射到一个逻辑类别,如Expenses:Cloud
。避免创建你实际上不会分析的微账户。目标是看到模式,而不是用自己的账户跟踪每个单独的供应商。
第2周 —— 自动化输入和收据
手动数据输入缓慢、容易出错且不可持续。这周是关于建立一台机器来可靠地为你的总账提供数据。
建立无戏剧的导入路径
Beancount的导入框架让你教会它如何从你的银行读取CSV或OFX文件并自动生成交易。投入时间一次性设置这个,你将在长期内节省数百小时。将你的导入规则保持在版本控制下(如Git),以便你的系统是可重复的和备份的。
- 从Beancount官方的导入外部数据指南开始。
- 对于更交互式的工作流程,考虑像beancount-import这样的工具,它提供半自动匹配的Web界面。
- 许多用户依赖内置的
ingest
或更新的beangulp
框架来构建他们的自定义导入器。选择一个并坚持使用以保持一致性。
将文档附加到它们所属的地方
没有收据的交易是一个没有根据的声明。Beancount及其Web界面Fava使得将源文档链接到条目变得轻而易举,创建了一个不可动摇的审计轨迹。
你有两个很好的选择:
- **文档文件夹+指令:**将所有收据和对账单存储在专用文件夹中。然后,使用
document
指令将文件链接到交易。 - **在Fava中拖放:**简单地将PDF或图像文件拖到Fava界面中的交易上。Fava自动存储文件并在你的总账文件中插入正确的
document
指令。
; 在你的主总账文件中,告诉Fava你的文档在哪里
option "documents" "/home/acme/docs"
; 将收据链接到特定的交易记录
2025-08-07 * "Figma" "Monthly Subscription"
Assets:CreditCard:Business -12.00 USD
Expenses:SaaS 12.00 USD
document: "receipts/figma-2025-08-07.pdf"
第3周 —— 看到真相(你将重复使用的快速查询)
你的总账现在干净并充满数据。是时候向它提出重要问题了。启动bean-query
命令行工具以获得即时答案。
1) 我的钱在哪里?
快速获取你的流动资产快照。
bean-query business.beancount 'BALANCES FROM year = 2025 AND (account ~ "Assets:Bank" OR account ~ "Liabilities:CreditCard")'
这给你一个即时的、实时的现金头寸视图,而无需登录多个银行门户。
2) 我在管理费用vs.销货成本上花了多少?
了解你的钱真正去了哪里。你是在非必需的管理费用上花费更多,还是在直接与交付产品相关的成本(销售商品成本)上花费更多?
SELECT
account,
units(sum(position))
WHERE
account ~ "^Expenses:(Overhead|COGS)" AND year = 2025
GROUP BY
account
ORDER BY
account
这个查询将你的核心运营成本与管理负担分开,这是盈利能力的关键洞察。
3) 哪些订阅看起来像"僵尸"?
找到经常在雷达下飞行的重复性小额费用。这些"僵尸"订阅可能会让你的现金流流失。
SELECT
payee,
COUNT(*) AS num_transactions,
SUM(number) AS total_spent
WHERE
account ~ "^Expenses:SaaS" AND date >= '2025-01-01'
GROUP BY
payee
ORDER BY
num_transactions DESC,
total_spent DESC
这个查询立即显示你经常付款的供应商。如果你看到一个你不认识或不再需要的,是时候取消了。
第4周 —— 整理和锁定系统
最后一周是关于建立保持你的财务永远清洁的习惯和护栏。
设置简单的预算
Fava可以从你的总账读取budget
指令,并在其报告中显示有用的进度条,显示你是否在正轨上。这提供了一个温和、持续的支出目标提醒。
; 将SaaS支出限制在每月$100
2025-01-01 custom "budget" Expenses:SaaS "monthly" 100.00 USD
为关键的可变支出类别设置这些,如软件、广告或承包商,以在漂移成为问题之前注意到它。
每次都关闭月份
建立一个简单、不可协商的月度结账流程:
- **对账:**对于每个银行和信用卡账户,添加一个
balance
断言,匹配你月度对账单上的最终数字。 - **附加:**使用
document
指令将PDF对账单本身附加到balance
条目。 - **报告:**运行你保存的三个查询(现金、管理费用/销货成本、订阅),并将输出粘贴到简短的月度审查笔记中。
余额断言是一个自动触发器。如果你的总账与银行对账单不匹配,Beancount将抛出错误,准确告诉你在哪里查找差异。