跳到主要内容

7 篇博文 含有标签「accounting」

查看所有标签

Beancount 的技术优势:与 Ledger、hledger 和 GnuCash 的性能、Python API 和数据完整性深度对比

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

选择个人会计系统需要在性能、数据架构和可扩展性之间进行权衡。对于工程师和其他技术用户来说,选择通常取决于哪个系统提供最健壮、可预测和可编程的基础。

根据一份详细的比较报告,让我们分析 Beancount 与其流行的开源替代方案 Ledger-CLI、hledger 和 GnuCash 的技术细节。

2025-07-22-beancounts-technical-edge-a-deep-dive-on-performance-python-api-and-data-integrity-vs-ledger-hledger-and-gnucash


速度和性能:量化基准 🚀

对于任何严肃的数据集,性能都是不可协商的。 Beancount 的架构可以处理数十年的交易数据,而不会影响速度。尽管是用 Python(v2)实现的,但其高度优化的解析器效率非常高。

  • Beancount: 实际使用表明,它可以在 大约 2 秒内加载和处理包含 数十万笔交易的账本。内存使用量适中;解析约 10 万笔交易只需使用几十兆字节的 RAM,即可将源文本转换为内存中的对象。
  • 100 万笔交易压力测试: 使用包含 100 万笔交易、1,000 个账户和 100 万个价格条目的合成账本进行的基准测试揭示了显著的架构差异:
    • hledger(Haskell):约 80.2 秒内成功完成完整解析和报告,处理速度约为 12,465 笔交易/秒,同时使用约 2.58 GB 的 RAM。
    • Ledger-CLI(C++): 该进程在 40 分钟后终止,但未完成,这可能是由于已知的回归导致在处理高度复杂的账本时内存和 CPU 使用过多。
    • Beancount: 虽然未包含在该特定 100 万笔交易测试中,但其性能曲线表明它可以有效地处理该任务。此外,即将推出的采用全新 C++ 核心和 Python API 的 Beancount v3 预计将在吞吐量方面带来另一个数量级的提升。
  • GnuCash(C/Scheme): 作为将整个数据集加载到内存中的 GUI 应用程序,其性能会随着大小的增加而明显下降。打开一个约 50 MB 的 XML 文件(代表 10 万多笔交易)需要 77 秒。切换到 SQLite 后端仅略微将其缩短至 约 55 秒

结论: Beancount 提供了可预测扩展的卓越性能,这是长期数据管理的关键特性。它避免了 Ledger 中出现的性能瓶颈和 GnuCash 的 UI 绑定延迟。


数据架构:纯文本与不透明数据库 📄

系统存储数据的方式决定了其透明度、可移植性和持久性。Beancount 使用简洁易懂的纯文本格式,这对技术用户来说更胜一筹。

  • 紧凑高效: 一个包含 10 万笔交易的 Beancount 文件只有 约 8.8 MB。这比同等的 Ledger 文件(约 10 MB)更紧凑,部分原因是 Beancount 的语法允许推断交易中的最终余额,从而减少冗余。
  • 结构强制执行: Beancount 要求使用显式的 YYYY-MM-DD open Account 指令。这种规范的方法可以防止账户名称拼写错误导致静默创建新的错误账户——这是 Ledger 和 hledger 等系统中常见的陷阱,这些系统会动态创建账户。这种结构使数据更可靠,便于程序化操作。
  • 版本控制就绪: 纯文本账本非常适合使用 Git 进行版本控制。你可以获得所做的每个财务更改的完整、可审计的历史记录。
  • 与 GnuCash 的对比: GnuCash 默认使用 gzip 压缩的 XML 文件,其中数据冗长,并且每个实体都用带有 GUID 的标签进行包装。虽然它提供 SQLite、MySQL 和 PostgreSQL 后端,但这将数据从简单的直接文本操作和版本控制中抽象出来。编辑原始 XML 是可行的,但比编辑 Beancount 文件要麻烦得多。

结论: Beancount 的数据格式不仅仅是文本;它是一种定义良好的语言,可最大限度地提高清晰度,强制执行正确性,并与 gitgrep 等开发者工具无缝集成。


