跳到主要内容

7 篇博文 含有标签「financial management」

查看所有标签

累计折旧(适用于 Beancount):实用的纯文本指南

· 阅读需 8 分钟
Mike Thrift
Mike Thrift
Marketing Manager

如果你在会计中跟踪固定资产——笔记本电脑、相机、机器,甚至是办公家具——你的账簿需要反映它们价值的下降。这涉及两个关键概念:折旧(费用)和它的累计总额 累计折旧。本指南用通俗的语言解释这两者,并展示如何在 Beancount 中使用可直接复制粘贴的示例进行建模,还包括强大的自动化选项。


2025-08-23-accumulated-depreciation

什么是累计折旧?

累计折旧 是自资产投入使用之日起已记录的折旧总额。可以把它看作一个累计计数。它不是一种新的费用——只是该资产迄今为止所有折旧费用的总和。

在财务报表中,你会看到累计折旧与资产的原始成本并列。这让阅读账簿的人能够同时看到 历史成本(你为其支付的金额)和 净账面价值(账面上当前的价值)。

一个关键细节是,累计折旧是 抵减资产(contra-asset)账户。听起来可能复杂,但概念很简单:

  • 它是一个“资产”账户,位于科目表的 Assets 部分。
  • 但它拥有 贷方 余额(在 Beancount 的资产账户中表现为负值),降低 相关固定资产的账面价值。

它在资产负债表上出现在哪里?

累计折旧通常直接位于其对应的固定资产下方。例如:

设备:电脑$3,000.00
减:累计折旧($1,000.00)
设备:电脑,净额$2,000.00

许多财务报表会简化为单行,如 “物业、厂房及设备,净额”。该数字代表所有资产的历史成本总和减去累计折旧总额,即最终的 净账面价值


如何计算折旧?

折旧的计算方法有多种。你选择的方法决定了每期记录的费用金额,从而影响累计折旧的累计额。常见的两大类方法是:

  • 直线法(SL): 最简单、最常用的记账方法。你在资产使用寿命的每个期间内计提相等的费用。例如,一台价值 3,000、使用寿命为36个月(3年)的笔记本电脑,每月折旧3,000、使用寿命为 36 个月(3 年)的笔记本电脑,每月折旧 83.33。
  • 税法折旧(如美国的 MACRS): 为了税务目的,政府通常规定加速折旧表。美国的 修改后加速成本回收系统(MACRS) 允许在资产使用早期计提更大的折旧。Beancount 完全可以处理这些表——只需根据官方表(如 IRS Publication 946)计算金额并生成相应的分录。

公式(直线法)

期间折旧 = 成本残值使用年限\frac{\text{成本} - \text{残值}}{\text{使用年限}}

累计折旧(截至日期 t) = (截至 t 的期间折旧)\sum (\text{截至 t 的期间折旧})

残值 是资产使用寿命结束时的估计残余价值。为简化起见,通常假设为零。


Beancount 实践:建模成本与累计折旧

为了在 Beancount 中正确跟踪固定资产并保留其原始成本,你需要为每类资产使用一对资产账户,再加一个费用账户。

  • Assets:Equipment:Computers:Cost(保存历史成本)
  • Assets:Equipment:Computers:AccumDep(抵减资产,随时间贷记)
  • Expenses:Depreciation:Computers(记录期间费用)

此结构符合标准会计实践,也是 Beancount 中管理固定资产折旧的推荐方式。


方案 A:手动直线法分录

这是最直接的方式。你可以完全控制每笔分录,便于理解其工作原理。

1. 打开所需账户

2025-01-01 open Assets:Bank:Checking
2025-01-01 open Assets:Equipment:Computers:Cost
2025-01-01 open Assets:Equipment:Computers:AccumDep
2025-01-01 open Expenses:Depreciation:Computers

2. 记录购买(按历史成本)

购买资产时,借记 Cost 账户。

2025-01-20 * "Purchase MacBook Pro"
Assets:Equipment:Computers:Cost 3000.00 USD
Assets:Bank:Checking -3000.00 USD

3. 记录月度折旧

每月记录一次折旧费用。对 3,000资产,36个月的月折旧为3,000 资产,36 个月的月折旧为 3000 ÷ 36 = $83.33。

分录为借记费用账户、贷记抵减资产账户。

2025-02-28 * "Monthly depreciation - MacBook Pro (SL 36mo)"
Expenses:Depreciation:Computers 83.33 USD
Assets:Equipment:Computers:AccumDep -83.33 USD ; 贷记抵减资产

将此分录重复 36 个月。Assets:Equipment:Computers:AccumDep 的余额会随时间变得更负,从而降低资产的净账面价值。

快速检查: 你可以在 Fava 的资产负债表中查看净账面价值,或运行以下查询:

bean-query myledger.bean "SELECT account, SUM(position) WHERE account   'Assets:Equipment:Computers:(Cost|AccumDep)' GROUP BY account"

两个账户的余额之和即为净账面价值。


方案 B:使用 Fava 的 amortize 插件自动化

如果你使用 Fava(Beancount 的流行网页界面),且折旧为固定金额,可通过插件实现自动化。

首先,在 Beancount 文件顶部启用插件:

plugin "fava.plugins.amortize_over"

然后,创建一条定义完整折旧计划的交易。

; 1. 正常记录首次购买
2025-01-20 * "Purchase MacBook Pro"
Assets:Equipment:Computers:Cost 3000.00 USD
Assets:Bank:Checking -3000.00 USD

; 2. 设置折旧计划
2025-01-20 * "Depreciation schedule - MacBook Pro"
amortize_months: 36
Expenses:Depreciation:Computers 3000.00 USD
Assets:Equipment:Computers:AccumDep -3000.00 USD

插件会读取此交易并自动生成 虚拟分录:每月 $83.33,持续 36 个月。虚拟分录不会写入 .bean 文件,但会出现在所有报表中。此方式适用于直线法,但不适用于 MACRS 等不等额的折旧表。


方案 C:使用第三方插件生成实际分录

如果你希望生成真实的、非虚拟的分录,同时保留自动化便利,可使用 beancount-periodic 插件(作者 Dallas Lu)。该插件可根据配置自动创建带日期的分录,兼具手动分录的可审计性与自动化的高效性。


查看结果:成本、累计折旧与净账面价值

无论采用哪种方法,资产负债表都会显示 CostAccumDep 两个账户。两者之和即为 净账面价值。这种“原始成本减累计折旧”的展示方式正是会计师和财务分析师所期望的,能够完整透明地呈现资产的使用年限与当前价值。


资产处置(出售、报废或退役)

资产使用寿命结束时,你可能会出售、报废或退役。要将其从账簿中移除,需要:

  1. 清除历史成本。
  2. 清除累计折旧。
  3. 记录收到的现金。
  4. 记录产生的盈亏(现金收入与净账面价值之差)。

示例:资产出售获利

假设在 2027‑06‑15 出售该 MacBook Pro。

  • 原始成本:$3,000
  • 出售时累计折旧:-$2,500
  • 净账面价值3,0003,000 - 2,500 = $500
  • 出售收入:$800
  • 出售盈余800800 - 500 = $300

Beancount 记账如下:

2027-06-15 * "Sell MacBook Pro"
Assets:Bank:Checking 800.00 USD ; 收到现金
Assets:Equipment:Computers:AccumDep 2500.00 USD ; 借记抵减资产以冲销
Assets:Equipment:Computers:Cost -3000.00 USD ; 贷记原始成本
Income:Gains:AssetDisposals -300.00 USD ; 贷记盈余

