适用于自由职业者、小型企业和个人理财的示例配置
在本指南中,我们将探讨如何针对不同需求定制 Beancount 账本:自由职业专业人士、精品小型企业以及个人家庭财务。每种场景都有独特的账户结构和考量。我们将解释每种配置背后的原理,提供 Beancount 示例片段,并突出介绍有用的功能(如自定义标签和自动导入),使记账更容易。语气是指导性的但又易于理解——无论你是开发者、精通技术的专业人士还是财务爱好者,这些示例都将帮助你将 Beancount 应用到现实世界中。
自由职业者
自由职业者(如软件开发人员或平面设计师)通常要同时处理多个客户和项目开支。一个简单的 Beancount 配置可以帮助你追踪每个客户的收入、业务开支(包括聘请的任何分包商)以及为税款预留的资金。目标是保持简单直接,使其能够随着你的自由职业业务的增长而扩展,而无需不必要的复杂性。
自由职业者的关键账户: 自由职业账本通常将业务财务与个人财务分开。例如,你可以使用:
- Assets:Business:Checking – 用于所有客户付款和业务开支的业务银行账户。
- Assets:Business:TaxSavings – 用于预留一部分收入用于支付税款的储蓄账户(因为没有雇主为你代扣税款)。
- Income:Client:名称 – 用于客户付款的账户。你可以为每位主要客户创建子账户(例如,
Income:Client:ACME),或者使用一个单独的Income:Freelance账户,并在交易中标记客户名称。 - Expenses:Business:Contractors – 用于支付给分包商或外包工作的款项。
- Expenses:Business:Software(以及其他类别,如Travel、Supplies) – 用于常规业务开支(软件订阅、设备、前往客户现场的旅行等)。
- Equity:OwnerDraw –(可选)用于记录将利润从业务转移到个人。这有助于在支付自己时区分业务资金和个人资金。
原理: 这种结构确保所有业务相关资金都在专用账户中追踪。每笔客户收入都被记录(可以轻松查看谁是你的顶级客户),开支被分类以便在报税时扣除。在单独的资产账户中预留税款(或记录应缴税负债)可以防止意外支出最终会交给政府的钱。账本保持简单:如果你获得新客户或新增开支类别,你可以添加新账户或使用标签,而无需重新组织一切。一个常见的陷阱是将个人和业务交易混在一个账户中;通过维护专用的业务支票(以及相应的资产账户),对账和报告会更清晰。另一个要避免的陷阱是忘记记录税款或所有者抽出的现金转移——通过使用 TaxSavings 和 OwnerDraw 等账户,每一美元都有账可循。
Beancount 功能亮点: 标签和元数据对自由职业者非常有用。例如,你可以为交易打上项目或发票号的标签,或者使用元数据字段记录客户名称(如果你选择不为每个客户使用单独的账户)。这样可以轻松筛选或查询特定客户或项目的交易(例如,汇总所有带有 #ProjectX 标签的开支)。此外,Beancount 的自动导入器 可以简化数据输入——例如,你可以为银行或信用卡对账单设置导入器,将交易导入账本,然后只需添加相应的开支或收入账户名称。当你有很多小交易(如软件订阅或旅行开支)时,这可以节省时间。
自由职业者示例账本节选
以下是自由职业开发者的简化 Beancount 片段。它展示了开设几个关键账户、一笔来自客户的付款、一笔支付给分包商的款项、一笔典型的业务开支,以及将资金转入税款储蓄账户。(实际上,你还会同样记录其他开支,如旅行或设备购买。)
1970-01-01 open Assets:Business:Checking
1970-01-01 open Assets:Business:TaxSavings
1970-01-01 open Income:Client:ACME
1970-01-01 open Expenses:Business:Contractors
1970-01-01 open Expenses:Business:Software
; Client income – payment for an invoice
2025-08-15 * "Invoice payment from ACME Corp"
invoice: "INV-2025-08-15"
Assets:Business:Checking 5000 USD
Income:Client:ACME -5000 USD
; Regular expense – e.g. software subscription for the business
2025-08-05 * "GitHub Subscription"
Expenses:Business:Software 15 USD
Assets:Business:Checking -15 USD
; Contractor expense – paying a subcontractor for help
2025-08-20 * "Contractor payment – Jane Doe"
Expenses:Business:Contractors 2000 USD
Assets:Business:Checking -2000 USD
; Tax withholding – moving money to tax savings
2025-08-31 * "Set aside Q3 taxes" #tax
Assets:Business:TaxSavings 1500 USD
Assets:Business:Checking -1500 USD让我们逐步解读:
- 我们开设了顶部所需的账户(带有开始日期)。Beancount 要求每个账户在使用前必须开设——对未声明账户的过账是加载错误——因此这些
open指令是必需的,而非可选的。Assets:Business:Checking和Assets:Business:TaxSavings账户将持有美元余额;收入和开支账户在开设指令中可以不带货币,因为它们将继承交易的货币(此处为 USD)。 - 客户发票付款: 在 2025-08-15,一笔收入交易记录了来自客户的 $5,000 发票付款。我们贷记
Income:Client:ACME(在复式记账中,收入通过负数金额增加)并借记检查账户。包含了invoice: "INV-2025-08-15"元数据字段以记录发票号——这是可选的,但展示了如何将额外信息附加到交易上。你还可以使用#ACME或#client-ACME标记此交易以用于快速筛选。如果你有多个客户,你可能会使用通用的Income:Clients账户,并依赖此类元数据或 Payee 字段来区分客户,而不是创建许多子账户。 - 业务开支(软件): 在 2025-08-05,我们记录了 $15 的 GitHub 订阅开支(可能用于私有仓库或其他服务)。该过账进入
Expenses:Business:Software并减少业务检查账户。像这样的小型经常性开支可以被标记(例如,我们在下面的税款交易中添加了#tax标签;同样,如果某些开支每月发生,你可以将其标记为#recurring等)。在这种情况下,账户名称本身(Software)已经使其清晰。 - 分包商付款: 在 2025-08-20,自由职业者支付了分包商(Jane Doe)$2,000。这被记录为
Expenses:Business:Contractors的开支,并从检查账户中扣除现金。你可以将分包商的姓名包含在叙述中(如我们所做)或作为元数据字段(例如,contractor: "Jane Doe")。这保留了支付对象和原因的审计线索(在报税或预算时需要详细信息时非常有用)。 - 税款储蓄转移: 在 2025-08-31,自由职业者将 $1,500 从主检查账户转移到专用的税款储蓄账户。我们标记了此交易为
#tax以增加可见性。这不是开支(你只是在移动自己的钱),所以它在两个资产账户之间进行。通过每月或每季度执行此操作,你可以积累资金以支付预估税款。当实际支付税款给政府时,你需要记录一笔开支(例如,Expenses:Taxes)并从 TaxSavings(或 Checking)账户中扣除。一个常见陷阱是在报告中将此转移视为开支——记住,这不是开支,只是预防性分配。只有实际支付给国税局/税务机关的税款才是开支(如果你以这种方式追踪,则是减少累积的税负债)。
总结: 自由职业者的 Beancount 账本强调简单和清晰。所有与业务相关的收入和支出都被有条理地记录。通过使用有意义的账户名称和偶尔的标签/元数据,你可以轻松生成基于客户或开支类别的报告(例如,每位客户的总收入、今年在分包商上的总支出等)。这种配置是可扩展的——你可以随着业务发展添加新客户或开支类别。借助自动导入(用于导入银行交易)和项目或发票的自定义标签等功能,Beancount 可以大大减少自由职业者的簿记负担,同时在任何时候都能提供清晰的财务状况。
小型企业
接下来,考虑一个精品电子商务小型企业——例如,一个在线销售手工制作物品的商店。这个场景增加了复杂性,例如库存管理、销货成本(COGS)以及处理在线支付处理器。Beancount 可以通过深思熟虑的账户结构和交易记录方法来适应这些需求。我们将通过一个案例,即业务跟踪库存中的产品、通过在线平台(如 Shopify 与 Stripe 进行支付)记录销售,以及记录典型的业务开支。
精品电子商务业务的关键账户: 除了基本的银行和开支账户外,零售业务账本还包括用于跟踪库存和销售流程的账户:
- Assets:Bank:Checking – 业务支票账户(用于支付供应商、运营开支以及接收支付处理器的转账)。
- Assets:Stripe:Balance(或 Assets:PayPal 等) – 一个清算账户,用于存放通过在线支付收集但尚未到达银行的资金。例如,当客户通过 Stripe 支付时,资金可能存放在 Stripe 账户中,然后再分批存入你的银行。
- Assets:Inventory:产品 – 库存账户。你可以将每种产品(或产品类别)视为 Beancount 中的商品,以跟踪手头的数量。例如,
Assets:Inventory:Widgets可以存放当前库存中“Widget”物品的数量,按其成本价估值。 - Income:Sales – 记录产品销售的收入。如果业务有多个渠道,你可能为不同销售渠道使用子账户(例如,
Income:Sales:Online与Income:Sales:InStore),但我们保持简单,使用一个销售收入账户。 - Expenses:COGS – 销货成本,用于记录销售时库存物品的成本基础。该账户将有效显示在某一时期(作为业务所有者)销售库存的成本。这是计算毛利润的关键组成部分。
- Expenses:Fees – 用于支付处理器费用和平台费用(Stripe 费用、Shopify 费用、PayPal 费用等都可以记录在这里)。如果需要,你可以将其细分为更详细的账户(例如,
Expenses:Fees:Stripe和Expenses:Fees:Shopify),但一个账户可能足以涵盖所有交易费用。 - Expenses:Operating – 与销货成本不直接相关的常规业务开支,例如营销、网站托管、软件、航运用品等。这些可以细分为子账户(例如,
Expenses:Marketing、Expenses:WebHosting、Expenses:Shipping)以分析不同的成本中心。 - Liabilities:SalesTax –(可选,如果适用)如果业务需要收取销售税或增值税,此负债账户跟踪已收取但尚未提交给政府的税款。每次销售都会将税款部分拆分到该账户。这确保收取的税款不被计为收入,并专门用于向税务当局支付。
- Equity:OwnerEquity –(可选)代表所有者的投资和留存收益。当业务启动时,所有者提供的任何初始资金都被贷记到这里(如果所有者贡献现金或库存,则借记到银行或库存账户)。此外,如果所有者提取利润(分配),可以记录在此权益账户下。这保持资产负债表平衡,但在日常操作中,它不经常涉及。
原理: 这种配置分离了商品和资金的流动。库存购买最初在资产负债表上记录(作为资产),而不是立即作为开支。只有在销售产品时,你才将其成本作为销货成本支出,将收入与相关开支匹配以进行正确的利润计算。销售收入按总销售价格记录,而费用单独记录,以便你可以看到总收入、支付的费用以及由此产生的净收入。使用像 Assets:Stripe:Balance 这样的清算账户有助于对账存款——资金从 Stripe 分批转移到你的银行,你可以记录这些转移而不引起混淆。新店主的一个常见陷阱是未正确记录库存——例如,立即将所有库存购买作为开支。这可能适合现金流追踪,但会扭曲利润:在库存加满的月份看起来利润较低,而在销售旺盛的月份看起来利润较高,即使库存是更早购买的。通过使用库存资产账户和销货成本,你将成本与销售对齐。另一个陷阱是未考虑费用或退款,这可能导致银行或 Stripe 余额与记录的收入不匹配。我们通过明确记录费用和使用 Stripe 资产账户来跟踪 Stripe 所欠或已支付的钱,从而避免这个问题。
Beancount 功能亮点: Beancount 中的库存跟踪利用其处理商品和成本的能力。每种产品可以是一个商品符号(例如,WIDGET),允许你记录数量和单位成本。当你出售物品时,你指定要减少的哪个成本批,Beancount 会从中抽取——参见库存和记账方法 了解完整集合。默认的记账方法是STRICT,要求批必须明确;这就是为什么示例使用 {10 USD} 明确指定。要让 Beancount 自动选择批(最旧的优先),请在 open 指令中为账户选择 FIFO 方法:open Assets:Inventory:Widgets WIDGET "FIFO"。我们将在示例中使用明确的 STRICT 形式。你还可以使用元数据或链接将销售及相应的销货成本条目关联起来(例如,在两个交易中使用相同的订单号,或在销售和库存减少上共享一个标签,如 #order1001,从而可以轻松查询或交叉检查每次销售是否有匹配的销货成本条目)。此外,自动导入在这里也有帮助:你可以使用脚本从 Shopify 或 Stripe 支付报告中导入销售数据,或导入银行对账单以捕获开支交易和付款。自动化这些重复的数据输入任务意味着你花更多时间分析,而不是输入数字。
小型企业示例账本节选
以下是为我们的精品电子商务业务整理的 Beancount 示例。我们展示了购买库存、记录一次销售(支付处理器费用已扣除)以及记录该销售的销货成本。实际上,你还会类似地记录其他开支(如平台费用、广告费用等),与所示费用示例相同。我们假设使用 USD 作为货币,并假设有一个名为“Widget”的产品,我们将其作为库存中的商品跟踪。
1970-01-01 open Assets:Bank:Checking
1970-01-01 open Assets:Stripe:Balance
1970-01-01 open Assets:Inventory:Widgets WIDGET
1970-01-01 open Income:Sales
1970-01-01 open Expenses:COGS
1970-01-01 open Expenses:Fees
; Purchase inventory (50 units of Widget at $10 cost each)
2025-03-10 * "Bought 50 Widgets from SupplierCo"
Assets:Inventory:Widgets 50 WIDGET {10 USD}
Assets:Bank:Checking -500 USD
; Sale to customer (Order #1001 via online store, 2 Widgets sold)
2025-04-05 * "Sale Order #1001 (2x Widget via Shopify)"
Assets:Stripe:Balance 58 USD ; net payment received after fees
Expenses:Fees 2 USD ; processing fee (Stripe)
Income:Sales -60 USD ; revenue for 2 Widgets (@ $30 each)
; Cost of goods sold for the above sale (2 Widgets at $10 cost each)
2025-04-05 * "COGS for Order #1001 (2x Widget)"
Expenses:COGS 20 USD
Assets:Inventory:Widgets -2 WIDGET {10 USD}逐步解读:
-
开设账户: 我们开设检查账户、Stripe 余额账户、Widgets 库存账户(声明商品为
WIDGET以跟踪单位),以及核心收入和费用账户(Sales、COGS、Fees)。通过声明Assets:Inventory:Widgets WIDGET,我们表明该账户将持有商品“WIDGET”的数量。这确保 Beancount 知道在这里期望商品数量,并且我们可以为这些单位附加成本。 -
库存购买: 在 2025-03-10,我们购买了库存——50 个 Widget,每个 $10,总成本为 $500。交易借记
Assets:Inventory:Widgets,金额为50 WIDGET {10 USD}。这意味着 50 个 WIDGET 商品单位,每个记录成本为 10 USD,被添加到库存账户。贷方是Assets:Bank:Checking -500 USD(现金支出)。注意我们这里没有直接涉及费用账户;我们将购买资本化为库存资产。现在我们的资产负债表中有 50 个 Widget,库存总值为 $500。(如果你运行余额报告,库存账户将显示 50 个 WIDGET 单位,价值 $500。) -
记录销售(订单 #1001): 在 2025-04-05,我们记录通过在线商店出售的 2 个 Widget 的销售情况。叙述中包含了订单号以便清晰。此交易涉及三个过账:
Assets:Stripe:Balance 58 USD:从销售中收到的资金,但目前位于 Stripe(费用已扣除)。假设客户总共支付了 $60;Stripe 收取了 $2 费用,$58 现在在我们的 Stripe 账户中(稍后会转移到我们的银行)。我们将 $58 记录为 Stripe 中的资产。Expenses:Fees 2 USD:$2 的费用被记录为业务开支。这确保我们的损益表反映该成本,并且我们的 Stripe 资产加上费用支出等于客户支付的总金额。Income:Sales -60 USD:我们记录 $60 的销售收入。(收入账户通过贷方增加,因此在 Beancount 表示中使用负数金额)。
交易后,净效果是:Income:Sales 增加 60,资产增加 $58(从 Stripe 应收),费用支出为 $2。如果 Stripe 随后将 $58 存入我们的银行,我们会记录一个简单的转移,如
Assets:Bank:Checking 58 USD / Assets:Stripe:Balance -58 USD在付款日期——这将资产从 Stripe 账户转移到银行,对收入或费用无影响(只是转移资产)。我们上面没有显示该转移,但在实际簿记中,这是一个重要步骤,以确保所有资金转移后 Stripe 账户保持为 $0。 -
记录销货成本: 同样在 2025-04-05,我们有单独的记录出售的 2 个 Widget 成本。我们借记
Expenses:COGS 20 USD并贷记Assets:Inventory:Widgets -2 WIDGET {10 USD}。这样做的效果是从库存中移除 2 个单位(每个成本为 $10,合计 $20)。我们指定{10 USD}以告诉 Beancount 抽取哪个成本批——在这种情况下,它匹配我们在 2025-03-10 添加的批。现在库存账户将有 48 个 Widget,剩余,以及相应的成本 $480。$20 被转移到销货成本支出中,这将出现在损益表上,减少毛利润的商品成本。(如果我们不记录,我们的收入将相对于支出被高估。)我们使用单独的记录以提高清晰度,但也可以在一次多行交易中组合销售和销货成本。有些人更喜欢拆分,为了可读性和对账(你可以将每个销货成本条目与订单关联起来)。我们还在叙述中回应了订单号,以轻松看到此销货成本条目对应于订单 #1001。一个良好的实践是确保每次涉及库存的销售都有匹配的销货成本条目——缺少一个会导致库存数量出错。要避免的陷阱是忘记为销售移除库存,这会使资产负债表上有幽灵库存,支出被低估。使用 Beancount 的库存功能({}成本符号)有助于捕获是否尝试移除超过手头数量的情况(在这种情况下,软件会报错)。
总结: 使用 Beancount 的小型企业可以维护一个相当强大的会计系统。通过构建账户来跟踪资金在哪里,资金从哪里来,以及成本如何流动,你可以获得准确的盈利能力图景。我们的示例展示了如何处理库存和销售;你还会类似地记录其他交易,如支付互联网账单(Expenses:Operating:Internet 与 Assets:Bank:Checking),获取贷款或投资(Assets:Bank 与 Liabilities:Loan 或 Equity:OwnerEquity),或支付销售税(Liabilities:SalesTax 与 Assets:Bank 时提交的税款)。关键是保持一致:每种类型的交易都遵循相同的模式,Beancount 将保持账簿平衡。借助自动数据导入(例如,导入每月的 Stripe 费用或银行交易)以及自定义标签/链接(用于关联相关交易,如销售和退款),系统既灵活又高效。结果是一个有组织的账本,可以随着业务增长而扩展——你可以添加新产品库存账户、新开支类别或额外收入流(例如,新的在线市场),而无需重新设计整个系统。
个人理财
最后,考虑将 Beancount 用于个人或家庭财务。此配置适用于管理日常开支、银行账户、信用卡、贷款和投资或家庭。重点是跟踪资金去向(开支)、资金来源(收入)以及资金如何储蓄或投资(资产和负债)。Beancount 可以取代或增强预算应用,提供一个透明且可自定义财务视图,并具有复式记账的严谨性,确保没有重复计算或遗漏。
个人理财的关键账户: 个人理财账本通常包含各种资产、负债、收入和开支账户:
- Assets:Bank:Checking – 你的主要支票账户,用于收入存款和账单支付。
- Assets:Bank:Savings – 储蓄账户,用于紧急基金或特定目标。(你可能有一个或多个储蓄或投资账户——每个都可以作为资产账户)。
- Assets:Cash – 如果你使用现金用于开支,你可能有一个现金账户来跟踪提取和现金消费。
- Assets:Investments:经纪人 – 投资账户,例如经纪账户、退休 401(k)/IRA 等。这些可能进一步按投资类型细分,或仅按机构合并为一个账户。例如,
Assets:Investments:VanguardIRA或Assets:Investments:Robinhood。跟踪投资也可能涉及股票或基金的商品,但如果太详细,你可以简单地跟踪贡献和账户余额。 - Liabilities:CreditCard:名称 – 每个信用卡一个账户(例如,
Liabilities:CreditCard:Visa或按银行名称)。卡上的所有购买都记录在这里(并有相应的支出),对卡片的付款是减少此负债的转移。 - Liabilities:Loan:名称 – 任何贷款(学生贷款、抵押贷款、汽车贷款)都可以用负债账户跟踪。你将记录本金余额和每笔付款,拆分利息(开支)和本金(负债减少)。这是一个高级方面,但为了完整的财务图景很重要。
- Income:Salary(和/或 Income:Bonus、Income:Interest 等) – 用于记录工资、奖金、利息收入、股利等。收入账户让你看到来自各种来源的总收入。(如果你的工资已经扣除了税款,你可能将净存款记录为收入,或记录总额和预扣税作为开支或负债——有不同的方法,但许多人为了简化个人账本只记录净收入。)
- Expenses: 通常很多,分为对你有意义的类别。例如:Expenses:Housing:Rent、Expenses:Food:Groceries、Expenses:Food:DiningOut、Expenses:Utilities:Electricity、Expenses:Entertainment、Expenses:Travel、Expenses:Taxes、Expenses:Misc – 不管什么类别反映你的消费习惯。你可以根据需要随意细化或概括。账户层次有助于汇总(例如,
Expenses:Food将涵盖 Groceries 和 DiningOut 的总和)。常见做法是为主要群体建立一个层次(Housing、Food、Transportation、Healthcare 等)。 - Equity:Opening-Balances – 用于在启动账本时初始化账户余额(以便资产减去负债等于你在权益中记录的起始净资产)。开始后,你可能还会使用 Equity:Retained-Earnings 或类似来表示累积净利润(尽管在个人理财中,你通常只需让收入减去支出滚动到净资产中)。权益账户在日常不显著,但确保会计等式平衡。
原理: 个人理财配置是将你的财务生活纳入一个连贯系统的过程。上述每个账户都用于分隔不同类型的财务,以便你可以回答诸如“这个月我在食物上花了多少?”(通过对 Expenses:Food:* 求和)、“我还有多少债务?”(通过查看负债账户)或“我的净资产是多少?”(资产减去负债)等问题。复式记账在这里的一大优势是准确性:例如,当你将 $100 的食品杂货费用记在你的信用卡上时,你记录一个费用和一个负债增加。稍后,当你支付信用卡时,你记录从银行到卡片的转移——这减少负债,但不会重复计算食品杂货费用(已经记录)。没有复式记账,一个常见陷阱是将信用卡付款视为费用本身,从而将 $100 计算两次。Beancount 设计上防止了这种情况。另一个要避免的陷阱是未能对账账户:使用 Beancount,你可以使用余额断言或 balance 指令来确保,例如,账本中的支票账户余额与实际银行对账单匹配。这能捕获缺失或重复的条目。
Beancount 功能亮点: 对于个人理财,自动导入特别有用,因为交易量大。你可以使用 Beancount 的导入框架或社区脚本从 CSV、OFX 或 API 来源导入银行交易、信用卡对账单,甚至投资交易。这意味着你花更少的时间手动输入每一笔咖啡购买。自定义标签用于以账户可能无法实现的方式切片数据。例如,将所有与假期相关的开支标记为 #vacation2025,无论它们是航班、酒店还是餐饮——然后你可以轻松查询该假期的总费用。或者将某些开支标记为 #deductible,以便在需要跟踪可扣除项目时参考。你也可以标记经常性账单(例如,#monthly)来每年审查所有订阅和固定成本。元数据可用于附加笔记或收据(例如,receipt: "path/to/file.jpg" 以注明你保存了收据图片,或 category: "Work Expense" 如果跟踪可报销项目)。标签和元数据的灵活性意味着你可以调整系统以适应你的个人跟踪需求,而无需创建几十个额外的账户。
将上个月的银行导出文件通过 CSV 转 Beancount 转换器,或将 .ofx、.qfx 或 .qif 下载文件通过 OFX 和 QIF 转 Beancount 处理。对于大多数个人账本来说,这已经足够了,并且它会向你展示自定义导入器必须产生的条目结构。
个人理财示例账本节选
以下是个人 Beancount 账本的示例片段,捕获了几个典型交易:用信用卡支付的每日开支、从检查账户支付的经常性账单,以及向退休投资账户的贡献。(为简洁起见,我们假设初始设置已完成,包括开设账户和记录任何工资收入;这里我们关注支出和储蓄方面。)
1970-01-01 open Assets:Bank:Checking
1970-01-01 open Liabilities:CreditCard:Visa
1970-01-01 open Expenses:Food:Coffee
1970-01-01 open Expenses:Housing:Rent
1970-01-01 open Assets:Investment:401k
; Daily spending example (coffee on a credit card)
2025-09-10 * "Starbucks Coffee" #daily
Expenses:Food:Coffee 5.50 USD
Liabilities:CreditCard:Visa -5.50 USD
; Recurring monthly bill (rent paid from checking)
2025-09-01 * "Apartment Rent September" #recurring
Expenses:Housing:Rent 1200 USD
Assets:Bank:Checking -1200 USD
; Retirement contribution (transfer from checking to 401k investment)
2025-09-15 * "401(k) Contribution" #retirement
Assets:Investment:401k 500 USD
Assets:Bank:Checking -500 USD让我们解读这些交易:
- 开设账户: 我们开设检查账户、Visa 信用卡账户、Coffee 支出账户(作为 Food 支出子类别的示例)、Rent 支出账户和 401k 投资账户。在实际账本中,你会开设所有计划使用的账户(储蓄、其他支出类别、收入等)。我们只保留片段所需的少数几个。
- 日常开支 – 咖啡: 在 2025-09-10,记录了 $5.50 的咖啡购买。支出归类在
Expenses:Food:Coffee下,由于使用 Visa 信用卡支付,我们贷记(增加)Liabilities:CreditCard:Visa。添加了#daily标签以表示这是日常可支配支出项目——也许之后你想筛选所有日常可支配支出。请注意,这之后,信用卡账户将显示余额 $5.50(意味着你欠 Visa 公司 $5.50)。如果你用现金支付此咖啡,交易将贷记Assets:Cash(减少手头现金)。如果是借记卡购买,则贷记Assets:Bank:Checking。机制类似,只是账户不同。 - 经常性账单 – 租金: 在 2025-09-01,我们记录支付每月 $1200 的租金。这来自检查账户(贷记
Assets:Bank:Checking),并归类为Expenses:Housing:Rent。我们标记了#recurring以表示这是重复账单。在完整账本中,你每月都会有类似条目。(Beancount 没有内置的自动经常性交易功能,但你可以通过脚本实现,或每月复制粘贴。标签有助于后续确保你没有错过某个月,或快速总结一年的租金。)有些用户通过 Beancount 导入器框架使用定期交易功能自动生成这些,但这是超出范围的高级用法。关键是此交易清楚显示了资金去向——住房开支——以及银行余额减少。一个要警惕的陷阱:如果你与他人共享开支或有室友,你可能只支付部分租金;在这种情况下,你可以将交易拆分为你的部分和他人支付的部分(如果他们支付你,可能记录为Income:Reimbursements)。在我们简单的案例中,我们支付全额。 - 退休贡献: 在 2025-09-15,$500 从检查账户转移到 401(k) 投资账户。这不是开支,而是将资产从一种形式(现金)转移到另一种形式(退休基金)。交易借记
Assets:Investment:401k并贷记Assets:Bank:Checking。我们标记了#retirement以便清晰。这之后,你的支票账户余额将下降 500,账本中 401k 账户余额将增加 500 USD 所代表的任何内容(取决于你如何跟踪投资,你可能随后用这笔现金购买基金单位——那将是投资账户中的另一笔交易,例如,以 Y 价格购买 X 份基金,现金离开 401k 资产)。在基础个人账本中,你可能只需将 401k 视为储蓄账户,定期更新其余额或记录此类贡献,并可能使用价格报价来跟踪增长。重要的是此交易是转移,而不是开支——它在构建资产。许多预算工具会将退休贡献视为“开支”(因为它离开你的支票账户),但在会计术语中,这只是将资金转移到另一个口袋。这个区别有助于你理解储蓄率与支出率。
如果我们有支付信用卡账单的交易,它将看起来像将资金从 Checking 转移到 CreditCard 负债(例如,Liabilities:CreditCard:Visa 100 USD / Assets:Bank:Checking -100 USD)。这将使信用卡余额下降(如果你全额支付则为零),并相应减少银行余额,对支出账户没有影响——因为你已经在购买时记录了支出。记住以这种方式处理信用卡对于准确的个人理财跟踪至关重要。你可能还会标记付款(有些人使用 #cc-payment 或类似),或在叙述中包含账单周期以便清晰。
总结: Beancount 中的个人理财账本有助于对你的资金跟踪施加纪律和结构。通过使用账户(可选地使用标签)对交易进行分类,你可以生成有洞察力的报告:按类别的每月支出、年度总额、你储蓄了多少等。复式记账方法意味着每美元都有账可循:如果一个账户余额下降,那么资金去了别处(另一个账户上升)。这捕获错误并防止了在较简单的跟踪工具中常见的“资金丢失”问题。借助自动化,你可以导入大多数交易,然后只需审查和分类,使维护变得相当可行。随着时间的推移,你建立了一个全面的财务日志——它甚至可以处理与朋友分账(使用权益账户或应付/应收账户)、跟踪贷款摊销或投资绩效,如果你选择扩展到这些领域。即使在最基本的形式(如片段所示),Beancount 也让你清晰掌握日常支出、经常性义务和长期目标(如退休储蓄)的进展。由于它是纯文本,你拥有完全的控制权:你可以脚本化它、查询它,或与其他工具(如用于友好界面的 Web 应用 Fava)集成。简言之,此配置将你的个人财务转化为你可以分析和信任的数据,同时保持足够简单,不至于成为一项苦差。
通过根据你的情况定制 Beancount 账本——无论你是自由职业者、经营小型企业还是管理个人资金——你都能从系统化的复式记账方法中受益,同时拥有纯文本系统的灵活性。这些示例配置展示了你可以在此基础上构建的核心模式。随着你的业务或财务生活变得更加复杂,你可以扩展账户图或使用高级功能(如预算、方差分析或多货币处理)。关键是从一个清晰、合理的结构(如所示)开始,并一致地记录交易。有了这些,Beancount 将成为理解和管理财务的强大盟友,适用于各种行业和个人场景。祝你记账愉快!