杀手级特性:真正的 Python API 和插件架构 🐍

这是 Beancount 的决定性技术优势。它不是一个单一的应用程序,而是一个 具有稳定、一流 Python API 的库。这种设计决策释放了无限的自动化和集成可能性。

  • 直接程序化访问: 你可以直接在 Python 中读取、查询和操作账本数据。这就是开发者迁移的原因。正如一位用户指出的那样,Beancount 消除了尝试对 Ledger 记录不足的内部绑定进行脚本编写带来的挫败感。
  • 插件管道: Beancount 的加载器允许你将自定义 Python 函数直接插入处理管道。这使得在加载数据流时可以对其进行任意转换和验证——例如,编写一个插件来强制要求来自特定供应商的每笔支出都必须具有特定标签。
  • 强大的导入器框架: 超越笨拙的 CSV 导入向导。使用 Beancount,你可以编写 Python 脚本来从任何来源(OFX、QFX、CSV)解析财务报表。像 smart_importer 这样的社区工具甚至利用机器学习模型来自动预测和分配过账账户,将数小时的手动分类变成只需几秒钟、一个命令的过程。
  • 其他工具的比较:
    • Ledger/hledger: 可扩展性主要体现在外部。你可以将数据传入/传出可执行文件。虽然它们可以输出 JSON/CSV,但如果不修改 C++/Haskell 源代码,你就无法将逻辑注入其核心处理循环。
    • GnuCash: 可扩展性是通过 Guile (Scheme) 的陡峭学习曲线来处理自定义报告,或者通过与 GnuCash 引擎交互的 Python 绑定(使用 SWIG 和 PieCash 等库)来处理。它很强大,但不如 Beancount 的原生库方法直接和“Pythonic”。

结论: Beancount 是为程序员设计的。其库优先的设计和与 Python 的深度集成使其成为四个系统中最灵活、自动化程度最高的系统。


理念:财务的严格编译器 🤓

Beancount 的学习曲线是其核心理念的直接结果:你的财务数据是一种正式的语言,它必须是正确的。

Beancount 的解析器就像一个 严格的编译器。它执行强大的语法和逻辑验证。如果交易不平衡或账户尚未打开,它将拒绝处理文件,并返回带有行号的描述性错误。这是一个特性,而不是错误。它保证如果你的文件“编译”成功,则底层数据在结构上是合理的。

这种确定性方法确保了数据完整性,这对于在其之上构建可靠的自动化系统至关重要。你可以放心地编写使用 Beancount 输出的脚本,因为你知道数据已经过严格验证。

Beancount 适合谁?

根据此技术分析,Beancount 是以下用户的最佳选择:

  • 开发人员和工程师, 他们希望将财务视为版本控制的、可编程的数据集。
  • 数据爱好者, 他们希望编写自定义查询,使用 Fava 等工具构建独特的可视化效果,或将财务数据馈送到其他分析模型中。
  • 任何重视可证明的正确性和自动化胜过 GUI 的便利性或结构化程度较低的格式的宽松性的人。

如果你需要原始 C++ 性能来生成标准报告,Ledger 是一个竞争者。对于函数式编程范例中的出色可扩展性,hledger 令人印象深刻。对于设置最少的全功能 GUI,GnuCash 表现出色。

但是,如果你想构建一个真正健壮、自动化且高度定制的财务管理系统,Beancount 提供了卓越的技术基础。

几分钟内IRS就绪:纯文本记账如何让Beancount的税务审计变得轻松无痛

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

想象一下:你收到了一份IRS审计通知。你没有惊慌失措,而是冷静地运行一个简单的命令,生成了一份完整、条理清晰的财务轨迹。当大多数小型企业主花费数周时间为税务审计收集文件时,Beancount 用户可以在几分钟内生成全面的报告。

纯文本记账将财务记录从杂乱无章转变为精简、自动化的流程。通过像管理代码一样管理你的财务,你可以创建一份不可变、版本控制的记录,随时为审计做好准备。

2025-05-15-automating-irs-audit-preparation-with-plain-text-accounting-a-beancount-guide