如果仅收到 400(亏损400(亏损 100),则将差额记入 Expenses:Losses:AssetDisposals(借方)。


FAQ(快速问答)

  • 累计折旧是资产还是负债?
    两者都不是。它是 抵减资产,位于资产区但为贷方余额,起到降低资产价值的作用。

  • 购买后还能直接记入 Cost 账户吗?
    通常不建议。抵减资产的目的是保留历史成本,所有价值下降应记入 ...:AccumDep

  • 能在 Beancount 中使用 MACRS(税法)折旧表吗?
    可以。先依据 IRS Publication 946 计算每期金额,然后用手动分录或周期插件记录。Fava 的 amortize 插件不适用于不等额的 MACRS 表。

  • Section 179 加速费用怎么办?
    Section 179 允许在投入使用的当年全额费用化。对应的 Beancount 记账就是在购买时直接借记费用账户,而不是固定资产账户。


常见错误及避免方法

  • 直接在 Cost 账户上计提折旧。

    • 解决方案: 始终贷记 ...:AccumDep,保留历史成本。
  • 资产处置时忘记冲销累计折旧。

    • 解决方案: 处置分录必须包含 借记 ...:AccumDep,以清除该资产的累计折旧。
  • 混淆税法折旧与记账折旧。

    • 解决方案: 明确区分税务表(用于报税)和记账表(用于财务报表),分别使用对应的分录。
  • 误用 Fava amortize 插件导致虚拟分录未被审计。

    • 解决方案: 若需审计痕迹,请改用生成真实分录的插件或手动分录。

方案 A 示例代码

2025-01-01 open Assets:Bank:Checking
2025-01-01 open Assets:Equipment:Computers:Cost
2025-01-01 open Assets:Equipment:Computers:AccumDep
2025-01-01 open Expenses:Depreciation:Computers

2025-01-20 * "Purchase MacBook Pro"
Assets:Equipment:Computers:Cost 3000.00 USD
Assets:Bank:Checking -3000.00 USD

2025-02-28 * "Monthly depreciation - MacBook Pro (SL 36mo)"
Expenses:Depreciation:Computers 83.33 USD
Assets:Equipment:Computers:AccumDep -83.33 USD

方案 B 示例代码

plugin "fava.plugins.amortize_over"

2025-01-20 * "Purchase MacBook Pro"
Assets:Equipment:Computers:Cost 3000.00 USD
Assets:Bank:Checking -3000.00 USD

2025-01-20 * "Depreciation schedule - MacBook Pro"
amortize_months: 36
Expenses:Depreciation:Computers 3000.00 USD
Assets:Equipment:Computers:AccumDep -3000.00 USD

方案 C 示例代码

(此处请根据 beancount-periodic 插件的配置自行编写相应的自动化分录。)


资产处置示例代码

2027-06-15 * "Sell MacBook Pro"
Assets:Bank:Checking 800.00 USD
Assets:Equipment:Computers:AccumDep 2500.00 USD
Assets:Equipment:Computers:Cost -3000.00 USD
Income:Gains:AssetDisposals -300.00 USD

参考文献与资源

  • Beancount 官方文档
  • Fava 插件列表
  • IRS Publication 946(美国税法折旧表)
  • Section 179 与 MACRS 相关税务指南

通过本指南,你可以在 Beancount 中实现对固定资产的精确折旧管理,并利用自动化工具提升记账效率。祝你财务管理顺利!

什么是应付账款?Beancount友好指南:以纯文本跟踪供应商账单

· 阅读需 8 分钟
Mike Thrift
Mike Thrift
Marketing Manager

应付账款(AP)是指企业因已收到但尚未付款的商品或服务而欠供应商的款项。在会计体系中,AP 被归类为资产负债表上的流动负债——通常在一年内(常见为 30 到 60 天)到期。

该概念是权责发生制会计的核心,你在收到发票的瞬间就记录费用及相应负债,而不是等到实际付款时才记录。本指南将展示如何使用纯文本会计工具 Beancount,干净且高效地管理整个 AP 工作流。

2025-08-20-what-is-accounts-payable


快速概览

在深入细节之前,先了解关键要点:

  • 应付账款(AP) 代表你对供应商的短期债务。它位于资产负债表的 Liabilities(负债)栏目下。
  • 权责发生制 vs. 现金制:只有在采用 权责发生制 时才会出现 AP。Beancount 完全支持权责发生制工作流,其网页界面 Fava 会正确显示你的负债。
  • AP vs. AR:简单来说:应付账款是你 的,而应收账款(AR)是别人 你的。

AP 在 Beancount(以及 Fava)中的位置

要开始跟踪 AP,首先需要在账本中声明一个对应的账户。常用约定为:

Liabilities:AccountsPayable

你可以为主要供应商创建子账户,例如 Liabilities:AccountsPayable:ForestPaintSupply

在 Fava 中,此账户会出现在资产负债表的 Liabilities 下。点击即可展开,查看所有未结和已结项目,清晰了解你的负债情况。你也可以在 Fava 的 公开示例账本 中看到 Liabilities:AccountsPayable 账户的实际展示。


Beancount 构建块

一个完整的 AP 工作流依赖以下核心功能:

  1. 账户:主要使用 Liabilities:AccountsPayableAssets:Bank:Checking(现金账户)以及各种费用账户(如 Expenses:Supplies)。
  2. 元数据:可以为任意交易附加键值对。AP 常用的元数据包括 invoice:due:terms:document:。Fava 还能识别 document: 键,并在配置了文档文件夹后自动生成可点击的链接。
  3. 标签 & 链接:使用 #tags(如 #ap)便于过滤,使用 ^links(如 ^INV-10455)将账单与后续付款关联,形成清晰、可审计的链路。
  4. 查询(BQL):Beancount 类 SQL 查询语言(BQL)让你可以直接在命令行使用 bean-query,或在 Fava 的 “Query” 页面生成强大的报表,例如按到期日排序的未结应付账款列表。

核心 AP 工作流

管理 AP 包括两到三步:记录账单、付款,有时还需处理部分付款或折扣。

1) 记录供应商账单(创建负债)

当发票到达时,先记费用并生成应付账款。

; 可选:在主 Beancount 文件中设置文档文件夹
option "documents" "documents"

2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
invoice: "INV-10455"
due: "2025-09-04"
terms: "2/10, n/30"
document: "invoices/2025-08-05-forest-paint-INV-10455.pdf"
Expenses:Supplies:Paint 500.00 USD
Liabilities:AccountsPayable -500.00 USD

此条目完成两件关键事:

  1. 立即在 8 月份确认 500 美元费用。
  2. 同时产生 500 美元负债,表明你欠 Forest Paint Supply。

^INV-10455 链接是唯一标识符,稍后在付款时使用相同链接,可将账单与付款逻辑关联。

2) 付款(冲销负债)

付款时创建交易,将资金从银行账户转出并冲销负债。

a) 标准付款(无折扣)

2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -500.00 USD

此条目将 AP 减少 500 美元,同时支出 500 美元的银行余额,负债已清。

b) 提前付款折扣(如 “2/10, n/30”)

若在 10 天内付款,可享 2% 折扣。对 500 美元发票而言,折扣为 10 美元。以下两种记法均可,任选其一并保持一致即可。

; 方式 1:将折扣记为其他收入(冲减费用的效果)
2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -490.00 USD
Income:Discounts:Payables -10.00 USD

; 方式 2:直接冲减原费用
2025-08-12 * "Forest Paint Supply" "Early payment discount INV-10455" ^INV-10455
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -490.00 USD
Expenses:Supplies:Paint -10.00 USD

两种方式均冲销 500 美元负债,银行账户实际支出 490 美元,并记录 10 美元的优惠。

3) 部分付款处理

Beancount 的链接功能让部分付款的追踪简洁明了。

