行业特定的设置
自由职业者、小型企业和个人理财的示例配置
在本指南中,我们将探讨如何为不同需求定制 Beancount 账本:自由职业专业人士、精品小型企业和个人家庭财务。每种情况都有独特的账户结构和注意事项。我们将解释每个设置背后的原理,提供 Beancount 示例代码片段,并重点介绍有用的功能(如自定义标签和自动导入),这些功能使跟踪更容易。 语气是指导性的,但平易近人 - 无论您是开发人员、精通技术的专业人士还是财务爱好者,这些示例都将帮助您在现实世界中应用 Beancount。
自由职业者
自由职业者(如软件开发人员或平面设计师)通常需要兼顾多个客户和项目费用。 一个简单的 Beancount 设置可以帮助跟踪来自每个客户的收入、业务费用(包括雇用的任何分包商)以及为税款预留的资金。目标是保持简单,以便随着您的自由职业业务的增长而扩展,而无需不必要的复杂性。
自由职业者的关键账户: 自由职业账本通常将业务财务与个人财务分开。 例如,您可以使用:
- Assets:Business:Checking – 用于所有客户付款和业务费用的业务银行账户。
- Assets:Business:TaxSavings – 用于预留一部分收入以支付税款的储蓄账户(因为没有雇主为您预扣税款)。
- Income:Client:
Name** – 客户付款的收入账户。您可以为每个主要客户创建子账户(例如,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
; 客户收入 – 发票付款
2025-08-15 * "来自 ACME Corp 的发票付款"
invoice: "INV-2025-08-15"
Assets:Business:Checking 5000 USD
Income:Client:ACME -5000 USD
; 常规费用 – 例如,企业的软件订阅
2025-08-05 * "GitHub 订阅"
Expenses:Business:Software 15 USD
Assets:Business:Checking - 15 USD
; 承包商费用 – 支付给分包商的帮助
2025-08-20 * "承包商付款 – Jane Doe"
Expenses:Business:Contractors 2000 USD
Assets:Business:Checking -2000 USD
; 税款预扣 – 将资金转移到税款储蓄
2025-08-31 * "预留 Q3 税款"
Assets:Business:TaxSavings 1500 USD
Assets:Business:Checking -1500 USD #tax
让我们分解一下发生了什么:
- 我们在顶部打开必要的账户(带有开始日期)。 这对于 Beancount 来说并不是严格要求的(如果未打开,则在首次使用时创建账户),但声明它们是一个好习惯。
Assets:Business:Checking和Assets:Business:TaxSavings账户将持有 USD 余额; 收入和费用账户可以在 open 指令中不留货币,因为它们将继承交易货币(在本例中为 USD)。 - 来自客户的发票付款: 在 2025-08-15,收入交易记录了客户为发票支付的 5,000 美元。 我们贷记
Income:Client:ACME(收入随着复式记账中的负金额而增加)并借记支票账户。 包含元数据字段invoice: "INV-2025-08-15"以记录发票编号 - 这是可选的,但显示了如何将额外信息附加到交易。 您还可以使用#ACME或#client-ACME标记此交易以进行快速过滤。 如果您有多个客户,您可以使用常规的Income:Clients账户,并依靠此类元数据或收款人字段来区分客户,而不是创建许多子账 户。 - 业务费用(软件): 在 2025-08-05,我们记录了 GitHub 订阅的 15 美元费用(可能用于私有存储库或其他服务)。 过帐转到
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)账户中扣除。 一个常见的陷阱是将此转移视为报告中的费用 - 请记住,它不是费用,而只是预防性的分配。 只有实际支付给 IRS/税务机关的税款才是费用(或者如果您以这种方式跟踪,则减少应计税款负债)。
总结: 自由职业者的 Beancount 账本强调简单性和清晰性。 所有与业务相关的收入和支出都以有条不紊的方式记录。 通过使用有意义的账户名称和偶尔的标签/元数据,您可以轻松地生成每个客户或每个费用类别的报告(例如,每个客户的总收入、今年在承包商上的总支出等)。 此设置是可扩展的 - 您可以随着业务的发展添加新客户或费用类别。 凭借自动导入(以提取银行交易)和项目或发票的自定义标记等功能,Beancount 可以大大减少自由职业者的簿记开销,同时随时提供清晰的财务状况。
小型企业
接下来,考虑一家小型精品电子商务企业 - 例如,一家销售手工制品的在线商店。 这种情况增加了复杂性,例如 库存管理、销售成本 (COGS) 和处理 在线支付处理商。 Beancount 可以通过周到的账户结构和交易记录方法来适应这些情况。 我们将使用这样一种情况,即企业跟踪库存中的产品,记录通过在线平台(如使用 Stripe 进行付款的 Shopify)进行的销售,并记录典型的业务费用。
精品电子商务企业的关键账户: 除了基本的银行和费用账户外,零售企业账本还将包括跟踪库存和销售流程的账户:
- Assets:Bank:Checking – 企业的支票账户(用于支付给供应商、运营费用以及接收来自支付处理商的转账)。
- Assets:Stripe:Balance (或 Assets:PayPal 等)– 用于通过在线支付收取的尚未进入银行的资金的清算账户。 例如,当客户通过 Stripe 付款时,这笔钱可能会在批量存入您的银行之前存放在 Stripe 账户中。
- Assets:Inventory:
Product** – 您的产品的库存账户。 您可以将每个产品(或产品类别)视为 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 – 与 COGS 没有直接关联的一般业务费用,例如营销、网络托管、软件、运输用品等。 这些可以分解为子账户(例如,
Expenses:Marketing、Expenses:WebHosting、Expenses:Shipping)以分析不同的成本中心。 - Liabilities:SalesTax – (可选,如果适用)如果企业需要在销售时收取销售税或增值税,则此负债账户会跟踪已收取但尚未汇给政府的税款。 然后,每次销售都会将税款部分分成此账户。 这确保了收取的税款不计为收入,并且专门用于支付给税务机关。
- Equity:OwnerEquity – (可选)代表所有者的投资和留存收益。 当企业开始时, 所有者提供的任何初始资金都将在此处贷记(如果他们贡献了现金或库存,则借记银行或库存)。 此外,如果所有者提取利润(分配),则可以针对此权益账户进行记录。 这保持了资产负债表的平衡,但对于日常运营,它并不经常发挥作用。
理由: 此设置隔离了商品和资金的流动。 库存购买最初记录在资产负债表上(作为资产),而不是立即作为费用。 只有在您销售产品时,您才会支出其成本(COGS),使收入与相关费用相匹配,以进行正确的利润计算。 来自销售的收入按总销售价格记录,而费用则单独记录,以便您可以同时看到总收入和已支付的费用(从而获得净收入)。 使用像 Assets:Stripe:Balance 这样的清算账户有助于对账存款 - 资金以大额形式从 Stripe 转移到您的银行,您可以记录这些转移而不会感到困惑。 新店主一个常见的陷阱是忽视正确记录库存 - 例如,立即支出所有库存购买。 这对于现金流跟踪可能没问题,但它会歪曲您的利润:在您囤货的月份,您看起来利润会减少,而在您销售的月份,您看起来利润会增加,即使库存是更早购买的。 通过使用库存资产账户和 COGS,您可以使成本与销售保持一致。 另一个陷阱是不考虑费用或退款,这会导致您的银行或 Stripe 余额与您记录的收入不匹配。 我们通过明确记录费用并使用 Stripe 资产账户来跟踪 Stripe 欠款或已支付的款项来避免这种情况。
要突出显示的 Beancount 功能: Beancount 中的库存跟踪利用了其处理商品和成本的能力。 每个产品都可以是一个商品符号(例如,WIDGET),允许您记录数量和单位成本。 当您销售商品时,Beancount 的库存逻辑(默认情况下为 FIFO)可以自动从您的库存批次中选择正确的成 本。 我们将在示例中看到这一点。 您还可以使用元数据或链接将销售额及其相应的 COGS 条目联系起来(例如,在两个交易中使用相同的订单号,或在销售额和库存减少中使用共享标签(如 #order1001),从而可以轻松查询或仔细检查每次销售是否都有匹配的 COGS 条目)。 此外,自动导入可以有所帮助:您可以使用脚本从 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
; 购买库存(50 个 Widget,每个成本 10 美元)
2025-03-10 * "从 SupplierCo 购买 50 个 Widget"
Assets:Inventory:Widgets 50 WIDGET {10 USD}
Assets:Bank:Checking -500 USD
; 销售给客户(订单 #1001 通过在线商店,售出 2 个 Widget)
2025-04-05 * "销售订单 #1001(通过 Shopify 销售 2 个 Widget)"
Assets:Stripe:Balance 58 USD ; 扣除费用后收到的净付款
Expenses:Fees 2 USD ; 处理费 (Stripe)
Income:Sales -60 USD ; 2 个 Widget 的收入(每个 @ 30 美元)
; 上述销售的销售商品成本(2 个 Widget,每个成本 10 美元)
2025-04-05 * "订单 #1001 的 COGS(2 个 Widget)"
Expenses:COGS 20 USD
Assets:Inventory:Widgets -2 WIDGET {10 USD}
以下是逐步发生的事情:
-
打开账户: 我们打开支票账户、Stripe 余额账户、Widget 的库存账户(使用商品
WIDGET声明以跟踪单位)以及核心收入和费用账户(销售额、COGS、费用)。 通过声明Assets:Inventory:Widgets WIDGET,我们发出信号,表明此账户将持有商品“WIDGET”的数量。 这确保 Beancount 知道预期那里的商品单位,我们可以将成本附加到这些单位。 -
库存购买: 在 2025-03-10,我们从供应商处购买了 50 个 Widget 的库存,每个 10 美元,总成本为 500 美元。 交易借记
Assets:Inventory:Widgets,金额为50 WIDGET {10 USD}。 这意味着将 50 个商品 WIDGET(每个的记录成本为 10 美元)添加到库存账户中。 贷方是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 美元的费用,现在我们的 Stripe 账户中有 58 美元(稍后转移到我们的银行)。 我们将这 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 美元。 -
记录销售的 COGS: 同样在 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 美元已转移到 COGS 费用中,该费用将出现在损益表中,从而减少了这些商 品的成本所产生的毛利润。 (如果我们没有记录此项,我们的收入相对于费用将被夸大。) 为了清晰起见,我们使用单独的交易,但也可以将销售额和 COGS 合并为一个多行交易。 有些人更喜欢按所示的方式拆分它们,以便于阅读和对账(您可以清楚地将每个 COGS 条目与一个订单联系起来)。 我们还在叙述中重复了订单号,以便轻松查看此 COGS 条目与订单 #1001 对应。 一个好的做法是确保每次销售都包含库存时都有匹配的 COGS 条目 - 缺少一个条目意味着您的库存计数将不正确。 要避免的一个陷阱是忘记删除销售的库存,这将使您的资产负债表上出现虚幻的库存,并且您的费用被低估。 使用 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:
Broker** – 投资账户,例如经纪账户、退休 401(k)/IRA 等。 这些可能会进一步按投资类型分解,或者只是将每个机构的投资账户归为一类。 例如,Assets:Investments:VanguardIRA或Assets:Investments:Robinhood。 跟踪投资还可能涉及股票或基金的商品,但如果过于详细,您可以简单地跟踪捐款和账户余额。 - Liabilities:CreditCard:
Name** – 每个信用卡一个账户(例如,Liabilities:CreditCard:Visa或按银行名称)。 在卡上的所有购买都记录在此处(具有相等的费用),并且向卡的付款是减少此负债的转账。 - Liabilities:Loan:
Name** – 任何贷款(学生贷款、抵押贷款、汽车贷款)都可以使用负债账户进行跟踪。 您需要记录本金余额,以及每笔支付的利息(费用)和本金(减少负债)。 这是一个高级方面,但对于完整的财务状况很重要。 - 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将合计杂货和外出就餐)。 常见的做法是为主要群体(住房、食品、交通、医疗保健等)建立层次结构。 - 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"(如果跟踪可报销的项目))。 标签和元数据的灵活性意味着您可以使系统适应您的个人跟踪需求,而无需创建数十个额外的账户。
个人理财示例账本代码片段
下面是个人 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
; 每日支出 示例(信用卡上的咖啡)
2025-09-10 * "星巴克咖啡"
Expenses:Food:Coffee 5.50 USD
Liabilities:CreditCard:Visa -5.50 USD #daily
; 每月经常性账单(从支票账户支付的租金)
2025-09-01 * "九月公寓租金"
Expenses:Housing:Rent 1200 USD
Assets:Bank:Checking -1200 USD #recurring
; 退休金缴纳(从支票账户转移到 401k 投资)
2025-09-15 * "401(k) 缴款"
Assets:Investment:401k 500 USD
Assets:Bank:Checking -500 USD #retirement
让我们解释一下这些交易:
- 打开账户: 我们打开支票账户、Visa 信用卡账户、咖啡费用账户(作为食品费用子类别的示例)、租金费用账户和 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 美元所代表的金额(具体取决于您如何跟踪投资,您可能会随后用这些现金购买共同基金单位 - 这将是投资账户中的另一笔交易,例如,以 Y 价格购买 X 股基金,现金从 401k 资产中支出)。 在基本的个人账本中,您可以简单地将 401k 视为储蓄账户,并定期更新其余额或记录此类捐款,并且可能使用价格行情来衡量增长。 重要的是,此交易是一笔转账,而不是费用 - 它是构建您的资产。 许多预算工具会将退休金缴纳计为“费用”(因为它离开了您的支票账户),但从会计角度来看,它只是将钱转移到不同的口袋。 这种区别有助于您了解储蓄率与支出。
如果我们有一笔用于支付信用卡账单的交易,它看起来就像是将资金从支票账户转移到信用卡负债(例如,Liabilities:CreditCard:Visa 100 USD / Assets:Bank:Checking -100 USD)。 这将使信用卡余额恢复下降(如果您全额支付,则可能降至零),并相应地减少您的银行余额,而不会影响费用账户 - 因为您已在购买时记录了费用。 记住以这种方式处理信用卡对于准确的个人理财跟踪至关重要。