财务记录混乱的隐性成本

传统的记录保存方式常常导致财务数据分散在电子表格、电子邮件和文件柜中。在审计期间,这种碎片化会造成巨大的压力和低效率。一家科技初创公司就曾为此付出沉重代价——他们混合的数字和纸质记录在审计过程中导致了不一致,最终导致了长时间的调查和巨额罚款。

除了显而易见的时间浪费,混乱还会带来微妙的风险。文件缺失、数据录入错误和合规漏洞可能引发罚款或延长审计持续时间。小型企业每年因可避免的税务错误平均面临 30,000 美元的罚款。

使用 Beancount 构建审计无忧的财务系统

Beancount 的纯文本基础提供了一些独特之处:完全透明。每笔交易都以可读格式存储,既人性化又可机器验证。该系统采用复式记账,每笔交易记录两次,确保数学准确性并创建牢不可破的审计追踪。

Beancount 的开源性质意味着它可以随着税法的演变而适应。用户可以根据特定的监管要求自定义系统,或将其与现有财务工具集成。随着合规要求变得越来越复杂,这种灵活性被证明是无价的。

使用 Python 自动化审计追踪生成

Beancount 用户无需手动编译报告,而是可以编写 Python 脚本,即时生成与 IRS 兼容的文档。这些脚本可以筛选交易、计算应税收入,并根据特定的审计要求组织数据。

一位开发者将他们第一次使用 Beancount 进行审计的经历描述为“出乎意料的愉快”。他们自动生成的账本以其清晰度和完整性给 IRS 检查员留下了深刻印象。该系统能够追踪修改并维护完整的交易历史,这意味着你始终可以解释何时以及为何进行了更改。

超越基本合规:高级功能

Beancount 在处理多币种交易和国际税务要求等复杂场景方面表现出色。其可编程性允许用户为特定的税务情况或监管框架创建自定义报告。

该系统可以与 AI 工具集成,帮助预测税务负债并在潜在合规问题发生之前进行标记。根据我们的亲身经验,自动化税务报告可显著节省时间。

使用版本控制让你的财务面向未来

版本控制将财务记录从周期性快照转变为连续、可追溯的历史。每次更改都会被记录下来,从而创建财务活动的不可变时间线。这种精细追踪有助于快速解决差异并展示一致的记录保存实践。

根据我们的亲身经验,采用持续审计就绪状态可以减轻审计期间的压力,并减少花在合规任务上的时间。该系统就像一台财务时间机器,让你能够以完美的清晰度检查财务历史中的任何时间点。

结论

使用 Beancount 进行纯文本记账将税务审计从焦虑的来源转变为一个简单的过程。通过结合不可变记录、自动化报告和版本控制,你可以创建一个始终审计就绪的财务系统。

真正的价值不仅仅在于通过审计——它在于为财务清晰度和信心奠定基础。无论你是小型企业主还是财务专业人士,Beancount 都为你提供了实现无压力税务合规和更好财务管理的途径。

十个簿记技巧,助您提升 Beancount 工作流程

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

平静、平衡的账本是您业务的良药。以下技巧将最新的小型企业指南浓缩为 Beancount 友好的例行程序。

维护一套原始的账簿不仅仅是为了度过报税季;它更是为了实时了解您企业的财务健康状况。对于像 Beancount 这样的纯文本会计系统的用户来说,良好的习惯是将简单的账本转化为强大的洞察力和增长工具的引擎。以下十个技巧旨在完善您的流程,节省您的时间,并保持您的财务数据干净、可审计且随时可用。

2024-09-12-bookkeeping-basics-for-therapists-with-beancount

1. 区分企业和个人资金

这是商业财务的黄金法则,自有其道理。为您的业务维护一个专用的支票账户和信用卡,是在您的企业和个人生活之间划清界限的最清晰的方式。它极大地简化了税务准备工作,提供了清晰的审计线索,并有助于保护您的个人资产免受企业负债的影响。在 Beancount 中,这意味着您的交易从一开始就进行了清晰的分类——无需再费力回忆咖啡购买是客户会议还是个人支出。