; 发票 1,200 美元
2025-08-10 * "Acme Parts" "INV-9001" ^INV-9001
invoice: "INV-9001"
due: "2025-09-09"
Expenses:Parts 1200.00 USD
Liabilities:AccountsPayable -1200.00 USD

; 第一次付款 400 美元
2025-08-20 * "Acme Parts" "Payment INV-9001 (1/3)" ^INV-9001
Liabilities:AccountsPayable 400.00 USD
Assets:Bank:Checking -400.00 USD

; 最终付款 800 美元
2025-09-05 * "Acme Parts" "Payment INV-9001 (final)" ^INV-9001
Liabilities:AccountsPayable 800.00 USD
Assets:Bank:Checking -800.00 USD

通过在三条交易上使用相同的 ^INV-9001 链接,你可以轻松过滤出该账单的完整历史。


实用查询(BQL)

可在 Fava 的 “Query” 选项卡或命令行 bean-query 中运行。

小贴士any_meta() 函数非常适合把 invoice:document: 等元数据字段拉进查询结果。

按供应商统计未结 AP(余额视图)

SELECT payee, COST(SUM(position)) AS amount
WHERE account "^Liabilities:AccountsPayable"
GROUP BY payee
ORDER BY payee;

按发票 + 到期日列出未结 AP

SELECT payee,
any_meta('invoice') AS invoice,
any_meta('due') AS due,
COST(SUM(position)) AS amount
WHERE account "^Liabilities:AccountsPayable"
GROUP BY payee, invoice, due
ORDER BY due, payee;

列出带 PDF 附件的账单

SELECT date, payee, any_meta('invoice') AS invoice, any_meta('document') AS file
WHERE account "^Liabilities:AccountsPayable"
ORDER BY date DESC;

在 Fava 中查看 AP

  • 资产负债表:进入 Balance SheetLiabilitiesAccountsPayable,即可看到总余额并进一步钻取交易明细。
  • 日记账:使用过滤 account:Liabilities:AccountsPayable 或特定链接 ^INV-xxxx,查看单笔账单的完整生命周期。
  • 文档侧栏:若使用 document: 元数据并配置 option "documents",侧栏会列出所有已关联的文档。

AP 老化、周转率与现金流感知

  • 老化表:将未结发票按逾期天数分组(如 1–30 天、31–60 天、60+ 天)。在 Beancount 中,可运行上面的 “按发票 + 到期日列出未结 AP” 查询,导出 CSV 后在电子表格或小型 Python 脚本中分桶统计。
  • AP 周转率:衡量付款速度的快速健康指标,公式为 供应商采购总额 ÷ 平均应付账款。相关指标 应付账款天数(DPO) 大约为 365 ÷ 周转率
  • 无法按时付款:AP 属于短期债务。如供应商同意更长期的分期付款,应将该债务从 AP 调整为 Notes Payable(票据负债)。
2025-10-01 * "Helix Industries" "Convert overdue AP to 12-month note" ^INV-1110
Liabilities:AccountsPayable 2000.00 USD
Liabilities:NotesPayable -2000.00 USD

纯文本账本中的 AP 最佳实践

  • 无纸化:将发票 PDF 存入 documents 文件夹,并使用 document: 元数据关联。
  • 一致使用链接:在账单和所有关联付款上使用唯一的发票号 ^link,保持逻辑连贯。
  • 保持元数据整洁:统一使用 invoice:due:terms:,提升搜索、查询和财务审查效率。
  • 全程权责发生制:若想获得有价值的 AP 报表,请坚持使用权责发生制。Beancount 与 Fava 能完美支持。

复制粘贴示例:供应商账单 + 付款

; ---- Bill ----
2025-08-05 * "Forest Paint Supply" "Paint order INV-10455" ^INV-10455 #ap
invoice: "INV-10455"
due: "2025-09-04"
document: "invoices/2025-08-05-forest-paint-INV-10455.pdf"
Expenses:Supplies:Paint 500.00 USD
Liabilities:AccountsPayable -500.00 USD

; ---- Payment (no discount) ----
2025-09-01 * "Forest Paint Supply" "Payment INV-10455" ^INV-10455
Liabilities:AccountsPayable 500.00 USD
Assets:Bank:Checking -500.00 USD

本指南仅供学习使用,不构成税务、法律或财务建议。

参考与进一步阅读

会计外包:如何交付你的财务任务(针对 Beancount 用户)

· 阅读需 11 分钟
Mike Thrift
Mike Thrift
Marketing Manager

如果你的账本以纯文本形式保存,你已经在乎清晰、可控和可复现性。外包会计工作并不一定会牺牲这些。相反,若执行得当,它会把你的 Beancount 设置转变为由专业人士运行的可靠、可文档化的工作流——同时你仍然完全拥有数据、仓库以及规则的所有权。

这是一份面向 Beancount 用户的实用指南,内容涵盖哪些工作可以外包、哪些工作应自行保留、如何结构化交付物以及如何评估供应商。目标是将机械性的工作委派出去,却永不放弃控制权。

2025-08-19-会计外包-如何交付你的财务任务


适用人群

如果你符合以下任意一种情况,本指南适合你:

  • 独立创始人、独立开发者和顾问,使用 Beancount 并希望把会计的机械性工作交给他人,以便专注于产品研发或客户服务。
  • 具备财务知识的工程师,需要严格的控制、版本化历史和完整的可审计性,但不想在周末自己导入银行对账单并进行核对。
  • 从一体化供应商迁移的组织,现在更重视数据托管和可复现性。近期诸如 Bench 等会计平台的突发关闭再次提醒我们:退出计划和开放格式不是可选项。(TechCrunchKSV Advisory Report)

Beancount 简介

对于新手来说,Beancount 生态系统由以下核心组件构成,使其在此类工作流中表现强大:

  • Beancount:本质上是一种以纯文本编写的复式记账语言。你编写可读的账本文件,将其提交到 Git 仓库,并使用编译器进行校验和生成财务报表。(GitHub)
  • Fava:Beancount 的优雅网页界面。Fava 读取账本文件,提供交互式资产负债表、损益表、趋势图、过滤器以及类 SQL 查询语言,以便检查数据。(Fava Demo)
  • beangulp:用于自动化数据导入的现代框架。由 Beancount 最初的 importer 演进而来,beangulp 提供编写稳健导入器的工具,能够解析 CSV、OFX、QFX 甚至 PDF 对账单,将原始银行数据转化为结构化的 Beancount 条目。(GitHub)

成功的外包关系应当保留并强化这些优势:版本控制、可读的历史、严格的校验以及工具的可组合性。


外包内容 vs. 自行保留

有效委派的关键在于明确的职责划分。下面阐述战术执行与战略所有权的分界线。

适合外包的任务

这些任务通常重复、基于规则且耗时——非常适合专业人士处理。

  • 对账单收集与导入:下载月度对账单、统一不同文件格式(CSV、OFX、PDF),并运行 beangulp 导入器。包括在金融机构更改对账单格式时维护导入规则。
  • 分类辅助:构建启发式和声明式规则对交易进行分类。可选使用 smart_importer 根据历史数据预测分录,但最终审查始终由人工完成。
  • 核对与完整性检查:使用 balance 断言匹配对账单,调查差异,确保账本无误。
  • 附件与文档整理:获取发票和收据,将其与交易关联并添加元数据,随后在整洁、可复现的目录树中归档源文件。
  • 月末结账与报表:准备标准报表(损益表、资产负债表、现金流量表),并提供 Fava 视图或导出文件供管理层更新使用。
  • 应收/应付及工资准备:准备付款账单、生成发票、催收款项,并为工资文件做预处理,待你最终审阅批准。
  • 税务包准备:年终时生成干净的试算表、支持性明细以及所有 CPA 或税务顾问所需的文件。

自行保留(你拥有意图与风险)

这些职责属于战略层面,定义了业务的财务骨架,必须由你掌控。

  • 科目表设计:账户的结构和命名约定反映了你对业务的认知,这是你的财务地图。
  • 核心会计政策:实体结构、收入确认、资本化政策等决策具有长期的财务和法律影响。
  • 最终批准:所有现金流动(付款、工资发放、重要分录)必须由你最终确认。
  • 战略财务:预测、预算以及定义业务“良好”状态的标准是所有者的根本职责。

Beancount 原生外包工作流

下面展示基于 Git 的结构化协作在实践中的样子。

1) 仓库布局(示例)

仓库是唯一的事实来源。良好的组织结构让流程透明且易于维护。

/ledger
main.beancount # 主账本文件,包含其他文件
accounts/ # 科目表定义
includes/ # 月度或年度交易文件
prices/ # 商品/股票的价格指令
metadata/ # 自定义元数据声明
plugins/ # 自定义 Beancount 插件
documents/ # 银行对账单、收据、发票
/importers # beangulp 导入器 + 规则
config.yaml
bank_x.py
card_y.py
/scripts
import.sh # 导入器编排脚本
close_month.py # 月末校验与报表脚本
/reports
monthly/
year_end/
/ops
runbook.md # 系统运行手册
checklist.md # 程序性检查清单(如月末)
controls.md # 财务控制文档

2) 周循环

常规工作应遵循可预测的节奏,最终交付一个清晰的审阅件。

  1. 导入:供应商拉取对账单并运行 beangulp 导入器,将新交易暂存。
  2. 分类:应用分类规则并使用 smart_importer 建议(如适用),随后进行 人工审查 以纠正歧义。
  3. 核对:添加 balance 断言匹配对账单总额并调查差异。pad 指令应极少使用且必须提供明确解释。
  4. 文档:将相关文档(收据、发票)附加到交易上。
  5. 提交 & 提议:使用描述性提交信息将更改提交,并打开 Pull Request 供你审阅,你可以看到账本中具体的 diff

3) 月末结账(最小可行)

结账是确保准确性并生成可靠报表的关键检查点。

  • 为外币或基于市场的证券更新 price 指令。
  • 检查未结项目:应收、应付、计提、预付费用和贷款。
  • 确认所有 balance 断言通过,且无其他检查失败。
  • 使用标签标记提交(如 2025-08-close),并导出标准报表。
  • 发布 Fava 快照或提供安全的期间 URL。

4) 年终包

全年工作的最终成果是一个整洁、可审计的税务包,供税务顾问使用。内容包括最终试算表、关键科目(如固定资产或存货)的支持明细,以及可直接从 Git 仓库重新生成所有产物的脚本。


安全与访问(不可妥协)

专业工作流必须把安全和数据所有权放在首位。

  • 数据托管优先:你拥有私有 Git 仓库。供应商应从 fork 工作并提交 Pull Request,绝不能只保留唯一的账本副本。
  • 银行访问:尽可能提供只读权限。如需使用聚合服务,请创建隔离凭证并制定明确的撤销流程。
  • 机密与加密:使用 GPG 或 age 对敏感文档进行静态加密。所有服务强制多因素认证,遵循最小权限原则。
  • Fava 访问:你应自行托管 Fava 或本地运行 (fava ledger.beancount),并通过安全隧道或 VPN 共享审阅会话。避免直接暴露至公网。
  • 退出计划:坚持“拔线”手册,包含脚本、配置和文档的托管或托管保证。正如近期事件所示,供应商可能一夜消失,你的财务记录绝不能被锁定。

“好”交付物的样子(每月)

每月结束时,你应收到两类成果:技术制品和业务摘要。

1. 干净的 Pull Request,包含:

  • 本期所有已导入并审查的交易。
  • 任何新建或修改的导入规则的 diff
  • 总结关键假设或手动调整的提交信息。
  • 所有 balance 断言 100% 通过,并附带每个账户已核对的日志。
  • Beancount 文件中指向所有附件的链接,以及缺失文档的报告。
  • 为投资或外币更新的 price 指令。

2. 管理报告包,包含:

  • 标准报表:损益表、资产负债表、现金流量表。
  • 关键指标,如现金流动性、预算与实际差异亮点。
  • 指向预过滤 Fava 视图的直接链接,便于深入交互式分析。

供应商类型(何时适用)

不同供应商适配不同阶段和复杂度。

  • 熟悉 Beancount 的记账员:适合处理核心工作流——持续导入、分类、核对以及月末报告包准备。
  • 精品会计事务所:如果你需要额外的应收/应付、工资协调、多实体合并或税务支持,可考虑此类供应商。
  • 兼职财务总监 / CFO:当你需要战略层面的监督时,他们可帮助设计会计政策、构建财务预测、准备董事会报告并设计内部控制。

合作模式通常为月度固定费用加上根据交付物计费。


评估供应商的技巧

  1. 技术匹配度:确认其熟悉 Beancount、Fava、beangulp 以及相关导入器的实现细节。
  2. 审计痕迹:要求提供完整的变更历史、提交信息和审阅记录。
  3. 安全合规:检查其对机密信息的加密、凭证管理和多因素认证的实践。
  4. 响应速度:在出现差错或紧急需求时,供应商的响应时效至关重要。
  5. 退出机制:确保在合同结束或突发情况下,你能够快速接管全部数据和工作流。

外包流程示例

以下示例展示了从需求定义到交付的完整路径。

  1. 需求定义

    • 列出需要外包的具体任务(如“每月对账单导入”)。
    • 明确交付频率(周/双周/月)。
    • 确定交付格式(Pull Request、附件路径、报表导出位置)。
  2. 供应商筛选

    • 根据关键词搜索或社区推荐,获取候选名单。
    • 要求提供过去使用 Beancount 的案例或代码示例。
    • 进行技术面试,确认其对 balancepadsmart_importer 等概念的理解。
  3. 合同与安全

    • 在合同中写明数据所有权、机密信息加密、只读银行访问以及退出计划。
    • 确认供应商使用的加密工具与你现有的安全体系兼容。
  4. 试点阶段

    • 先外包单月或单科目,评估交付质量、审阅效率和沟通成本。
    • 根据试点结果决定是否扩大外包范围。
  5. 正式上线

    • 将供应商的 fork 合并到主仓库,设定自动化 CI 检查(如 bean-check)。
    • 在每次提交后通过 CI 确认 bean-checkbean-format 等工具通过。
    • 通过 Pull Request 审阅完成后合并,确保所有 balance 断言通过。

常见问题解答

Q1:外包后我还能使用 Fava 吗?
A1:可以。外包仅涉及后端数据处理,你仍然可以随时在本地或自托管的服务器上运行 Fava 查看最新账本。

Q2:如果供应商的仓库出现冲突,我该怎么办?
A2:在 Pull Request 中会显示冲突文件。你可以手动解决冲突后合并,或要求供应商在其 fork 中先完成冲突解决。

Q3:外包会不会导致记账规则不一致?
A3:通过 beangulp 的统一配置文件和声明式科目规则可以确保规则的一致性。所有规则的更改都必须通过 Pull Request 记录。

Q4:如何确保外包后的账本仍然可审计?
A4:保持完整的 Git 提交历史、balance 断言以及所有附件的链接。审计时只需检查对应的提交和附件即可。