2. 尽早选择现金制或权责发生制,然后坚持下去

您的会计方法决定了您记录收入和支出的时间。美国国税局允许大多数小型企业在现金制或权责发生制之间进行选择。

  • 现金制: 您在资金到账时记录收入,在资金支出时记录支出。它简单易行,非常适合交易直接、即时的小型企业。
  • 权责发生制: 您在赚取收入时(例如,当您提供服务时)记录收入,在发生支出时记录支出,而不管现金何时易手。这提供了更准确的盈利情况,尤其是在您管理具有延迟付款的发票或保险索赔时。

关键是尽早选择一种方法并始终如一地应用它。您甚至可以使用 Beancount 的 options 块在账本中声明您的选择,以正式确定该决定。

3. 定期对账

对账是将您的 Beancount 账本中的交易与您的官方银行和信用卡对账单进行匹配的过程。定期执行此检查(无论是每周还是每月)是一个至关重要的习惯。它使您可以及时发现银行费用、潜在的欺诈行为以及任何数据导入错误,防止它们累积成重大问题。一个简单的命令可以显示您要与对账单核对的余额。

bean-balance books.bean "Assets:Bank" -e 2025-07-31

4. 尽可能自动化导入

您的时间最好花在服务客户上,而不是手动输入交易数据。Beancount 的生态系统在这里大放异彩。使用 bean-extract 等工具创建配置,从您的银行、支付处理器(如 Stripe 或 Square)或 EHR 系统读取 CSV 文件。设置完成后,这些脚本可以自动将原始数据转换为格式化的 Beancount 条目,从而显著减少拼写错误并节省数小时的管理工作。

5. 立即分类,而不是在报税时

拖延分类会导致压力和不准确。当交易进入您的账本时,立即将其分配到正确的账户(例如,Income:Therapy:SelfPayExpenses:Software:EHRExpenses:CEU)。实时执行此操作可确保您正确记住每笔支出的上下文。定义明确的会计科目表使此过程快速且一致,将您的账本变成一份丰富的实时业务运营报告。

6. 保存每张收据和 EOB 的数字副本

纸质收据会褪色和丢失。数字优先的方法更具弹性和效率。将纸质收据扫描或将 PDF 发票和福利说明 (EOB) 保存到您计算机上安全、有序的文件夹中。使用 Beancount,您可以使用元数据直接从账本中链接到这些文件。

2025-07-15 * "CEU webinar"
Expenses:CEU 79.00 USD
Assets:Bank:Practice
document: "docs/ceu/2025-07-15-trauma-webinar.pdf"

这将创建一个无可置疑的、独立的记录,在税务审计时非常宝贵。

7. 监控现金流趋势,而不仅仅是余额

了解您当前的银行余额固然好;了解资金进出您企业的流动情况则更好。使用 Beancount 强大的查询语言来分析您的财务趋势。绘制您的月收入与支出图表,确定您最赚钱的服务,或预测在业务较慢的月份中潜在的现金短缺。这种由顶级簿记指南推荐的主动方法使您可以做出战略决策,而不是对财务意外做出反应。

8. 备份和版本控制您的账本

由于您的 Beancount 账本是一个简单的文本文件,您可以使用 Git(一个强大的免费版本控制系统)来管理它。通过将您的账本保存在私有 Git 存储库中(在 GitHub 或 GitLab 等服务上),您可以免费获得两个关键优势:

  1. 完整的历史记录: 您可以查看对账本所做的所有更改。
  2. 异地备份: 您的数据免受本地硬件故障的影响。

养成在每次对账后“推送”更改的习惯。

9. 每月查看财务报表

不要等到您的会计师告诉您您的业务状况。在每个月末,使用 Beancount 的报告工具生成关键财务报表,例如损益表和资产负债表。将它们与上个月或去年同期进行比较。这种定期审查可以帮助您发现支出漏洞、评估您的定价,并培养必要的财务知识,以便自信地回答贷方或投资者的提问。

bean-report books.bean income_statement -e 2025-07-31

10. 全年预算税款

对于个体经营者来说,纳税日不应该是一个意外。将您未来的税单视为一项经常性支出。在 Beancount 中创建负债账户(例如,Liabilities:Tax:FederalLiabilities:Tax:State),并定期将您收到的每笔付款的一定比例转入这些虚拟账户。当需要进行季度预估税款缴纳时,资金将被预留并等待,使整个过程完全轻松无痛。


快速入门清单

  • 开设单独的业务银行账户。
  • 选择现金制或权责发生制,并将其记录在您的 options 中。
  • 使用 bean-extract 编写您的银行和 EHR CSV 导入脚本。
  • 在每笔交易到达时标记一个类别。
  • 每周对账;之后备份到您的私有 Git 存储库。
  • 运行月度报表和现金流查询。
  • 将税收缓冲资金转移到单独的高收益储蓄账户。

准备好让您的账簿平静下来了吗?

安装 Beancount,提交您的第一个条目,并让这十个习惯提供必要的结构,以保持您的治疗业务财务稳固且富有洞察力。祝您记账愉快!

使用 Beancount 轻松掌握亚马逊卖家记账基础

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

当你的利润微乎其微时,精确胜过猜测。

在亚马逊上销售是一个数量和速度的游戏。但在销售和发货的背后,隐藏着一个由费用、退货、库存变动和税务义务组成的复杂网络。标准的记账软件通常难以捕捉到这种细微差别,导致卖家对其真实盈利能力的了解模糊不清。

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

这就是像 Beancount 这样的纯文本会计系统大放异彩的地方。通过完全控制记录交易的方式,你可以构建一个完全模拟亚马逊市场独特挑战的财务真相来源。本指南提供了一个循序渐进的工作流程,让你在费用、税金和库存难题面前保持领先地位。

为什么亚马逊记账与众不同

如果你尝试将亚马逊付款与你的银行对账单进行核对,你就会知道这并非易事。亚马逊业务的财务现实隐藏在多层抽象之后。

  • 双周一次性付款: 亚马逊不会向你发送每笔销售的收入。相反,它每两周发送一次单笔存款。这笔一次性付款是一个 值,总销售额扣除推荐费、FBA 费用、广告成本、退货和其他预扣款。要了解你的业务,你必须将这个数字分解成其组成部分。 (doola: A Business-in-a-Box™)
  • 库存无处不在: 你的库存不断流动——从你的供应商到准备中心,再到全国各地的各种 FBA 配送中心,最后到客户。准确跟踪你的销售成本 (COGS) 需要知道每笔销售使用了哪一批库存(以什么成本)。 (Bean Ninjas)
  • 市场费用和促销: 你的很大一部分收入立即被费用消耗:推荐费、FBA 拣货和包装费、月度仓储费和广告成本。单独跟踪每个费用类别是计算你的真实毛利率和确定产品实际盈利能力的唯一方法。 (Profitwise Accounting)
  • 销售税拼凑: 虽然亚马逊的市场促进商法处理大多数州的销售税征收和汇款,但这并非一个完整的解决方案。在 FBA 仓库中存储库存可能会产生“关联”(业务存在),可能要求你在这些州注册和申报,即使没有应缴税款。这是一个复杂的合规领域,需要仔细跟踪。 (TaxDo)
  • 更低的 1099-K 门槛: 随着 2024 年 1099-K 表格的申报门槛从 20,000 美元降至 5,000 美元(并设定从 2026 年起降至 600 美元),几乎每个认真经营的卖家都将收到亚马逊的表格,向 IRS 报告其总交易量。你的账簿 必须 能够与这个数字完全一致。 (IRS)

Beancount 七步蓝图

此蓝图利用 Beancount 的精度来直接应对亚马逊的复杂性。

1. 尽早区分渠道

如果你在多个平台上销售,请将每个平台的会计分开。在你法人实体的单个 Beancount 文件中,为每个市场创建专用的分层账户。这种结构简化了分析,并使生成税务报表变得轻而易举。

2025-07-22 open Income:Amazon               USD
2025-07-22 open Expenses:Amazon:FBAFee USD
2025-07-22 open Assets:Amazon:Payouts USD

2. 分解每次付款