开始外包的第一步

  1. 审视当前工作流:列出你每天/每周执行的会计任务。
  2. 划分任务:将可外包的任务标记为 “外包”,其余保持 “自行”。
  3. 准备仓库:确保所有账本、配置和导入规则已提交到私有 Git 仓库,并设置好访问权限。
  4. 寻找供应商:在 Beancount 社区、GitHub 或专业会计平台发布需求,注明你需要熟悉 Beancount 的记账员。
  5. 签订安全协议:在合同中明确数据所有权、加密要求和退出计划。
  6. 启动试点:先外包单月的导入和核对工作,评估交付质量后再逐步扩大范围。

通过上述步骤,你可以在不牺牲透明度、可控性和可复现性的前提下,释放工程资源,专注于业务增长。祝你外包顺利!

Beancount.io 与传统会计软件:哪一款最适合你?

· 阅读需 8 分钟
Mike Thrift
Mike Thrift
Marketing Manager

几十年来,商业会计领域一直由 QuickBooks、Xero 和 FreshBooks 等一系列常见的封闭式、基于 GUI 的系统主导。它们设定了标准,提供易于使用的可视化工作流程,以满足非技术用户的需求。但对于开发人员、高级用户以及任何重视绝对透明度和控制力的人来说,一种截然不同的方法已经出现:Beancount.io。

本文将 Beancount.io 与传统会计软件进行了直接比较。我们将详细分析它们在理念、灵活性、成本和长期可维护性方面的核心差异,以帮助你确定哪个系统真正符合你的需求。

2025-08-08-beancount-io-vs-traditional-accounting-software

1. 理念和工作流程

这两种方法最根本的区别在于其核心理念。

Beancount.io Beancount.io 建立在纯文本会计的理念之上。其核心是,每一笔财务交易都是一个简单文本文件中的条目。这种“会计即代码”的模型优先考虑人类可读、版本可控的记录。你的财务数据以一种永恒的、开放的格式存在,你完全拥有它——它永远不会被供应商锁定。此工作流程专为熟悉代码编辑器、Git 等版本控制系统和命令行工具的用户而设计。

传统软件 传统的会计平台是基于 GUI 和表单驱动的。你可以使用向导、下拉菜单和可视化表单输入数据。这种方法优先考虑即时性和可访问性,使非技术用户可以轻松上手,而无需陡峭的学习曲线。但是,你的数据存储在专有格式或云数据库中,如果你决定迁移到其他服务,通常需要复杂的导出和导入程序。

结论: 如果你优先考虑完全控制、数据所有权、透明度和自动化,那么 Beancount.io 无疑是赢家。如果你需要一个“点击即用”的界面和最小的学习曲线,那么传统软件会感觉更自然。

2. 灵活性与定制化

软件如何适应你的特定需求?

Beancount.io 100% 可编写脚本是 Beancount.io 的超级能力。它与 Python 无缝集成,允许你连接到任何 API,自动从银行馈送中获取数据,根据复杂规则以编程方式标记交易,并生成根据你的确切规范定制的报告。你的扩展和定制能力几乎是无限的,不受任何供应商强加的限制。

传统软件 这些平台提供与 PayPal、Stripe 和各种工资单服务等常用工具的精选集成。虽然方便,但你是在供应商的围墙花园内操作。定制仅限于平台允许的内容,高级报告或自动化通常需要升级到更高级别的计划或购买第三方附加组件。你可以使用他们的 API,但你将始终受其生态系统规则和速率限制的约束。

结论: Beancount.io 为开发人员和技术用户提供了无与伦比的灵活性。传统工具更适合与流行商业应用程序的标准即插即用工作流程。

3. 协作与透明度

你与他人合作和审核记录的方式大相径庭。

Beancount.io Beancount.io 上的协作是通过 Git 管理的。这使得对财务分类账的每次更改都完全透明且可审核。你可以看到谁在何时、为何以及如何进行了更改——就像代码审查工作流程一样。这非常适合已经采用 GitHub 或 GitLab 等工具的分布式团队。此外,没有隐藏的计算;报告中的每个数字都可以追溯到分类帐文件中确切的项目条目,从而确保完全可审核性。

传统软件 协作是通过内置的用户角色和权限来处理的。你可以邀请你的会计师、簿记员或业务合作伙伴通过 Web 界面直接访问账簿。这对于遵循传统财务监督模式的企业非常有效。缺点是某些内部操作,例如税务计算或自动余额调整,可能是难以独立验证逻辑的不透明“黑匣子”。

结论: Beancount.io 非常适合重视粒度可审核性和代码风格协作的团队。传统系统对于实时共享 GUI 访问的会计师来说更友好。

4. 成本和所有权

财务模型和数据所有权的概念截然不同。

Beancount.io 核心 Beancount 软件是开源且免费的。你只需为 Beancount.io 的增值服务付费,其中包括托管、智能自动化和高级功能。没有按席位许可费用,因此你可以扩展团队而不会产生额外费用。最重要的是,零供应商锁定。你的数据是你可以随时随地移动、编辑或存储的文本文件集合。

传统软件 这些服务采用订阅模式,通常按月或按年计费。定价通常根据功能分层,你可能会面临根据组织规模而定的每用户或每公司费用。这会产生依赖性;如果你停止付款,则可能会失去对数据和软件功能的访问权限。这种供应商锁定是一项重大的长期风险。

结论: 从长远来看,Beancount.io 的成本效益要高得多,尤其是对于重视数据主权的技术团队而言。传统软件提供可预测的订阅成本,但会造成长期依赖性。

5. 学习曲线和采用

你能多快上手并运行?

Beancount.io 学习曲线无疑更陡峭。采用此系统需要熟悉基于文本的编辑、理解基本语法以及熟悉 Git 等工具。但是,最初的投资会有回报。一旦掌握,Beancount 就能实现令人难以置信的快速、可重复的工作流程,并提供对你的财务状况更深入、更基础的了解。

传统软件 这些平台专为非技术企业主设计,并提供最小的入门障碍。你可以在几分钟内启动并运行、发送发票和对费用进行分类。也就是说,学习更高级的功能,例如自定义报告构建或设置多实体会计,仍然需要大量时间投入。

结论: 如果你愿意花时间学习一个强大的系统,那么 Beancount.io 是正确的选择。对于需要立竿见影的非技术用户来说,传统软件更容易上手。

并排比较

功能Beancount.io传统会计软件
核心理念会计即代码;纯文本分类账基于 GUI;表单驱动
数据格式开放(纯文本)专有(数据库)
数据所有权100% 用户拥有和可移植供应商控制;潜在的锁定
灵活性无限;使用 Python 完全可编写脚本受限于供应商的生态系统和 API
协作基于 Git;透明的更改历史记录基于角色的用户权限
透明度完全可审核;无隐藏计算某些计算可能不透明
成本模型开源核心;为托管/自动化付费每月/每年订阅(SaaS)
学习曲线对于非技术用户来说更陡峭低;专为快速入门而设计
理想用户开发人员、高级用户、数据分析师中小企业所有者、非技术团队

何时选择 each

最终的决定取决于你团队的技能、优先级和工作流程。

如果你符合以下条件,请选择 Beancount.io:

  • 是开发人员、数据分析师或技术倾向的高级用户。
  • 最重视绝对透明度、控制力和长期数据可移植性。
  • 想要完全自动化你的会计并将其深度集成到你的自定义工作流程中。
  • 习惯于以与源代码相同的严谨性处理你的财务记录。

如果你符合以下条件,请选择传统会计软件:

  • 想要一个快速入门、可视化的界面,无需任何技术设置。
  • 需要提供即时的、会计师友好的访问,只需最少的培训。
  • 更喜欢由供应商处理所有更新和合规性的托管解决方案。
  • 你的集成需求可以通过流行的现成应用程序来满足。

最后的想法

Beancount.io 并不是想成为一个更好的 QuickBooks——它是一种根本不同的思维方式。它代表会计即代码。对于技术专业人员来说,这种转变提供了与 Git 版本控制为软件开发带来的同样的飞跃:完全透明、完美再现性和最终控制。