这是最关键的习惯。切勿将亚马逊存款记为单行收入。相反,请从卖家中心下载相应期间的“所有交易”结算报告。使用此报告创建一个 Beancount 交易,将付款分解成其组成部分。

你在银行收到的存款是平衡分录。总销售额记入 Income,而所有费用和退款则从其各自的 Expenses 账户中扣除。

; 来自结算报告的双周付款
2025-07-14 * "亚马逊结算 #4361"
Assets:Bank:Operating 8432.17 USD
Income:Amazon:Sales -12274.50 USD
Expenses:Amazon:FBAFee 2454.80 USD
Expenses:Amazon:Adverts 1012.06 USD
Expenses:Amazon:Refunds 375.47 USD
Assets:Amazon:Reserve -100.00 USD

3. 使用批次跟踪库存和 COGS

Beancount 有一个一流的库存跟踪系统,称为“批次”。当你购买库存时,你会记录单位数量及其特定成本。当一个单位售出时,你可以将该确切成本记为费用,从而完美计算销售成本 (COGS)。

; 从供应商处购买 1,000 件
2025-07-01 * "供应商 PO-7421"
Assets:Inventory:WidgetA 1000 WidgetA {@ 4.20 USD}
Assets:Bank:Operating

; 稍后,记录单笔销售的成本
2025-07-16 * "FBA 销售 WidgetA | COGS"
Expenses:COGS 1 WidgetA {4.20 USD}
Assets:Inventory:WidgetA

4. 选择权责发生制以提高清晰度

对于任何基于库存的业务,权责发生制都更胜一筹。现金收付制方法会在你购买库存的月份显示巨额支出,并在你销售库存的月份显示人为的高利润,从而扭曲你的业绩。权责发生制会计将销售商品的成本 (COGS) 与同一期间的销售收入正确匹配,从而更清晰地反映你的毛利润。 (Bean Ninjas)

5. 自动导入

手动输入结算报告一开始很有教育意义,但无法扩展。纯文本生态系统擅长自动化:

  • 使用 bean-extract 从 A2X 等服务导出的格式化 CSV 中提取数据。
  • 编写简单的 Python 脚本以直接从亚马逊的 SP-API 中提取数据。
  • 使用现有的导入程序提取银行 CSV 文件,以核对直接向信用卡收取的存款和费用。

6. 每周核对

养成检查数字的习惯。使用 Beancount 强大的命令行工具快速验证余额并查看业绩。

# 检查你当前的库存数量和价值
bean-balance books.bean "Assets:Inventory" "2025-07-21"

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

7. 存档源文档

对于每笔主要交易,链接到源文档。使用 Beancount 的元数据语法 (document:) 附加亚马逊官方结算 PDF、库存采购的供应商发票或发货收据。这将创建一个独立的、可审计的财务记录。

销售税和合规性清单

  • 市场促进商法: 了解虽然亚马逊在大多数州代表你汇出销售税,但在加利福尼亚州、德克萨斯州或宾夕法尼亚州等州存储库存仍然会产生经济联系,可能需要你在当地注册你的企业。 (TaxGPT)
  • 1099-K 核对: 确保你在 Income:Amazon:Sales 中记录的年度总额与 1099-K 表格中报告的总金额精确到美分。任何差异都是审计标志。 (IRS)
  • 直接销售税: 如果你通过促进商未涵盖的其他渠道进行销售,请维护 Liabilities:SalesTaxPayable:State 账户子树以跟踪你直接欠缴的税款。

常见陷阱(和修复方法)

  • 陷阱: 仅记录亚马逊的净存款。
    • 修复: 始终使用完整的结算报告分解付款。
  • 陷阱: 忽略报销的退货或损坏的商品。
    • 修复: 将初始退款费用和随后的亚马逊报销作为单独的贷项记录。
  • 陷阱: 忘记滚动储备金。
    • 修复: 亚马逊通常会从付款中预扣“储备金”余额,尤其是对于新账户。在专用的 Assets:Amazon:Reserve 账户中跟踪你应得的这笔款项。
  • 陷阱: 你的系统和亚马逊的 SKU 别名不匹配。
    • 修复: 在导入脚本中规范所有 SKU 代码,以确保 COGS 查找不会失败。