同时,传统会计软件继续在开箱即用的易用性和为非技术团队提供的现成集成方面胜出。正确的选择不在于哪个总体上“更好”,而在于哪个完美适合你的工作流程、你的优先级以及你对财务数据要求的控制程度。

超越穿透:Beancount 用户 S 型公司税务指南(2025 年)

· 阅读需 7 分钟
Mike Thrift
Mike Thrift
Marketing Manager

你成立 S 型公司是为了保持业务精简和税务效率。 虽然“穿透”的概念听起来很简单,但实际情况涉及工资税、潜在的实体级收费以及各州之间至关重要的差异。

以下是 S 型公司在 2025 年的实际税务运作方式,以及如何在 Beancount 中保持清晰、防审计的记录。

2025-07-26-s-corp-tax-guide-for-beancount-users


哪些项目会被征税(以及在哪里)

S 型公司结构的核心在于其处理利润的方式。它是一个三部分组成的系统:穿透收入、实体级税和工资税。

  • 联邦层面的穿透: S 型公司通常对其普通业务利润不缴纳联邦所得税。 相反,该利润(以及其他税项,如抵免和扣除)通过附表 K-1 流向股东。 股东在其个人纳税申报表上报告此收入,无论他们是否实际从企业中提取现金。 至关重要的是,此 K-1 利润 需缴纳自雇税。
  • 但是……实体级税可能适用: “无公司税”规则并非绝对的。 在特定情况下,S 型公司可能需要直接缴税。 最常见的触发因素是内置收益 (BIG) 税(针对最近的 C 型公司转换)和超额净被动收入税
  • 工资税是真实存在的: 这是对股东-雇员最重要的规则。 如果你在自己的企业工作,你必须在获得任何税收优惠的分配_之前_ 作为 W-2 工资获得合理的报酬。 这些工资与任何其他雇员的工资一样,需缴纳 FICA(社会保障和医疗保险)和预扣所得税。

工资概览(2025 年)工资单

对于任何股东-雇员,你都将运行工资单并提交标准工资税表,包括季度表格 941(用于预扣所得税和 FICA)和年度表格 940(用于联邦失业税或 FUTA)。

2025 年的关键税率如下:

  • 社会保障 (OASDI): 工资基数为 $176,100。 雇员和雇主的税率均为 6.2%,适用于不超过此上限的工资。
  • 医疗保险: 没有工资上限。 雇员和雇主的税率均为 1.45%,适用于所有工资。
  • 附加医疗保险税: 对于雇员一年内超过 $200,000 的工资,将预扣 0.9% 的税。 这部分没有雇主匹配。

你可能会看到的实体级税

虽然不太常见,但你必须了解 S 型公司本身可能需要缴纳的税款。

  • 内置收益 (BIG) 税: 如果你将企业从 C 型公司转换为 S 型公司,则你将面临 5 年的确认期。 如果你在此期间内出售公司在其 C 型公司时期持有的升值资产,则 S 型公司本身将需要对这些收益缴纳公司税率的税款。 这是在表格 1120-S 的附表 D 上计算的。
  • 超额净被动收入税: 如果你的 S 型公司从之前的 C 型公司累积了收益和利润 (AE&P),并且 其被动收入(如租金、特许权使用费和利息)超过其总收入的 25%,则适用此税。
  • 这些税款的季度预估: 如果你预计 BIG 税、被动收入税和某些其他追缴税的总额为 $500 或以上,则 S 型公司必须进行季度预估付款。 2025 年的日历年到期日为 4 月 15 日、6 月 16 日、9 月 15 日和 12 月 15 日

州和地方的陷阱 🗺️

切勿假设联邦规则适用于州或城市层面。 税务处理方式差异很大。

  • 加利福尼亚州: S 型公司每年必须缴纳 $800 的最低特许经营税,外加 1.5% 的净收入税
  • 纽约市: 纽约市不承认 S 型公司选举。 联邦 S 型公司通常需缴纳全额纽约市一般公司税。
  • 可选穿透实体 (PTE) 税: 作为对联邦 $10,000 SALT 扣除上限的变通方法,许多州现在允许 S 型公司选择在实体层面缴纳州所得税。 这些规则复杂且不断变化——在进行 PTE 选举之前,请咨询你的注册会计师

所有者支付的费用

作为股东,你的个人税务情况与 S 型公司的业绩直接相关。

  • 你 1040 表上的 K-1 收入: 你将在你的个人 1040 表上的附表 K-1 上报告穿透给你的收入、损失、扣除额和抵免额。
  • 季度预估税: 由于你的 K-1 收入没有预扣税款,你可能需要使用表格 1040-ES 向 IRS 支付个人季度预估税款,以避免少缴税款的罚款。
  • 合格商业收入 (QBI) 扣除额(第 199A 条): 你的穿透收入可能有资格获得宝贵的合格商业收入 (QBI) 扣除额,最高可达你商业收入的 20%。 在较高的收入水平下,此扣除额可能会受到 S 型公司支付的 W-2 工资金额的限制——这使得你的“合理报酬”数字更加重要。

基本申报和表格

至少,你的年度合规性将包括:

  • 表格 1120-S: S 型公司所得税申报表。
  • 附表 K-1: 针对每个股东。
  • 工资表: 季度 941 表、年度 940 表以及雇员的 W-2/W-3 表。
  • 表格 1099-NEC: 用于向大多数独立承包商支付 $600 或以上的款项。

Beancount:绘制图表,让你永远不会疑惑“钱花到哪里去了?”

清晰的会计科目表对于跟踪这些移动的部分至关重要。

初学者账户

Assets:Bank:Operating
Assets:PrepaidTax:Federal ; 用于 S 型公司级别的预估付款
Expenses:Payroll:Wages
Expenses:Payroll:Employer:SocialSecurity
Expenses:Payroll:Employer:Medicare
Expenses:Payroll:Employer:FUTA
Expenses:Tax:Federal:S-Corp ; 用于 BIG/被动收入税费用
Liabilities:Payroll:Withholding:{Federal,SocialSecurity,Medicare}
Equity:Distributions

交易示例

运行工资单(公司方 + 预扣款)

2025-02-28 * "Payroll - February"
Assets:Bank:Operating -10350.00 USD
Expenses:Payroll:Wages 12500.00 USD
Expenses:Payroll:Employer:SocialSecurity 775.00 USD
Expenses:Payroll:Employer:Medicare 181.25 USD
Liabilities:Payroll:Withholding:Federal -3000.00 USD
Liabilities:Payroll:Withholding:SocialSecurity -775.00 USD
Liabilities:Payroll:Withholding:Medicare -181.25 USD

所有者分配(非工资)

2025-03-10 * "Shareholder distribution"
Assets:Bank:Operating -5000.00 USD
Equity:Distributions 5000.00 USD

公司级预估税(如果适用)

2025-04-15 * "1120-S entity-level estimate (BIG/passive tax)"
Assets:Bank:Operating -1200.00 USD
Assets:PrepaidTax:Federal 1200.00 USD

标记关键申报日期

2026-03-15 note "已电子申报 2025 年 1120-S 表格;已向所有股东提供 K-1 表格。"

健全性检查 (bean-query)

使用查询来确保你的记录是合理的。

年初至今工资与分配的比较(合理薪酬的现实检验)

SELECT account, SUM(position)
WHERE (account ~ "Expenses:Payroll:Wages" OR account ~ "Equity:Distributions")
AND year = 2025
GROUP BY account;

我们是否记录了 K-1 交付?

SELECT date, narration WHERE narration ~ "K-1";

实用技巧(以免 IRS 打电话) ✅

  1. 记录“合理薪酬”。 保留一份简单的备忘录,其中包含你的工作职责、时间分配以及市场薪资数据的链接。 通过正式的 W-2 工资单支付此金额。
  2. 清晰地分开工资和分配。 切勿将它们混淆。 你的 Beancount 账本应使这种区别显而易见。
  3. 注意州规则。 注意最低税(如加州)或 S 型公司不认可(如纽约市)。
  4. 重新审视预估。 如果你的收入在年中发生重大变化,请调整你的个人 1040-ES 和任何 S 型公司级别的预估付款。

本指南提供一般信息,并非税务建议。 每种业务情况都不同。 请始终咨询合格的注册会计师,以获取针对你具体情况的指导。

使用 Beancount 为 Etsy 卖家进行簿记的基础知识

· 阅读需 7 分钟
Mike Thrift
Mike Thrift
Marketing Manager

手工缝制的账本胜过杂乱无章的电子表格——尤其是在每一分钱都很重要的时候。

对于 Etsy 上的艺术家、制造商和策展人来说,热情驱动着业务。但随着商店的发展,财务清晰度变得与创意愿景同等重要。兼顾费用、跟踪材料成本和准备税务可能会让人不知所措,让你无法专注于工作。

2024-07-16-bookkeeping-basics-for-etsy-sellers-with-beancount

如果你能以对待产品一样的细致和精准来管理商店的财务状况会怎样?本指南介绍了使用 Beancount 的纯文本会计工作流程,Beancount 是一款为准确性和控制力而设计的开源引擎。这种方法可以帮助你掌握数字,从而专注于你的工艺。

为什么 Etsy 簿记有所不同

Etsy 商店具有独特的财务特征,其复杂性是通用会计软件通常无法捕捉到的。

  • 无处不在的市场费用: 你的最终付款是在 Etsy 收取其份额后剩下的金额。上架费、交易费、支付处理费和广告费都会蚕食每一笔销售额。如果不单独跟踪它们,你就无法知道你的真实利润率。
  • 平台控制的销售税: 对于卖家来说,这是一个巨大的胜利,Etsy 现在会在大多数州自动计算、收取和代缴销售税。但是,如果你在其他渠道销售或在某些州有实体店,由于“关联”规则,你可能仍然有自己的销售税义务。
  • 灵活的付款节奏: 根据你的设置和账户历史记录,Etsy 可以每天、每周、每两周或每月存入你的资金。这种灵活性会使现金流感觉难以预测,尤其是在资金被保留或延迟的情况下。(Etsy 帮助)
  • 更低的 1099-K 门槛: 逃税的日子已经过去了。用于报告你总销售额的 1099-K 表格的 IRS 报告门槛在 2024 年设定为 5,000 美元,并计划到 2026 年降至 600 美元。这意味着几乎每家商店都会收到 IRS 表格,并且你的账簿必须能够与其完全一致。(IRS)

七个快速步骤中的 Beancount 蓝图

此纯文本蓝图将帮助你构建清晰、准确且无压力的簿记系统。

1. 预先分离渠道

如果 Etsy 不是你唯一的销售渠道,请为每个渠道创建单独的收入和支出账户。在你的科目表顶层进行这种简单的分离可以保持你的分析清晰,并使税务时间更加轻松。

2025-07-22 open Income:Etsy               USD
2025-07-22 open Expenses:Etsy:ListingFee USD
2025-07-22 open Assets:Etsy:Payout USD

2. 分解每次付款

切勿将 Etsy 存款记录为单行收入。相反,请从你的商店管理器下载每月的付款账户 CSV。使用此报告创建一个 Beancount 交易,将每次存款“分解”为其总销售额和各个费用组成部分。

; 来自 Etsy 付款账户 CSV 的每周付款
2025-07-15 * "Etsy 存款 #2025-28"
Assets:Bank:Operating 1842.77 USD
Income:Etsy:Sales -2100.00 USD
Expenses:Etsy:TransactionFee 136.50 USD ; 6.5 %
Expenses:Etsy:PaymentProcessing 66.00 USD ; 3 % + 每笔订单 $0.25
Expenses:Etsy:ListingFee 14.00 USD ; $0.20 x 70 次续订
Assets:Etsy:Reserve -75.73 USD

3. 使用批次跟踪库存和销货成本

对于实物商品的卖家,Beancount 的“批次”功能是跟踪销货成本 (COGS) 的游戏规则改变者。当你购买原材料时,你将它们记录为特定成本的库存。当你销售成品时,你可以将所用材料的确切成本记为支出。

; 批量购买库存材料
2025-07-01 * "批量购买纱线 | 供应商 XYZ"
Assets:Inventory:ScarfBlue 500 ScarfBlue {@ 3.45 USD}
Assets:Bank:Operating

; 记录商品售出时的销货成本
2025-07-20 * "售出蓝色围巾 | 订单 #1234"
Expenses:COGS 1 ScarfBlue {3.45 USD}
Assets:Inventory:ScarfBlue

4. 尽早选择你的会计方法

你有两个主要选择:

  • 现金收付制: 简单易行。你在收到款项时记录收入,在付款时记录支出。这适用于小型、爱好规模的商店。
  • 权责发生制: 提供更真实的盈利情况。你在进行销售时(而不是在收到付款时)记录收入,并在发生费用时记录费用。这更适合批量购买用品或销售定制商品的商店。

5. 自动导入

通过自动化数据输入来节省时间。纯文本生态系统提供多种选择:

  • 使用带有自定义规则的 bean-extract 来解析 Etsy CSV 文件。
  • 配置银行 CSV 导入器以捕获通过信用卡支付的广告费用或运费标签。
  • 对于高级用户,编写 Python 脚本以直接从 Etsy API 获取报告。

6. 每周对账

每周留出几分钟时间来检查你的数字。使用 Beancount 的命令行工具快速验证你的余额,并在月底前发现任何问题,例如释放储备金、退款或费用调整。

# 检查你的 Etsy 持有账户的余额
bean-balance books.bean "Assets:Etsy:Payout" "2025-07-21"

# 生成上一期间的损益表
bean-report books.bean income_statement -e 2025-07-21

7. 附加源文档

通过直接在你的交易元数据中链接到源文档来创建完全独立且可审计的记录。这非常适合供应商收据、运费标签 PDF 或采购订单。

2025-07-12 * "Etsy 订单 #4321 的运费标签"
Expenses:ShippingLabel 4.25 USD
Assets:Bank:Operating
document: "docs/labels/2025-07-12-order4321.pdf"

了解你的 Etsy 费用(美国)

要获得你的利润的真实情况,请在各自的费用账户中跟踪每种费用类型:

  • 上架费: 每件商品 0.20 美元,每 4 个月或售出后自动续订。(Etsy)
  • 交易费: 订单总金额(包括商品价格、运费和礼品包装)的 6.5%。(Etsy)
  • 支付处理费: 因国家/地区而异,但对于美国,通常是通过 Etsy Payments 处理的每笔订单 3% + 0.25 美元。(Etsy 帮助)
  • 订阅(Etsy Plus): 可选的每月 10 美元,用于其他工具。

销售税和合规性提示

  • 虽然 Etsy 会为大多数美国州代缴销售税,但请注意,在其他平台上销售或拥有实体工作室可能会产生额外的税务义务(“关联”)。仔细跟踪你的销售额门槛。
  • 一旦 1099-K 门槛适用于你的商店,请确保你在 Beancount 中的 Income:Etsy:Sales 总额与表格上的总金额精确到美分。(IRS)