快速入门待办事项

  • 在卖家中心启用并下载你的第一份结算报告。
  • 克隆 Beancount 入门存储库并构建特定于亚马逊的账户图表。
  • 编写一个小型导入程序脚本,将结算 CSV 转换为 Beancount 交易(.txn 文件)。
  • 安排每周提醒以提取新报告并运行 bean-check 以确保你的文件有效。
  • 每月查看你的损益表,以便就广告支出、定价和库存做出数据驱动的决策。

延伸阅读

多发货,少烦恼——保持你的 Bean 平衡。祝你销售愉快!

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

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

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

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

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

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

为什么 Etsy 簿记有所不同

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

  • 无处不在的市场费用: 你的最终付款是在 Etsy 收取其份额后剩下的金额。上架费、交易费、支付处理费和广告费都会蚕食每一笔销售额。如果不单独跟踪它们,你就无法知道你的真实利润率。(Bench)
  • 平台控制的销售税: 对于卖家来说,这是一个巨大的胜利,Etsy 现在会在大多数州自动计算、收取和代缴销售税。但是,如果你在其他渠道销售或在某些州有实体店,由于“关联”规则,你可能仍然有自己的销售税义务。(Bench)
  • 灵活的付款节奏: 根据你的设置和账户历史记录,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. 尽早选择你的会计方法

你有两个主要选择:

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

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 美元,用于其他工具。(Bench)

销售税和合规性提示

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

常见陷阱(和修复方法)

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

快速入门清单

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

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

自己动手 VS 聘请簿记员:面向成本意识创始人的 Beancount 攻略

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

作为创始人,你身兼数职——首席执行官、销售员、产品经理,当然还有簿记员。但随着业务的增长,花在核对交易上的时间开始感觉不像精明的节约,而更像是一种代价高昂的分心。那么,何时才是移交账簿的合适时机?

答案不在于放弃控制权;而在于做出数据驱动的决策。以下是如何使用你的 Beancount 账本来决定是继续自己动手还是聘请专业人士。

2023-09-03-diy-vs-hiring-a-bookkeeper-a-beancount-playbook-for-cost-conscious-founders