常见陷阱(和修复方法)

  • 陷阱: 净存款会计。
    • 修复: 始终使用付款 CSV 将存款分解为总销售额、费用和储备金。
  • 陷阱: 过时的库存成本。
    • 修复: 在购买供应品和材料时立即将其记录为库存。不要等到成品售出后再记录。
  • 陷阱: 退款盲点。
    • 修复: 发出退款时,记录费用并冲销原始销货成本条目,将成本移回你的库存账户。
  • 陷阱: 忽略储备金持有。
    • 修复: 开设一个 Assets:Etsy:Reserve 账户来跟踪 Etsy 持有的资金。这可以使你的现金流量表保持诚实。

快速入门清单

  • 在你的商店管理器中,设置月报表并下载你的第一个 CSV。
  • 克隆 Beancount 入门存储库并草拟你商店的科目表。
  • 决定使用现金制还是权责发生制会计,并坚持下去。
  • 编写一个基本的导入器脚本或规则文件,并安排每周同步。
  • 每周一核对你的付款、库存水平和银行余额。
  • 每月生成一份损益表,并查看你的毛利率趋势。
  • 使用 Git 和异地存储解决方案备份你的 .bean 文件。

准备好将簿记融入你的创意工作流程了吗? 安装 Beancount,提交你的第一个条目,让纯文本的清晰度为你在工作台上腾出更多时间。祝你记账愉快!

使用 Beancount 制作和追踪发票

· 阅读需 6 分钟
Mike Thrift
Mike Thrift
Marketing Manager

一个纯文本模板、一个可重复的工作流程和一个简单的查询,即可解答“还有谁欠我钱?”


2022-02-12-crafting-tracking-invoices-with-beancount

开票工作有时感觉像是一件苦差事,卡在你已完成的工作和你正在等待的付款之间。 但是,良好的开票流程是健康现金流的支柱。 它具有双重作用:清晰地告知你的客户他们欠款多少以及何时付款,并为你的会计系统提供其所需的可靠事实。

虽然专用的 SaaS 应用程序可以发送流畅的自动化 PDF 文件,但它们通常需要按月付费,并将你的数据锁定在专有孤岛中。 使用 Beancount 的轻量级纯文本方法提供了一个强大的替代方案。 你可以将每张发票转换为一组清晰的会计分录,从而获得版本控制、强大的元数据和即时查询的所有好处,而无需订阅。


最小可行发票(你永远不应该跳过的字段)

在接触你的账本之前,你需要一张专业的发票。 格式可以很简单,但内容必须精确。 这些借鉴久经考验的小企业实践的字段是不可协商的。

  • 卖方详细信息: 你的公司名称和实际地址。
  • 客户详细信息: 你的客户的名称和(理想情况下)他们的地址。
  • 发票编号: 一个唯一的、连续的 ID,永不重复使用。 INV-045 紧随 INV-044 之后。
  • 开票日期和到期日期: 清楚地说明发票的开具日期和预期付款日期。
  • 项目明细: 对服务或产品的清晰描述,以及数量、单价和项目总计。
  • 小计、税金和总计: 显示计算过程,以便客户可以轻松理解。
  • 可选注释: 用于感谢、汇款指示或客户提供的采购订单号。

为了帮助你入门,我们创建了一组可立即编辑的模板,其中包含所有这些字段。 电子表格版本甚至会为你预先计算总计。

Note: Invoice templates are coming soon! In the meantime, you can create your own using the fields listed above in Google Docs, Word, Sheets, Excel, or any other document format.


在你的账本中记录发票

将发票 PDF 发送给客户后,你必须将其记录在 Beancount 中。 这是一个至关重要的步骤,它在收入产生时确认收入,而不仅仅是在收到付款时。 该过程涉及两个不同的交易。

1. 开具发票时:

你创建一个交易,将总金额从你的 Income 账户转移到 Assets:AccountsReceivable。 这会在你的账簿中创建一个数字借据。

; 2025‑07‑21 发票 #045  为 Acme Corp. 进行的网页设计冲刺
2025-07-21 * "Acme Corp" "INV-045 网页设计冲刺"
Assets:AccountsReceivable 3500.00 USD ; due:2025-08-04
Income:Design:Web
invoice_id: "INV-045"
contact_email: "[email protected]"
link: "docs/invoices/2025-07-21_Acme_INV-045.pdf"

在这里,你借记 AccountsReceivable 并贷记你的 Income 账户。 请注意丰富的元数据:到期日期、唯一的 invoice_id,甚至直接指向你发送的 PDF 的 link:

2. 客户付款时:

当现金存入你的银行账户时,你记录第二个交易以“结清”借据。 这会将余额从 AccountsReceivable 转移到你的支票账户。

2025-08-01 * "Acme Corp" "INV-045 付款"
Assets:Bank:Checking 3500.00 USD
Assets:AccountsReceivable
invoice_id: "INV-045"

Assets:AccountsReceivableINV-045 的余额现在为零,你的账簿完全平衡。

附加 PDF: link: 元数据键与 Fava(Beancount 的 Web 界面)一起使用时尤其强大。 Fava 将直接在交易视图中呈现可点击的链接,因此只需点击一下即可访问源文档。 此工作流程早在 2016 年就在一项功能请求中设想 (GitHub)。


一个查询即可列出所有未结发票

那么,还有谁欠你钱? 使用此系统,你无需在电子邮件或电子表格中查找。 你只需要一个简单的查询。

将以下内容保存为名为 open-invoices.sql 的文件:

SELECT
meta('invoice_id') AS id,
payee,
narration,
date,
number(balance) AS outstanding
WHERE
account = "Assets:AccountsReceivable"
AND balance != 0
ORDER BY
date;

现在,从你的命令行运行它:

bean-query books.beancount open-invoices.sql

几秒钟内,你将获得一份清晰的、最新的所有未结发票的账龄报告,其中显示发票 ID、客户、开票日期和欠款金额。 无需额外的软件。


自动化繁琐的工作

纯文本的优点在于可编写脚本。 你可以自动化此工作流程中繁琐的部分。

  • 模板 + Pandoc = PDF: 以 Markdown 格式维护你的发票模板。 一个小型 Python 脚本可以填充变量(客户名称、项目明细、发票编号),命令行工具 Pandoc 可以立即将其转换为专业的 PDF。
  • Git 预提交钩子: 如果你将账本存储在 Git 中,一个简单的预提交钩子可以在你保存工作之前运行检查。 它可以验证每个新的 invoice_id 是否唯一,交易过账是否平衡为零,以及 link: 元数据中引用的文件是否实际存在。
  • Cron 作业: 设置计划任务(cron 作业)以每晚运行你的 open-invoices.sql 查询并通过电子邮件向你发送摘要。 你将每天开始工作时确切地知道谁需要友好的提醒。

现实的警告

Beancount 是一个会计工具,而不是开票_服务_。 它不会自动向你的客户发送付款提醒或处理他们的信用卡付款。 工作流程是:你使用你选择的方法(例如上面的模板)创建并发送发票,然后在你的账本中记录会计分录。

对于大多数自由职业者和小商店来说,这个手动步骤对于一个完全拥有和控制的、防弹的、可审计的免费会计系统来说是一个很小的代价 (beancount.io)。


后续步骤

准备好控制你的开票了吗? 以下是开始的方法。

  1. 下载模板并使用它创建你的下一个真实发票,确保使用连续的发票编号。
  2. 将你发送的 PDF存储在专用文件夹中,例如 docs/invoices/,并在你的 Beancount 交易中使用 link: 元数据键来引用它们。
  3. 保存 open-invoices.sql 查询并将其作为你每周财务审查的一部分运行。

纯文本会计并不意味着放弃完善或控制——它只是意味着数据库是可 grep 的。 使用简单的模板和上面的代码片段,你将更快地获得付款_并且_保持你的账簿整洁。