简而言之: 如果你以每小时 85 美元的价格计算你的时间,并且每月只花四个小时进行簿记,那么这项工作将使你损失 340 美元的收入。一个典型的远程簿记员起价约为每月 249 美元——此外,他们还可以让你腾出时间来真正发展业务。(Bench

1. 为你自己的时间定价

这个决定中最重要的指标是你自己的机会成本。你花在分类支出上的每一小时都是你没有花在销售、产品开发或战略上的时间。

计算方法很简单:

  1. 跟踪你每月花在簿记任务上的小时数(核对、编码、修复错误)。
  2. 将这些小时数乘以你的有效计费费率。
  3. 将该数字与外部簿记员的月费进行比较(典型的起价约为每月 249 美元)。

如果你的时间成本更高,那么你就有一个明显的委托优势。你甚至可以直接在 Beancount 中跟踪这一点。

; 跟踪你时间的机会成本
2025-07-31 * "七月簿记时间"
Expenses:Admin:BookkeepingTime 4.00 H ; 你自定义的小时单位
Equity:OwnerTime -340.00 USD
; metadata: rate:85

这里,H 是“小时”的自定义货币。你可以直接记录时间,并使用脚本或 price 指令来分配其美元价值,使你自己劳动力的成本成为财务报告的明确组成部分。

2. 计算自己动手的隐性成本

你的时间成本不是唯一的因素。自己动手簿记 carries risks that can be far more expensive than a monthly retainer.

  • 税务失误: 混乱的账簿对于税务筹划人员来说是一场噩梦。注册会计师可能每小时收费150-400 美元,仅仅是为了清理你的记录,然后才能开始报税。(Bench
  • 错失扣除额和 IRS 罚款: 小的、无意的错误——例如错误分类支出或忘记记录现金交易——会随着时间的推移而累积,导致罚款、利息和更高的税单。(Bench
  • 创始人倦怠: 深夜核对的 mental drag 是真实存在的。它会消耗应该专注于高 leverage 活动(如销售和产品创新)的精力和能量。(Bench

Beancount 缓解措施: 你可以通过添加 Git pre-commit 钩子来减少错误,如果 bean-check 失败或交易缺少类别标签,该钩子将拒绝提交更改。即使你感到疲倦,这也能强制执行纪律。

3. 簿记员(或 Beancount 纪律)省钱的三种方式

无论你是聘请专业人士还是仅仅提升你自己的流程,良好的簿记都会带来回报。

  1. 更清晰的税务申报: 有条理、准确的账簿意味着注册会计师花在清理上的时间更少,这直接转化为更低的账单。
  2. 实时现金洞察: 了解你的确切现金状况可以帮助你避免代价高昂的透支费用和对最后时刻高息融资的需求。
  3. 压力缓冲: 稳定、可预测的财务运营可以减少创始人的压力,从而带来更好的决策和更健康的企业文化。

4. 何时你不应该急于聘请

聘请簿记员并不总是正确的做法。在某些情况下,自己动手仍然是更明智的财务选择。

  • 你处于尚未创收或现金流极低的阶段。 在这个阶段,每一美元都应该用于销售和客户获取。首先专注于获得收入。(Bench
  • 你的财务状况很简单。 如果你只有一个银行账户、一个 Stripe 提要和每月少于 60 笔交易,你可能可以在一周内用不到一个小时的时间在 Beancount 和 Fava 中管理所有内容。

5. 混合选项:你的“簿记员就绪”Beancount 账本

最佳解决方案通常是混合解决方案。使用 Beancount 自己完成繁重的工作,但保持账簿干净,以便专业人士可以介入处理高价值的任务。

  • 自动化摄取: 设置 bean-extract 每晚运行,自动提取新交易。
  • 标准化你的会计科目表: 使用常规账户名称(Expenses:SoftwareAssets:Bank:Checking),以便任何专业人士都能立即理解你的账本。
  • 附加源文档: 对于超过 75 美元的每笔支出,使用 link: 元数据附加收据或发票的 PDF。
  • 遵循月度结算清单:
    1. 核对所有银行和信用卡账户。
    2. 运行 bean-check 以确保没有错误。
    3. 使用 bean-report balance_sheetbean-report income_statement 导出 PDF 报表。
  • 执行季度移交: 将 Git 标签或简单的存档(books-Q3-2025.tar.gz)交给你的簿记员或注册会计师。他们可以验证你的工作,添加复杂的调整分录(如应计项目和折旧),并准备税务包。

这种模式可以保持低成本,因为专业人士只接触干净的、经过审查的数据,而你仍然可以获得专业级财务报表的益处。

6. 快速决策矩阵

情况聘请专业人士坚持使用 Beancount(自己动手)
每月 >60 笔交易,每月经常性收入 >2 万美元
你每小时收费 100 美元以上,但每月在账簿上花费 3 小时以上
资金紧张,每月经常性收入 <5 千美元
你真心喜欢电子表格和自动化

7. 后续步骤

  1. 记录你的时间。 在你的下一个簿记环节中,跟踪你在上面花费的每一分钟。
  2. 计算数字。 将该时间乘以你的计费费率,并将其与上述市场费率进行比较。
  3. 选择你的路径。 使用混合模式加强你的 Beancount 工作流程,或开始面试能够轻松处理纯文本账本的簿记员。

无论哪种方式,有意的簿记总是比即兴发挥更便宜。以 Beancount 作为你不可改变的真相来源,你将确切地知道专业帮助何时会带来回报——以及何时不会。

使用 Beancount 制作和追踪发票

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

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


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

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

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


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

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

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

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

在此获取我们的模板:beancount.io/invoice‑templates (提供 Google Docs、Word、Sheets、Excel 和 PDF 格式)


在你的账本中记录发票

将发票 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: "ap@acme.example"
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 的。 使用简单的模板和上面的代码片段,你将更快地获得付款_并且_保持你的账簿整洁。