跳到主要内容

51 篇博文 含有标签「Beancount」

查看所有标签

Beancount 生态系统:综合分析

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

Beancount 的核心功能与设计理念

Beancount 是一个开源的复式记账系统,它使用纯文本文件来记录交易。Beancount 的核心理念是将你的账本视为一个由简单、严格语法定义的数据集。每一个财务事件(交易、账户开立、商品价格等)都是文本文件中的一个指令,Beancount 会将其解析为内存中的条目数据库。这种设计强制执行复式记账原则:每笔交易都必须在账户之间平衡借方和贷方。其结果是一个高度透明、可审计的账本,你可以轻松地进行版本控制、检查和查询。

Beancount 生态系统:全面分析

设计理念 – 正确性与极简主义: Beancount 的设计优先考虑数据完整性和简洁性。其创建者 Martin Blais 将 Beancount 描述为“悲观的”,因为它假设用户会犯错,因此施加了额外的检查和约束。例如,Beancount 不允许你移除从未添加过的资产(防止负库存持有量或现金余额),并且可以强制要求每个账户在使用前必须开立。它缺乏 Ledger 中“虚拟”或自动平衡分录的概念——这是一个有意的选择,旨在强制实现完全平衡的条目。Beancount 有效地**“在正确性方面做到极致”**,提供了比基本复式记账更多的交叉检查。这种谨慎的方法吸引了那些“不太信任自己”并希望软件能捕获其错误的用户。

极少选项,最大一致性: 与 Ledger 繁多的命令行标志和调整选项不同,Beancount 选择了极简主义。它只有极少的全局选项,并且没有在账本文件之外改变交易语义的选项。所有影响记账的配置(如商品成本基础方法或记账假设)都通过文件内指令或插件完成,确保无论报告如何生成,加载相同的文件总是产生相同的结果。这种设计避免了 Ledger 许多“旋钮”的复杂性及其之间微妙的相互作用。Beancount 的设计理念是,记账工具应该是一个从输入文件到报告的稳定、确定性的管道。它通过将账本视为一个有序指令流来实现这一点,该指令流可以按顺序进行程序化处理。即使是 Ledger 视为特殊语法的事物(如期初余额或价格声明),在 Beancount 的数据模型中也是一等指令,这使得系统具有高度可扩展性。

通过插件和查询语言实现可扩展性: Beancount 使用 Python 实现,并提供了钩子来将自定义逻辑注入到处理流程中。用户可以用 Python 编写插件,对交易流进行操作(例如,执行自定义规则或生成自动分录)。这些插件在文件处理时运行,有效地扩展了 Beancount 的核心功能,而无需修改源代码。Beancount 还包含一个强大的查询语言(受 SQL 启发),用于对账本进行切片和分析。bean-query 工具将解析后的账本视为一个数据库,并允许你对其运行分析查询——例如,按类别汇总支出或提取特定收款人的所有交易。在 Beancount 3.x 中,此查询功能已移至独立的 beanquery 包中,但从用户角度来看,它仍然通过类似 SQL 的查询提供灵活的报告。

纯文本与版本控制: 作为一款纯文本记账工具,Beancount 强调用户控制和数据持久性。账本只是一个 .beancount 文本文件,你可以在任何文本编辑器中编辑它。这意味着你的整个财务历史都以人类可读的形式存储,你可以将其放入 Git 或其他版本控制系统(VCS)中,以跟踪随时间的变化。用户通常会将 Beancount 文件置于版本控制之下,以维护每次编辑的审计跟踪(并附带描述更改的提交信息)。这种方法符合 Beancount 的理念,即记账数据,尤其是个人或小型企业财务数据,应该是透明且“面向未来”的——而不是锁定在专有数据库中。用 Martin Blais 自己的话说,Beancount 是一个“心血结晶”,旨在为社区提供简单、耐用和免费的工具。它最初于 2007 年左右开发,并经历了重大重写(从 v1 到 v2,以及现在 2024 年的 v3),以完善其设计,同时保留其极简主义和正确性的核心理念。

Beancount 生态系统中的工具、插件和扩展

Beancount 生态系统已经发展出了一套丰富的工具、插件和扩展,它们增强了核心账本功能。这些工具涵盖了数据导入、账本编辑、报告查看以及添加专业会计功能。以下是 Beancount 世界中关键组件和附加功能的概览:

数据导入工具 (导入器)

实际使用中最重要的需求之一,就是从银行、信用卡及其他金融机构导入交易。为此,Beancount 提供了一个导入框架以及社区贡献的导入脚本。在 Beancount 2.x 中,内置模块 beancount.ingest (包含 bean-extractbean-identify 等命令) 用于在 Python 中定义导入器插件,并将其应用于下载的对账单。在 Beancount 3.x 中,这已被一个名为 Beangulp 的外部项目取代。Beangulp 是一个专用的导入器框架,它从 beancount.ingest 演变而来,现在是自动化 Beancount 3.0 交易导入的推荐方式。它允许编写 Python 脚本或命令行工具,这些工具可以读取外部文件 (例如 CSV 或 PDF 对账单) 并输出 Beancount 分录。这种新方法将导入逻辑与 Beancount 核心解耦——例如,旧的 bean-extract 命令已在 v3 中移除,取而代之的是你的导入脚本通过 Beangulp 的 CLI 接口自行生成交易。

社区贡献了数十个适用于不同银行和格式的现成导入器。全世界各地的机构都有导入器脚本——从中国的支付宝和微信支付,到各种欧洲银行 (如德国商业银行、ING、荷兰银行等),再到美国银行,如大通银行和美国运通。其中许多被收集在公共仓库中 (通常在 GitHub 上) 或像 beancount-importers 这样的软件包中。例如,** Tarioch Beancount Tools** 项目 (tariochbctools) 提供瑞士和英国银行的导入器,甚至处理加密货币交易导入。另一个例子是 Lazy Beancount,它打包了一组常用导入器 (适用于 Wise、Monzo、Revolut、IBKR 等),并提供基于 Docker 的设置,以便于自动化。无论你使用哪家银行或金融服务,很可能有人已经为其编写了 Beancount 导入器——或者你可以使用 Beangulp 的框架自行编写。Python 的灵活性意味着导入器可以处理解析 CSV/Excel 文件、OFX/QIF 下载,甚至抓取 API,然后以标准化的 Beancount 格式输出交易。

编辑与编辑器集成

由于 Beancount 账本只是纯文本文件,用户通常会利用他们偏爱的文本编辑器或 IDE 来维护它们。Beancount 生态系统提供了编辑器支持插件,以使这一体验更加顺畅。许多流行的编辑器都有相应的扩展,增加了语法高亮、账户名称自动补全和实时错误检查功能:

  • Emacs Beancount-Mode: Emacs 提供了一个主模式(beancount-mode)用于编辑 .beancount 文件,提供语法着色和与 Beancount 检查器集成的功能。它甚至可以在后台运行 bean-check,以便在你编辑时标记账本中的错误(例如不平衡的交易)。
  • VS Code 扩展: VSCode Marketplace 上的 Beancount 扩展为 Visual Studio Code 用户提供了类似的便利。它支持语法高亮、金额对齐、账户/收款人自动补全,甚至在保存文件时进行即时余额检查。它还可以与 Fava 集成,让你可以在 VSCode 内部启动 Fava 网页界面。
  • VimAtom 和其他编辑器也有相应的插件或模式。例如,Beancount 有一个 Tree-sitter 语法,它为现代编辑器提供语法高亮功能,甚至被 Fava 的网页编辑器组件所采用。简而言之,无论你的编辑环境如何,社区很可能都提供了插件,使 Beancount 文件的编辑变得方便且无错误。

为了在传统编辑器之外快速录入交易,还有 Bean-add移动应用程序等工具。Bean-add 是一个命令行工具,允许通过提示或单行命令添加新交易,并处理日期和账户建议。在移动端,一个名为 Beancount Mobile 的项目提供了一个简单的界面,方便你随时随地输入交易(例如,通过手机记录现金购买)。此外,还有一个 Beancount Telegram 机器人,可以通过消息捕获交易——你可以发送包含交易详情的消息,机器人会将其格式化到你的账本文件中。

网页前端和可视化工具

FavaFava 的网页界面为 Beancount 提供了一个交互式仪表板,其中包含诸如带有可视化效果(此处显示为按类别划分的支出树状图)的利润表等报告,以及账户和余额表格。

Beancount 的旗舰前端是 Fava,一个现代化的网页界面。Fava 作为本地网页应用运行,读取你的 Beancount 文件,并在你的浏览器中提供丰富的交互式体验。它提供全套报告:资产负债表、利润表、随时间变化的净资产、投资组合持仓、业绩图表、预算等——所有这些都开箱即用。用户经常将 Fava 列为选择 Beancount 而非其他纯文本记账工具的主要原因。只需一个命令(fava ledger.beancount),你就可以通过图表和表格而不是文本来浏览你的财务状况。Fava 支持以下功能:深入查看账户、按收款人或标签筛选交易、查询编辑器(以便你可以在浏览器中运行 Beancount 查询并查看结果),甚至还有一个集成的基于网页的账本编辑器。它高度可用,使纯文本记账对于那些偏爱可视化界面的人来说易于上手。

在底层,Fava 使用 Python(后端使用 Flask)和 JavaScript(前端使用 Svelte)编写。它有自己的发布周期并积极维护。值得注意的是,Fava 一直与 Beancount 的开发保持同步——例如,** Fava 1.30 添加了对 Beancount v3 的支持**,内部切换使用新的 beanquerybeangulp 包。(它仍然支持 Beancount 2 以兼容旧账本。)Fava 对可用性的关注包括网页编辑器中的自动补全、以及带有深色模式和响应式图表的时尚用户界面等贴心功能。还有一个名为 Fava-GTK 的衍生项目,它将 Fava 打包成桌面应用程序,供偏爱原生应用体验的 GNOME/Linux 用户使用。

除了 Fava,还存在其他可视化和分析选项。由于 Beancount 数据可以导出或作为表格查询,用户经常利用 Jupyter notebooks 或 Pandas 等工具进行自定义分析。例如,一位用户描述通过查询接口将 Beancount 数据提取到 Pandas DataFrame 中以准备自定义报告。还有社区贡献的特定报告脚本——例如投资组合分配分析工具或支出与净资产的过程控制图。然而,对于大多数人来说,Fava 提供了足够强大的报告功能,无需编写代码。它甚至支持扩展:你可以放入 Python 文件,为 Fava 添加新的报告页面或图表。一个值得注意的扩展是用于 Fava 内信封预算的 fava-envelope。总的来说,Fava 是 Beancount 生态系统的核心可视化中心。

命令行工具和脚本

Beancount 附带各种命令行工具(尤其是在旧的 v2 分支中,其中一些在 v3 中有所精简)。这些工具可对你的账本文件进行操作,以检查文件或生成文本或 HTML 格式的特定报告:

  • bean-check: 一个验证器,用于检查文件中的语法错误或会计错误。运行 bean-check myfile.beancount 会提示你任何不平衡、缺失账户或其他问题,如果文件没有错误则不输出任何内容。
  • bean-format: 一个格式化工具,通过将数字对齐到整齐的列中来整理你的账本,就像对源代码运行代码格式化程序一样。这有助于保持文件整洁和可读。
  • bean-query: 一个交互式 shell 或批处理工具,用于在你的账本上运行 Beancount 的查询语言。你可以使用它来生成自定义的表格报告(例如,bean-query myfile.beancount "SELECT account, sum(amount) WHERE ...")。
  • bean-report: 一个多功能的报告生成器(在 v2 中),可以将预定义的报告(资产负债表、利润表、试算平衡表等)输出到控制台或文件中。例如,bean-report file.beancount balances 将打印账户余额。(实际上,许多这些文本报告已被 Fava 更美观的呈现方式所取代。)
  • bean-web / bean-bake: 一个较旧的网页界面,可以在 localhost 上提供报告或将其“烘焙”为静态 HTML 文件。这些主要在 Fava 流行之前使用;bean-web 提供了 bean-report 可以生成的相同报告的基本网页视图。在 Beancount 3 中,bean-web 已被移除(因为 Fava 现在是推荐的网页前端,提供更卓越的体验)。
  • bean-example: 一个用于生成示例账本文件的实用工具(对于新手来说,查看 Beancount 分录模板很有用)。
  • bean-doctor: 一个调试工具,可以诊断你的账本或环境中的问题。

值得注意的是,截至 Beancount v3,许多这些工具已从核心项目中移出。核心 Beancount 包得到了精简,查询引擎和导入器等工具被拆分为独立的包(如 beanquery、beangulp 等),以便于维护。例如,bean-query 的功能现在由单独安装的 beanquery 工具提供。从用户角度来看,功能仍然可用;它只是被模块化了。Arch Linux 社区在更新 Fava 时注意到了这一变化:Fava 包添加了对 beanquery 和 beangulp 的依赖,以支持 Beancount 3.x。这种模块化方法也允许社区中的其他人更独立于 Beancount 的发布周期来为这些辅助工具做出贡献。

Beancount 插件和扩展

Beancount 生态系统的一个突出优势是其插件系统。通过在 Beancount 文件中添加一行 plugin "module.name",你可以在账本处理过程中集成自定义的 Python 逻辑。社区已经创建了许多插件来扩展 Beancount 的功能:

  • 数据质量和规则: 例如,beancount-balexpr 允许你断言涉及多个账户的等式(例如,资产 A + 资产 B = 负债 X),而 beancount-checkclosed 则在你关闭账户时自动插入余额断言,以确保其净值为零。甚至还有一个插件可以确保文件中的交易按日期排序(autobean.sorted),以捕获乱序条目。
  • 自动化: beancount-asset-transfer 插件可以在账户之间生成实物转账分录(在经纪商之间转移股票时,这对于保留成本基础非常有用)。另一个插件 autobean.xcheck 则将你的 Beancount 账本与外部对账单进行交叉核对,以查找差异。
  • 重复交易和预算: Akuukis 的**“repeat”或插值插件**允许定义重复交易或将年度费用分摊到多个月份。对于预算,fava-envelope 扩展(通过 Fava 使用)支持纯文本的信封预算方法。还有 Frank Davies 的 MiniBudget——一个受 Beancount 启发的小型独立工具,可帮助个人或小型企业进行预算。
  • 税务和报告: 一些插件有助于税务会计,例如一个可以自动将资本利得分类为短期或长期的插件。另一个插件(Justus Pendleton 的 fincen_114)为拥有海外账户的美国纳税人生成 FBAR 报告,这说明了 Beancount 数据如何用于监管报告。
  • 社区插件库: 还有一些精选的插件集,例如 beancount-plugins(由 Dave Stephens 开发),专注于折旧分录等功能,以及 beancount-plugins-zack(由 Stefano Zacchiroli 开发),其中包括各种辅助工具,如排序指令。

除了插件,还有其他围绕 Beancount 的实用工具,可满足特定需求。例如,** beancount-black** 是一个自动格式化工具,类似于 Black 代码格式化工具,但专用于 Beancount 账本文件。如前所述,有一个 Beancount 机器人(Telegram/Mattermost)可以通过聊天添加交易,还有一个适用于 macOS 的 Alfred 工作流,可以快速将交易附加到你的文件。一个名为 Pinto 的工具提供了一个“增强型”命令行界面(CLI),支持交互式输入(类似于增强版的 bean-add)。对于从其他系统迁移的用户,存在转换器(YNAB2Beancount、CSV2Beancount、GnuCash2Beancount、Ledger2Beancount)来帮助导入其他来源的数据。

总之,Beancount 生态系统相当广泛。下面的表 1 列出了一些主要的工具和扩展及其作用:

工具/扩展描述
Fava (网页界面)功能齐全的网页应用程序,用于查看和编辑 Beancount 账本。提供交互式报告(资产负债表、损益表等)、图表和查询功能。极大地提升了 Beancount 的可用性。
Beangulp (导入框架)Beancount v3 的独立导入框架,取代了旧的 ingest 模块。帮助使用插件脚本将银行对账单(CSV、PDF 等)转换为 Beancount 分录。
Beanquery (查询工具)Beancount 数据的独立类 SQL 查询引擎。在 v3 中取代了 bean-query,允许通过熟悉的 SELECT-FROM-WHERE 语法对交易和余额进行高级查询。
Bean-check / Bean-format核心命令行界面(CLI)工具,用于验证 Beancount 文件(检查错误)并自动格式化以保持一致性。有助于维护正确和整洁的账本。
编辑器插件 (Emacs、VSCode、Vim 等)在文本编辑器中添加 Beancount 语法支持和语法检查的插件/模式。通过自动完成和实时错误高亮等功能,改善手动编辑 .beancount 文件的体验。
社区导入器银行导入脚本的集合(许多在 GitHub 上),涵盖美国、欧盟、亚洲等地的银行。允许用户自动将交易从其金融机构导入 Beancount。
插件 (账本扩展)可选的文件内插件,用于强制执行规则或添加功能(例如费用分摊、重复分录、自定义余额断言)。用 Python 编写,并在文件处理期间运行以进行自定义。

| 转换器 (迁移工具) | 将其他格式的数据转换为 Beancount 的实用工具,例如从 GnuCash 或 Ledger CLI 转换为 Beancount 格式。有助于在不从头开始的情况下采用 Beancount。 |

与 Ledger、hledger 及类似系统的比较

Beancount 属于纯文本复式记账工具家族,其中 Ledger CLI (John Wiegley 的 Ledger) 和 hledger 是杰出的代表。尽管所有这些系统都共享纯文本账本文件和复式记账的核心理念,但它们在语法、设计理念和生态系统成熟度方面有所不同。下表重点介绍了 Beancount、Ledger 和 hledger 之间的主要差异:

方面Beancount (Python)Ledger CLI (C++)hledger (Haskell)
语法与文件结构严格、结构化的语法,由正式文法 (BNF) 定义。交易具有明确的 日期 标志 "收款人" "摘要" 行和带数量的分录;所有账户都必须明确开立/定义。不允许隐式分录;每笔交易都必须平衡。更自由的语法。收款人/描述通常与日期在同一行。允许一些隐式平衡(例如,单边分录交易可以隐含第二笔分录到默认账户)。账户名称无需事先声明即可使用。提供大量命令行选项,可影响解析(例如,年份假设、商品合并规则)。大致遵循 Ledger 的语法,但有细微差异。hledger 是 Ledger 核心功能在 Haskell 中的重新实现,因此其日记账格式与 Ledger 非常相似(带有一些扩展和默认更严格的解析)。例如,hledger 对日期和商品语法的要求比 Ledger 略严格,但不如 Beancount 严格。
设计理念保守与严谨。 首要强调捕获用户错误并维护数据完整性。默认强制执行多项检查(余额断言、批次追踪)。配置极简——采用“一种方式”方法以保持一致性。设计为带有插件的库,以实现可扩展性(将账本数据视为可处理的流,从而实现自定义 Python 逻辑)。乐观与灵活。 信任用户正确输入数据;默认内置约束较少。高度可定制,有数十个选项和命令标志来调整行为。倾向于是一个单体工具,内置了各种功能(报告、图表),并在账本内部使用领域特定语言处理自动化交易和周期性交易等。可扩展性通常通过外部脚本或内置查询语言实现,而非插件 API。务实与一致。 旨在以可预测的行为将 Ledger 的方法带给更广泛的受众。hledger 默认更注重一致性(没有显式账户就没有平衡假设),并且比 Ledger 最宽松的模式具有更少的易错点。它拥有 Ledger 功能的子集(Ledger 的一些更奇特的选项不受支持),但也添加了一些自己的功能(如内置的网页界面和 CSV 导入)。强调稳定性和正确性,但没有像 Beancount 那样的插件系统。
交易与平衡严格的复式记账:每笔交易的借方和贷方总额必须相等。不允许不平衡的条目或占位符(没有自动平衡的“虚拟分录”)。还强制执行排序独立性:账本可以按日期任意排序,因为余额断言是日期范围的,不依赖于文件顺序。商品的成本追踪非常严格——出售资产时,必须指定批次,否则 Beancount 将强制执行 FIFO/LIFO,以确保你无法移除未添加的商品。交易中允许更大的宽松度。Ledger 允许“虚拟”分录(使用方括号 [ ] 或圆括号 ( )),这些分录不需要显式平衡账户——常用于处理预算或隐式权益平衡。在 Ledger 中,可以输入不完整的交易(省略一方),让 Ledger 推断平衡金额。此外,Ledger 不严格强制按批次移除资产;即使未追踪特定批次,它也会乐意从总商品余额中扣除。这使得例如平均成本会计更容易,但意味着 Ledger 不会阻止你犯错,比如出售比给定批次中拥有的更多份额。
库存与成本基础精确的批次追踪。Beancount 将成本信息附加到商品批次(例如,以每股 100 美元购买 10 股),在减少库存时,它要求匹配特定批次或使用定义的策略。它通过设计确保资本利得和成本基础的正确计算。除非你明确编写逻辑,否则平均成本法不是默认设置,因为 Beancount 将每个批次视为独立的,以保持准确性。更抽象的库存。Ledger 处理商品金额更灵活;默认情况下,所有批次在报告中合并(只显示总数量)。如果需要,它提供按批次或平均成本报告的选项,但这属于报告范畴。历史上,Ledger 在多商品交易中不使用成本信息来强制平衡,这可能导致细微的资本利得计算错误。然而,Ledger 的灵活性允许用户在报告时通过命令行标志选择 FIFO、LIFO、平均等方法。
报告与用户界面主要通过 Fava (网页用户界面) 和 bean-query/bean-report。Fava 提供了一个精致的网页仪表板,包含图表,使 Beancount 在分析方面非常用户友好。还支持通过 bean-query 进行文本报告和类 SQL 查询。没有官方的 TUI (文本用户界面),但编辑器/IDE 集成弥补了这一空白。主要基于 CLI 的报告。Ledger 有许多内置报告命令(余额、登记、统计等),将文本输出到终端。它可以生成图表(ASCII 或通过 gnuplot),甚至有一些附加组件用于 HTML 报告,但它没有作为项目一部分维护的官方网页界面。(曾有第三方尝试为 Ledger 开发网页用户界面,但没有一个像 Fava 对 Beancount 那样突出。)对于用户界面,用户依赖终端或像 Ledger-Live(一个独立项目)这样的图形用户界面。提供 CLI 和简单的网页用户界面。hledger 继承了 Ledger 的 CLI 报告(命令类似),并额外提供 hledger-web,一个用于在浏览器中查看账户和交易的基本网页界面。hledger-web 不如 Fava 功能丰富,但它提供了一个只读概览。hledger 还有 hledger-ui,一个基于 curses 的终端界面,用于交互式使用。
可扩展性与插件通过 Python 实现高度可扩展性。插件 API 允许在账本处理过程中运行任意 Python 代码,这意味着用户无需修改核心即可实现自定义功能。插件生态系统(用于预算等)展示了这一点。此外,用户可以编写 Python 脚本来使用 Beancount 的库进行自定义报告。较低级别的可扩展性。Ledger 可以通过编写解析 Ledger 输出的脚本或巧妙地使用其内部查询语言来扩展。它还具有自动化交易(根据日记账中的触发器自动生成分录的规则)和周期性交易等功能,这些是账本文件内部的内置可扩展性。但它不提供将任意代码注入会计引擎的 API——它不像 Beancount 那样是一个库(尽管存在适用于 C++ 开发者的 libledger)。中等可扩展性。hledger

Beancount 的使用场景

Beancount 足够灵活,既可用于个人财务追踪,在某些情况下也可用于小型企业会计。其核心的复式记账方法在这两种场景下都是相同的,但规模和具体实践可能有所不同。

个人理财

许多 Beancount 用户将其用于管理个人或家庭财务。Beancount 中典型的个人理财设置可能包括活期和储蓄账户、信用卡、投资、贷款、收入类别(工资、利息等)以及支出类别(租金、食品杂货、娱乐等)。用户可以手动记录日常交易(录入收据、账单等),也可以使用前面讨论过的导入工具从银行对账单导入。Beancount 为个人理财带来的益处包括:

  • 整合与分析: 你的所有交易都可以存储在一个文本文件(或一组文件)中,代表多年的财务历史。这使得分析长期趋势变得容易。通过 Beancount 的查询语言或 Fava,你可以在几秒钟内回答诸如“过去 5 年我在旅行上花了多少钱?”或“我平均每月的食品杂货账单是多少?”等问题。一位用户指出,切换到 Beancount 后,“财务数据(支出、捐赠、税收等)的分析变得轻而易举”,无论是通过 Fava 还是通过查询数据并使用 Pandas 等工具。本质上,你的账本成为一个可以随意查询的个人财务数据库。
  • 预算与规划: 尽管 Beancount 不强制预算系统,但你可以实现一个。一些用户通过创建预算账户或使用 fava-envelope 插件进行信封预算。另一些用户则简单地使用定期报告来比较支出与目标。由于它是纯文本,将 Beancount 与外部预算工具或电子表格集成非常简单(导出数据或使用查询的 CSV 输出)。
  • 投资与净资产追踪: Beancount 凭借其对成本基础和市场价格的强大处理能力,在追踪投资方面表现出色。你可以记录股票、加密货币等的买卖,并附带成本详情,然后使用 Prices 指令来追踪市场价值。Fava 可以显示净资产随时间变化的图表以及按资产类别划分的投资组合明细。这对于个人财富管理非常有用——你将获得与 Mint 或 Personal Capital 等商业工具类似的洞察力,但完全由你掌控。内置的多币种处理功能也使得如果你持有外币或加密货币,Beancount 可以追踪这些并转换为报告。
  • 对账与准确性: 个人理财通常涉及与银行对账单进行对账。使用 Beancount,可以通过使用余额断言或文档功能定期对账。例如,每个月你可能会添加一个 balance Assets:Bank:Checking <日期> <余额> 条目,以确认你的账本与月末银行对账单一致。bean-check 工具(或 Fava 的错误显示)会在数据不一致时提醒你。一位用户提到每月对所有账户进行对账,这“有助于发现任何异常活动”——这是 Beancount 促进的良好个人理财卫生习惯。
  • 自动化: 精通技术的个人已经使用 Beancount 自动化了个人理财工作流程的很大一部分。通过导入器、cron 任务,可能还有一些 Python 代码,你可以设置你的系统,例如,每天自动获取你的银行交易(有些使用 OFX 或 API),并根据规则附加到你的 Beancount 文件中进行分类。随着时间的推移,你的账本大部分实现自动更新,你只需根据需要进行审查和调整。Hacker News 上的一位社区成员分享说,三年后,他们的 Beancount 账本“95% 自动化”。这种程度的自动化之所以可能,是因为 Beancount 的纯文本开放性和脚本能力。

个人理财用户通常选择 Beancount 而非电子表格或应用程序,因为它赋予他们对数据的完全所有权(不依赖可能关闭的云服务——例如 Mint 停止服务就是一个担忧),并且当你整合所有数据时,洞察力会更深。学习曲线不容小觑——必须学习基本会计知识和 Beancount 语法——但官方文档和社区教程等资源有助于新手入门。一旦设置完成,许多人发现随时拥有清晰、值得信赖的财务状况,从而获得安心。

小型企业会计

Beancount 用于小型企业(或非营利组织、俱乐部等)的场景不如个人使用普遍,但确实可行,并且已有一些成功案例。Beancount 的复式记账框架实际上与企业会计所依赖的系统相同,只是缺少专用会计软件提供的一些高级功能(如发票模块或薪资集成)。以下是 Beancount 如何适应小型企业环境的方式:

  • 总账和财务报表: 小型企业可以将 Beancount 文件视为其总账。你可以设置资产账户用于银行账户、应收账款、可能还有存货;负债账户用于信用卡、贷款、应付账款;所有者权益用于所有者资本;收入账户用于销售或服务;以及费用账户用于所有业务开支。通过维护此总账,你可以随时使用 Beancount 的报告或查询生成利润表(损益表)和资产负债表。事实上,Beancount 的内置报告或 Fava 可以在几秒钟内生成完全符合会计原则的资产负债表和损益表。这对于小型企业评估盈利能力、财务状况和现金流(现金流需要一些查询才能得出,因为直接的现金流量表不是内置的,但可以推导)来说是足够的。
  • 发票、应收账款和应付账款: Beancount 没有内置的发票系统;用户通常会在外部处理发票(例如,在 Word 或发票应用程序中创建发票),然后将结果记录到 Beancount 中。例如,当你开具发票时,你会记录一笔分录,借记应收账款,贷记收入。当收到付款时,你借记现金/银行,贷记应收账款。这样,你可以通过查看应收账款账户的余额来跟踪未结应收账款。同样适用于账单(应付账款)。尽管这比专业的会计软件(可能会发送提醒或与电子邮件集成)更手动,但完全可行。一些用户分享了他们如何使用 Beancount 管理发票并确保不会遗漏未结发票的模板或工作流程(例如,通过使用元数据或自定义查询来列出未支付的发票)。
  • 存货或销货成本: 对于销售产品的企业,Beancount 可以跟踪存货采购和销售,但这需要严格的记账。你可以使用 Inventory 和成本会计功能:采购存货会增加一个资产账户(附带项目成本),销售时会将成本转移到费用(销货成本),并记录收入。由于 Beancount 坚持批次匹配,它将强制以正确的成本适当减少存货,如果操作得当,这实际上可以确保你的毛利润计算准确无误。然而,没有自动的 SKU 跟踪或其他功能——所有操作都停留在财务层面(数量和成本)。
  • 薪资和复杂交易: Beancount 可以记录薪资交易(工资费用、预扣税款等),但这些数字的计算可能需要在外部或通过其他工具完成,然后才记入 Beancount。对于非常小的企业(例如一到两名员工),这是可管理的。例如,你会为每个发薪期记录一笔单独的日记账分录,其中列出工资、预扣税、雇主税费、支付现金等。手动执行此操作类似于在 QuickBooks 日记账分录中进行操作——它需要了解要影响哪些账户。
  • 多用户和审计: 在商业环境中,一个挑战是如果多人需要访问账簿,或者会计师需要审查账簿。由于 Beancount 是一个文本文件,它不支持实时多用户。然而,将文件托管在 Git 仓库中可以实现协作:每个人都可以编辑和提交,并且可以合并差异。
  • 法规遵从性: 对于报税或合规性,Beancount 的数据可用于生成必要的报告,但这可能需要自定义查询或插件。我们看到了一个用于印度政府合规报告的社区插件示例,以及一个用于 FinCEN FBAR 报告的插件。这表明,通过努力,Beancount 可以适应满足特定的报告要求。在要求简单(现金会计或基本权责发生制)的司法管辖区,小型企业当然可以在 Beancount 中维护账簿并生成用于报税的财务报表。然而,折旧计划或摊销等功能可能需要你自己编写分录或使用插件(例如,Dave Stephens 的折旧插件有助于自动化此过程)。没有像某些会计软件那样“点击折旧资产”的图形用户界面;你需要将折旧编码为交易(这在某种程度上使其不再神秘——一切都是你可以检查的分录)。

实际上,许多技术导向的小企业主如果更喜欢控制和透明度而非 QuickBooks 的便利性,都会使用 Beancount(或 Ledger/hledger)。Reddit 上的一项讨论指出,对于交易量有限的标准小型企业会计,Beancount 运行良好。限制因素通常是舒适度——企业主(或其会计师)是否习惯使用基于文本的工具。一个优点是成本:Beancount 是免费的,而会计软件对于小型企业来说可能很昂贵。另一方面,缺乏官方支持和其 DIY 性质意味着它最适合那些既是企业主又有点技术倾向的人。对于具有编程技能的自由职业者或个体经营者,Beancount 可以是一个有吸引力的选择,无需依赖云会计服务即可管理财务。

混合方法也是可行的:一些小型企业使用官方系统处理发票或薪资,但定期将数据导入 Beancount 进行分析和存档。这样,他们可以两全其美——日常运营的合规性和便捷性,以及 Beancount 提供综合洞察力的强大功能。

总之,Beancount 可以处理小型企业会计,前提是用户愿意手动管理商业软件自动化处理的事项。它确保了高度的透明度——因为你亲自记录账簿,所以你能深入理解它们——对于勤勉的用户来说,它可以生成完美的账簿。个人用户和企业用户都受益于 Beancount 的核心优势:可靠的会计引擎、完整的审计追踪,以及通过脚本和插件适应独特场景的灵活性。无论是跟踪家庭预算还是初创公司的财务,Beancount 都提供了一个工具包,以精确和开放的方式完成这些工作。

社区与开发活动

Beancount 拥有一个专注的社区和一段反映其开源、小众但充满热情的特性的发展历程。以下是关于其社区、维护者和相关项目的要点:

  • 项目维护: Beancount 的主要作者是 Martin Blais,他于 2007 年左右启动了该项目,并将其引导至多个版本。长期以来,该项目的开发主要由他一人完成(除了社区贡献的补丁)。Martin 的理念是构建一个“首先对我自己有用,同时也能以最简单、最持久的方式为他人服务”的记账工具。这种个人动机使该项目作为一项热爱的工作得以持续。截至 2025 年,Martin Blais 仍然是主要维护者(他的名字出现在提交记录中,并在邮件列表/问题追踪器上回答问题),但 Beancount 周围的生态系统中有许多其他贡献者在各自的项目中做出贡献。

  • GitHub 与仓库: 源代码托管在 GitHub 的 beancount/beancount 仓库下。该项目采用 GPL-2.0 许可,多年来吸引了数量适中的贡献者。2024 年年中,** Beancount 版本 3** 正式发布,成为新的稳定分支。此版本涉及拆分一些组件:例如,** beangulp** 仓库(用于导入器)和 beanquery 仓库(用于查询工具)现在是 beancount GitHub 组织的一部分,并得到一定程度的独立维护。Beancount 主仓库专注于核心记账引擎和文件解析器。截至 2025 年,Beancount 的 GitHub 显示活跃的问题讨论和一些正在进行的开发——尽管数量不大,但问题和拉取请求持续不断地涌入,并且会不时进行更新以修复错误或完善功能。

  • Fava 开发: Fava,作为网页界面,最初是一个独立项目(由 Dominic Aumayr 创建,并于 2016 年获得版权)。它拥有自己的贡献者社区,也托管在 GitHub 的 beancount/fava 下。Fava 的维护者和贡献者(例如 Jakob Schnetz、Stefan Otte 以及近年来的其他贡献者)一直在积极改进界面,每隔几个月就会发布新版本。Fava 的 Gitter 聊天(链接在 Fava 文档中)和 GitHub 问题追踪器是用户和开发者讨论新功能或错误的地方。该项目欢迎贡献,CHANGELOG 中感谢多位社区成员的拉取请求(PRs)就是证明。Fava 与 Beancount 开发的紧密结合(例如迅速添加对 Beancount v3 和新 beanquery 语法的支持)表明这两个项目之间有良好的协作。

  • 邮件列表与论坛: Beancount 设有一个官方邮件列表(之前在 Google Groups 上,标题为“Beancount”,有时也会在通用的 Ledger 列表上讨论)。这个邮件列表是一个知识宝库——用户会提出关于如何建模特定场景的问题、报告错误并分享技巧。Martin Blais 以在邮件列表上提供详细解释而闻名。此外,更广泛的纯文本记账社区存在大量重叠。Ledger CLI 邮件列表也经常讨论 Beancount 相关问题,并且在 plaintextaccounting.org 上有一个论坛,以及一个名为 r/plaintextaccounting 的 subreddit,Beancount 相关话题经常出现。这些平台上的用户讨论比较、分享个人设置并帮助新用户。社区的总体氛围非常合作——Beancount 用户经常帮助 Ledger 用户,反之亦然,他们都认识到所有这些工具都有相似的目标。

  • 聊天群组: 除了邮件列表,还有聊天频道,例如纯文本记账 Slack/Discord(社区组织)和 Fava Gitter。这些是更非正式、更实时的获取帮助或讨论功能的方式。例如,有人可能会在 Slack 上询问是否有人有针对特定银行的导入器。还有一个 Matrix/IRC 频道(历史上在 IRC 上是 #ledger 或 #beancount),一些长期用户会在那里挂机。虽然这些频道的用户数量不如主流软件社区那么多,但它们拥有知识渊博的人士,通常可以回答一些晦涩的记账问题。

  • 贡献者与主要社区成员: 在 Beancount 社区中,有几个名字脱颖而出:

    • “Redstreet” (Red S): 一位多产的贡献者,编写了许多插件(如 beancount-balexprsellgains 等),并经常提供支持。他还维护了一套导入脚本和一个名为 bean-download 的工具来获取对账单。
    • Vasily M (Evernight): 一些导入器框架和插件(如 beancount-valuation)的作者,并为 Fava 在投资方面做出了贡献。
    • Stefano Zacchiroli (zack): 一位 Debian 开发者,为 Emacs 创建了 beancount-mode 和他自己的插件仓库。他还在学术界倡导纯文本记账。
    • Simon Michael: 虽然他主要是 hledger 的负责人,但他运营着 plaintextaccounting.org,其中包含了 Beancount。这种交叉传播有助于将 Beancount 引入 Ledger/hledger 用户的视野。
    • Frank hell (Tarioch): Tarioch Beancount Tools 的贡献者,这是一套主要的导入器和价格获取器,尤其适用于欧洲机构。
    • Siddhant Goel: 一位社区成员,他撰写关于 Beancount 的博客文章(例如,他关于迁移到 v3 的指南)并维护一些导入器。他的博客文章帮助了许多新用户。

    这些以及许多其他贡献者在论坛上贡献代码、文档并提供帮助,使这个生态系统尽管规模相对较小,但充满活力。

  • GitHub 统计与分支: Beancount 的 GitHub 仓库已积累了数百个星标(表明关注度)和分支。Beancount 本身值得注意的分支很少见——没有一个知名的分叉试图成为“带有功能 X 的 Beancount”。相反,当用户想要不同的东西时,他们要么编写插件,要么使用其他工具(如 hledger),而不是分叉 Beancount。可以将 hledger 视为 Ledger 的一种分支(而非 Beancount),而 Beancount 本身则是对 Ledger 理念的独立重新构想,但在 Beancount 的仓库内部并没有大型的分裂项目。社区通常围绕主仓库凝聚,并通过插件接口对其进行扩展,而不是碎片化代码库。这可能是因为 Martin Blais 对外部贡献持开放态度(他的文档甚至有一个部分承认外部贡献和模块),并且插件架构使得为大多数新功能维护一个分支变得不必要。

  • 社区资源: 社区创建了几个高质量的资源,用于学习和使用 Beancount:

    • GitHub Pages 上的 Beancount 文档(以及 Martin 维护的原始 Google 文档)——非常全面,包括会计理论和 Beancount 如何实现它。

    • 大量的博客文章和个人笔记——例如,LWN.net 曾发表一篇题为“用 Beancount 记账……”的文章,许多个人博客(如 Awesome Beancount 的“博客文章”部分所列)分享了经验和技巧。这些有助于积累知识并吸引新用户。

    • 讲座和演示: Beancount 曾在聚会和会议上进行过演示(例如,2018 年 PyMunich 上关于使用 Python/Beancount 管理财务的讲座)。此类讲座将该工具介绍给更广泛的受众,并经常在 Hacker News 等论坛上引发兴趣。

  • 值得注意的相关项目: 除了 Fava,其他一些与 Beancount 相关的项目也有自己的社区:

    • 纯文本记账网站——由 Simon Michael 维护,它汇总了所有此类工具的信息,并设有一个论坛,人们在其中分享包括 Beancount 在内的各种工具的使用经验。
    • 财务工具集成: 一些用户将 Beancount 与商业智能工具或数据库集成。例如,一个 Google Groups 帖子详细介绍了通过自定义函数将 PostgreSQL 与 Beancount 数据结合使用。虽然这并非主流,但它展示了社区在推动 Beancount 功能(例如,处理非常大的数据集或超越内置功能的复杂查询)方面的实验精神。

总结来说,Beancount 的社区虽然比大型开源项目小,但高度活跃且知识渊博。该项目持续获得改进,并拥有非常有用的支持渠道。协作精神(分享导入器、编写插件、回答问题)意味着 2025 年的新用户可以依靠大量前人工作和社区智慧来设置他们的记账系统。从生态系统的角度来看,开发是活跃的——Fava 发布、插件开发等——即使核心的更改更为偶尔。生态系统的增长(如 Awesome Beancount 列表中数十种工具所证明)表明一个健康的社区正在使 Beancount 变得越来越强大。

最新进展与未来功能

截至 2025 年,Beancount 生态系统在过去几年中取得了显著发展,并且关于未来的增强功能正在持续讨论中。以下是一些值得关注的最新进展以及对未来可能出现的功能的展望:

  • Beancount 3.0 发布 (2024): 在 Beancount 2.x 作为标准版本运行了很长一段时间后,3.0 版本于 2024 年年中正式发布。这是一个重要的里程碑,因为 v3 代表了代码库的简化和现代化。Martin Blais 曾设想 v3 是一个进一步“重组和简化”系统的机会。虽然最初被认为是一次大规模重写,但实际上对用户而言,此次更新并未造成太大干扰。主要变化是底层的:一个新的解析器、一些性能改进,以及将可选组件从核心中剥离出来。此次发布是逐步进行的(v3 自 2022 年以来一直处于测试阶段,但到 2024 年 7 月,它成为了推荐的稳定版本)。Siddhant Goel 等用户报告称,从 2.x 迁移到 3.x “基本顺利”,只有少数工作流程发生了变化。

  • 模块化——工具迁移到独立包: Beancount 3 的一个重大变化是,许多过去存在于单一代码库中的工具被拆分出来。例如,** bean-query** 现在由 beanquery 包提供,而 beancount.ingest 则被 beangulp 包取代。像 bean-extractbean-identify(用于导入)这样的命令已从 Beancount 核心中移除。取而代之的是,其理念是使用独立的脚本进行导入。这意味着,如果你升级到 v3,你将安装 beangulp 并运行导入器脚本(每个导入器本质上是一个小程序),而不是拥有一个中央的 bean-extract 配置文件。同样,查询通过 beanquery 执行,它可以独立于 Beancount 核心进行安装和更新。这种模块化方法旨在简化维护并鼓励社区贡献。它还精简了 Beancount 的核心,使核心纯粹专注于解析和记账逻辑,而辅助功能可以独立发展。从用户角度来看,升级后必须调整命令(例如,使用 beanquery 中的 bean-query,或者使用 Fava,Fava 无论如何都会抽象化这些)。Fava 的更新日志明确指出了这些变化:Fava 现在依赖于 beanquery 和 beangulp,并且它针对 Beancount 3 和 2 处理导入工作流程的方式有所不同。

  • 性能改进: 性能是重新审视 Beancount 设计的动机之一。v3 计划(如 Martin 的“v3 目标”文档中所述)包括优化解析器,并可能使加载过程更快、内存占用更少。截至 2025 年,其中一些改进已经实现。据传闻,拥有非常大账本(数万笔交易或大量股票交易)的用户报告称,最新版本的性能有所提升。例如,一位处理“微投资交易”并面临性能问题的用户在 Google Group 上指出了这些担忧——这类反馈很可能为 v3 的开发提供了信息。新的解析器效率更高,编写方式更清晰,未来可以进行扩展。此外,Fava 1.29 采用了更高效的文件监控机制(使用 watchfiles 库),以提高账本更改时的响应速度。展望未来,社区可能会探索增量解析(仅重新处理文件中更改的部分,而不是全部)以更快地处理大型账本——这在文档中曾被暗示为“Beancount 服务器 / 增量记账”的概念。

  • 投资跟踪增强: 一直在进行的工作是改进投资和投资组合报告。例如,** 平均成本法**与先进先出法 (FIFO) 的处理方式进行了深入讨论。虽然 Beancount 强制批次匹配,但有些用户在特定司法管辖区更喜欢平均成本法。目前存在一项提案和讨论,旨在使成本基础记账更灵活(可能通过插件或选项实现)。截至 2025 年,尚未内置平均成本法的切换功能,但 v3 中的基础工作(记账重新设计)使插件更容易实现。一个名为“Gains Minimizer”的社区插件已发布,它可以建议出售哪些批次以最大限度地减少税收,这展示了围绕投资正在构建的先进工具。Fava 也增加了诸如投资组合摘要扩展(包含回报率计算)等功能。就即将推出的功能而言,可以期待更多此领域的内容:可能包括自动投资组合再平衡建议或风险分析,这些很可能是读取 Beancount 数据的外部工具(因为所有数据都已存在)。

  • 新插件和扩展: 插件生态系统持续增长。近期值得注意的补充包括:

    • 预算报告工具——例如,如果不使用 Fava 的 UI,可以有一个简单的命令行预算报告器。
    • 加密和安全——引入了 fava-encrypt 设置,允许 Fava 在线托管,同时账本在静态时加密,解决了自托管财务数据的担忧。
    • 质量改进插件——例如 autobean-format(一个新的格式化工具,通过解析和重新打印文件可以处理更多边缘情况),以及编辑器中的 beancheck 集成(Emacs 的 flymake)。

    展望未来,社区可能会继续通过插件来填补空白。例如,我们可能会看到更多税务相关插件(一些用户分享了用于计算洗售或特定本地税务报告的脚本)。

  • 潜在的未来功能: 根据问题跟踪器和邮件列表上的讨论,一些想法正在酝酿中(尽管不保证实现):

    • 时间精度: 目前,Beancount 只跟踪交易日期(没有时间戳)。有人提出关于添加时间(用于股票交易或同日交易排序)的问题。Martin Blais 明确决定,为了保持简单,不考虑亚日时间戳。这不太可能很快改变——因此未来的版本可能不会添加时间精度,坚持的立场是,如果你需要时间,请将其纳入叙述或账户中。
    • 增强的 GUI 编辑: Fava 正在持续改进其编辑功能。一种可能性是开发一个功能更全面的网页编辑器(带有自动建议,也许是基于表单的新交易录入)。Fava 编辑器中使用了 tree-sitter 的基础工作已经完成。我们可能会看到 Fava 不仅仅是一个查看器,而是一个更强大的编辑器,从而在许多任务中减少打开文本编辑器的需要。
    • 更好的多账本支持: 一些用户维护多个 Beancount 文件(用于不同的实体或区分个人与商业)。目前,包含文件是可行的,但存在限制(包含文件中的插件等)。最近创建了一个名为 autobean.include 的插件,用于安全地包含外部账本。未来,我们可能会看到对多文件设置的一流支持——也许是 Beancount“项目”的概念,包含多个文件(VSCode 扩展的 beancount.mainBeanFile 设置等功能暗示了这一点)。这将有助于那些进行多实体记账或希望模块化其账本的用户。
    • 实时或增量计算: 随着账本的增长,快速重新计算报告的能力变得非常重要。有一个 Beancount 服务器的概念,它可以持续运行并随着交易的变化更新结果。这可能表现为 Fava 中的优化,或者是一个编辑器插件可以查询的守护进程。也许未来的 Fava 版本将利用持续运行的 Beancount 进程,使大型账本的 UI 响应更迅速。
    • 基金会计 / 非营利功能: 曾有一个关于 Beancount 中基金会计的增强提案。非营利组织有会计需求(受限资金与非受限资金),这可能通过 Beancount 的标签或账户层级进行建模。讨论尚未导致内置功能,但如果更多非营利组织采用 Beancount,这可能会推动新功能(也许只是记录最佳实践或用于基金余额跟踪的插件)。
  • 长期展望: Martin Blais 暗示,他认为 Beancount 的未来在于使核心更像一个引擎,并将更多功能转移到插件中。这与我们所看到的(v3 中的模块化)是一致的。因此,从哲学角度来看,一个“即将到来的功能”是更大的可扩展性——甚至可能允许插件以受控方式定义新的指令类型或扩展语法。如果实现,Beancount 的核心可能会保持相对小巧和稳定,而生态系统将以附加组件的形式提供大多数新功能。这可能导致一个插件市场或更集中的插件列表,以便用户可以自由选择(Awesome Beancount 列表是这方面的一个开端)。

总而言之,2025 年的 Beancount 生态系统活跃且不断发展。Beancount 3.0 的发布是近期的一项重大事件,确保了项目未来的坚实基础。性能、工具和可用性(尤其是通过 Fava)方面的改进持续降低了入门门槛。虽然 Beancount 仍然是一个需要一定专业知识的工具,但由于这些发展,它现在比几年前更易于使用。未来的功能可能侧重于完善用户体验——更快的性能、更好的集成和专业化的扩展——而不是对核心理念进行剧烈改变。社区的发展轨迹表明,Beancount 将继续成熟,成为纯文本记账的核心,在复式记账的严谨力量与现代软件的便利性之间取得平衡。正如一位用户在 Hacker News 上打趣说,纯文本记账赋予你理解财务的“超能力”——而 Beancount 近期和未来的改进旨在让每个人都能更容易地运用这些超能力。

来源: Beancount 文档和代码库;Fava 文档;Martin Blais 的《Beancount 与 Ledger 比较》;Awesome 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 的治疗师记账基础

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

治疗是关于倾听;记账是关于倾听你的金钱。 当诊疗记录堆积如山,报销滞后时,一套透明的账簿就成了混乱中的平静。

经营私人诊所意味着要身兼两职:临床医生和企业主。虽然您的专业知识在于提供护理,但诊所的财务健康状况取决于清晰、一致的记账。对于治疗师来说,这项任务本身就具有一系列独特的挑战。

2024-08-24-bookkeeping-basics-for-therapists-with-beancount

为什么治疗记账感觉不同

治疗诊所的财务节奏很少遵循简单、可预测的模式。这种复杂性源于几个关键领域,这些领域使得标准记账软件常常感觉不合适。

  • 不规则的现金流。 您的收入来源很少是线性的。客户的共付额今天可能会到您的账户,但相应的保险报销可能需要数周甚至数月才能到账。再加上浮动付款计划,您管理的现金到账时间截然不同。这使得理解您 赚取 金钱的时间(权责发生制会计)与您 收到 金钱的时间(现金收付制会计)之间的区别至关重要。
  • 各种费用混杂。 运营现代诊所的费用迅速增加。从电子健康记录 (EHR) 订阅和支付处理费到责任保险和专业发展,如果不仔细跟踪,许多小额成本会悄悄吞噬您的利润率。
  • 免征销售税,但自雇税繁重。 虽然大多数心理健康服务免征销售税,但您并没有摆脱国税局的束缚。作为一名自雇专业人士,您有责任支付季度预估税,其中包括所得税和自雇税 (SECA),以支付社会保障和医疗保险。
  • HIPAA 敏感性。 您的财务数据与受保护的健康信息 (PHI) 交织在一起。使用第三方云软件进行记账可能会扩大您诊所的“攻击面”,从而为数据泄露创造另一个潜在的载体。像 Beancount 这样的纯文本会计系统将您的所有数据保存在您自己的计算机上,在您的控制之下,从而降低了这种风险。

Beancount 七步蓝图

Beancount 是一个功能强大的开源会计系统,它使用纯文本文件。它是免费的、私密的,并且足够灵活,可以处理治疗诊所独特的财务状况。以下是入门方法。

• 将个人和诊所资金分开

这是商业财务中不可协商的第一步。开设一个专门的企业支票账户和一张企业信用卡。从现在开始,每笔客户付款都进入此账户,每笔企业支出——从执照费到办公用品——都从此资金中支付。在 Beancount 中,您可以轻松指定这些,创建一个清晰的界限:每笔交易要么与个人相关,要么与诊所相关,消除了猜测。例如,您的新账户将变为 Assets:Bank:Practice

• 建立一个对治疗师友好的会计科目表

“会计科目表”只是您用来组织财务交易的所有类别的列表。将其视为您的资金归档系统。您将从五个主要账户类型开始:资产、负债、权益、收入和支出。然后,您可以创建专门针对您的治疗诊所的子账户。

2025-07-23 open Income:Therapy:SelfPay       USD
2025-07-23 open Income:Therapy:Insurance USD
2025-07-23 open Assets:AccountsReceivable USD
2025-07-23 open Expenses:CEU USD
2025-07-23 open Expenses:Software:EHR USD
2025-07-23 open Expenses:Licensing USD

这种结构使您可以准确地看到您的资金来自哪里(自费与保险)以及去向哪里(继续教育、软件等)。这反映了为心理健康专业人士发布的最佳实践图表。

• 选择现金制或权责发生制(并坚持下去)

您需要决定 何时 确认您的收入和支出。

  • 现金制: 您在收到现金时记录收入,在支付费用时记录支出。
  • 权责发生制: 您在 赚取 收入时(例如,完成一次诊疗后)和 发生 支出时记录它们,而不管金钱何时易手。

例如,如果客户预付 $1000 用于五次诊疗套餐,现金制会在付款当天记录全部 $1000 的收入。权责发生制会在每次完成诊疗后记录 $200 的收入,让您更准确地了解您的月收入。

经验法则: 个体诊所,很少有保险索赔 → 现金制更简单,而且通常足够。 集体诊所,大量报销 → 权责发生制可以更清晰地了解盈利能力。

• 跟踪应收账款和报销

Beancount 的最大优势之一是它能够跟踪您应得的款项。当您提交保险索赔时,您还没有收到付款,但您已经赚取了收入。您可以将其记录在您的 Assets:AccountsReceivable 账户中。当付款到账时(通常低于账单金额),您可以“结算”应收账款并计入保险核销。

2025-07-10 * "CPT 90837 诊疗 – 等待 BlueCross"
Assets:AccountsReceivable 150.00 USD
Income:Therapy:Insurance

2025-07-25 * "BlueCross 付款 CPT 90837"
Assets:Bank:Practice 135.00 USD
Expenses:InsuranceWriteOff 15.00 USD
Assets:AccountsReceivable -150.00 USD

这个两步流程可确保您永远不会丢失未完成的索赔,并拥有准确的保险调整记录。

• 及时对可扣除费用进行分类

密切关注您的支出是最大限度地减少税单的关键。美国国税局允许您扣除对您的职业“普通且必要”的支出。对于治疗师来说,这包括继续教育 (CEU) 课程、州规定的督导、执照续签费、责任保险和 EHR 订阅。通过在发生这些支出时对其进行分类,您将拥有一个准确的、年初至今的总数,可用于您的季度预估税和年终申报。

• 每周对账

对账是将您的 Beancount 账本中的交易与您的银行和信用卡对账单进行匹配的过程。它确认您的记录准确无误且完整。每周快速检查可以防止小错误变成大麻烦。使用 Beancount,您只需在终端中输入几个简单的命令即可。

# 检查您诊所银行账户的最终余额
bean-balance books.bean "Assets:Bank:Practice"

# 查看您的收入来源摘要
bean-query books.bean "SELECT account, SUM(position) WHERE account ~ 'Income' GROUP BY account"

# 生成年初至今的损益表
bean-report books.bean income_statement --end 2025-07-23

这个简单的循环——分类、对账和报告——是任何私人诊所进行健全财务管理的基础。

• 自动化和备份

拥抱自动化以节省时间并减少错误。

  • 使用 bean-extract 等提取工具将来自您的银行或 EHR 的 CSV 文件自动转换为 Beancount 交易条目。
  • 将福利说明 (EOB) 或 CEU 证书等重要文档的 PDF 文件存储在专用文件夹中,并使用 document: 元数据将其直接链接到账本中的相关交易。
  • 您的 .bean 账本是一个简单的文本文件,非常适合版本控制。每晚将您的账本推送到私有 Git 存储库(例如 GitHub 或 GitLab)以进行安全的异地备份。

常见陷阱(和快速修复)

即使有良好的系统,一些常见的错误也会让治疗师绊倒。以下是如何发现和修复它们的方法。

陷阱修复
净存款会计(将所有收入/费用汇总)将每张保险支票拆分为 收入核销 行。
忘记爽约费发布一个单独的标记为 noshow 的收入行以保持清晰。
混合 CEU 和差旅费区分 Expenses:CEUExpenses:Travel——两者均可扣除,但跟踪方式不同。
忽略应收账款账龄按日期查询 Assets:AccountsReceivable 以追讨过期的索赔。

快速入门清单

  • 开设一个仅限诊所的银行账户和信用卡。
  • 克隆 Beancount 入门存储库并创建您的特定于治疗的会计科目表。
  • 决定使用现金制或权责发生制,并在您的 Beancount 选项中注明。
  • 为您的银行、EHR 或保险 CSV 下载编写一个简单的导入器配置。
  • 安排一个循环的“Bean-hour”(可能在周五下午)用于您的导入 → 对账 → 报告工作流程。
  • 为您的 .bean 文件设置自动异地备份,并每季度测试一次还原过程。

延伸阅读

准备好消除财务噪音了吗? 安装 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,提交你的第一个条目,让纯文本的清晰度为你在工作台上腾出更多时间。祝你记账愉快!

在 Beancount 中管理应收账款

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

在个人理财管理的迷宫中,Beancount 作为纯文本记账的清晰度和精确度灯塔而出现。尤其在管理应收账款——即预期从他人处收到的款项——方面,Beancount 提供了一种结构化的方法,以使你的财务记录保持完美有序。本博客将引导你了解使用 Beancount 追踪应收账款、处理退款以及管理未解决交易的复杂性。无论你是退货、借出资金还是等待退款,本文都是你实现财务清晰的路线图。

理解 Beancount 中的应收账款:

2024-02-17-navigating-receivables-beancount-guide

应收账款代表他人欠你的款项。这可能来自多种情况,例如购物退货后等待退款,或者你借钱给某人。例如,假设你已将一条手表带退回给像 Amazon.com 这样的在线商店,并正在等待退款。在 Beancount 中,此交易记录为资金从你的信用卡负债转移到你的资产,作为应收账款:

2023-10-31 * "Amazon.com" "[Return] Watch Strap"
Liabilities:CreditCard:Chase -12.00 USD
Assets:Receivables

管理退款:

一旦退款处理完毕且你收到款项,就会记录另一笔交易以抵消应收账款中的余额。这确保你的账户反映资金已回到你手中:

2023-11-01 * "Amazon.com" "[Refund] Watch Strap"
Liabilities:CreditCard:Chase 12.00 USD
Assets:Receivables

完整的交易周期:

涉及应收账款的完整进出交易是结合上述两笔交易并展示如下,演示了退款后的平衡账户:

2023-10-31 * "Amazon.com" "[Return] Watch Strap"
Liabilities:CreditCard:Chase -12.00 USD
Assets:Receivables

2023-11-01 * "Amazon.com" "[Refund] Watch Strap"
Liabilities:CreditCard:Chase 12.00 USD
Assets:Receivables

处理未解决的交易:

对于尚未收到退款或还款的交易,Beancount 使用 #UNRESOLVED 标签。此标签有助于识别和追踪仍待处理的金额。例如:

2023-10-31 * "John Doe" "Lending Money" #UNRESOLVED
Liabilities:CreditCard:Chase -100.00 USD
Assets:Receivables

通过关注标记为 #UNRESOLVED 的交易,你可以快速确定哪些金额尚未结清。

保持零余额:

在一个正确的分类账中,资产:应收账款账户下所有交易的总和(不包括带有 #UNRESOLVED 标签的交易)理想情况下应归零。这确保所有预期资金都已入账,维护了你财务记录的完整性。

例如,一个有效的分类账可能如下所示,其中一笔未解决的交易清晰标记,等待结清:

2023-10-31 * "Amazon.com" "[Return] Watch Strap"
Liabilities:CreditCard:Chase -12.00 USD
Assets:Receivables

2023-11-01 * "Amazon.com" "[Refund] Watch Strap"
Liabilities:CreditCard:Chase 12.00 USD
Assets:Receivables

2023-10-31 * "John Doe" "Lending Money" #UNRESOLVED
Liabilities:CreditCard:Chase -100.00 USD
Assets:Receivables

无效的分类账是指某笔交易导致应收账款账户未能归零,因此需要 #UNRESOLVED 标签进行修正。

结论

在 Beancount 中管理应收账款不必令人生畏。通过清晰地了解如何记录交易、管理退款以及关注未解决的交易,你可以维护准确可靠的财务记录。采用 Beancount 结构化的应收账款管理方法,不仅简化了你的财务追踪,还带来了安心,因为你知道每一分钱都已入账。那么,何不利用 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

一家蓬勃发展的公司和一个健康的钱包都有一个共同点:界限分明。

对于任何企业主,从自由职业者到成长型初创公司创始人,最关键的财务纪律之一就是严格区分企业和个人财务。混合资金——用你的企业账户购买杂货或用你的个人支票支付企业供应商——会造成混乱、不透明的财务状况。这不仅会招致税务机关的审查,还会让你无法清楚地了解公司的实际业绩。

2023-08-12-business-vs-personal-bookkeeping-with-beancount

幸运的是,像 Beancount 这样的纯文本会计系统提供了一个完美的框架,可以在你的账本中强制执行这些必要的界限。

为什么区分很重要

不区分你的财务状况不仅仅是一个坏习惯;它会带来重大风险,并掩盖有价值的商业情报。

  • IRS 的清晰度: IRS 不仅仅是建议你分开银行账户;他们强烈敦促你这样做。当企业和个人资金混在一起时,很难证明哪些支出是合法的企业扣除额。这种模糊性会导致你最好避免的问题和复杂性。
  • 审计风险: 混合交易是审计员的主要危险信号。如果你的账簿是一团糟的个人和企业活动的混合体,你就有可能被取消有效的扣除额,甚至面临处罚。一个干净、独立的账本展示了专业性,并使任何潜在的审计更加顺利,压力更小。
  • 更清晰的洞察力: 如果你的企业的现金流被个人支出所掩盖,你怎么能知道你真正的利润率呢?一个独立的企业账本可以让你清晰地了解公司的财务状况。你可以准确地跟踪收入、分析支出和计算税务负债,而不会受到个人财务生活的“干扰”。

主要区别一览

企业和个人簿记的目的、规则和结构根本不同。理解这些对比是维护准确记录的关键。

方面企业账簿个人账簿
目的跟踪收入、支出、资产和负债,用于税务和增长决策管理家庭预算和储蓄目标
税务规则必须遵循附表 C、1120‑S 或 1065;严格的扣除标准除基本记录保存外,几乎没有正式要求
账户权益、应付账款、应收账款、销售税、工资支票、储蓄、投资、贷款
所有者薪酬工资 (W‑2) 或通过权益提取的业主提款不适用——个人提款用于生活费用

Beancount 四步蓝图

Beancount 可以轻松地在你的两个财务世界之间建立一道坚固的墙。以下是一个正确的实用工作流程。

• 1 — 开设专用账户

在你写下第一个 Beancount 条目前,开设一个专用的企业支票账户和企业信用卡。这种物理上的分离是干净簿记的基础。完成后,在你的 Beancount 账本中反映这种结构。

2025-07-23 open Assets:Bank:Business   USD
2025-07-23 open Assets:Bank:Personal USD

这个简单的设置确保了从交易发生的那一刻起,每笔交易都可以清楚地分配给你的企业或个人财务。

• 2 — 记录所有者出资和提款

作为所有者,你将在你的个人资金和企业之间转移资金。这些不是收入或支出。相反,它们是通过权益账户跟踪的。

  • 出资: 当你将自己的资金 投入 企业以启动或弥补亏空时。
  • 提款: 当你从企业中 取出 资金用于个人用途时(这是许多个体经营者“支付”自己的方式)。
; 启动企业的注资
2025-07-23 * "所有者出资"
Assets:Bank:Business 10,000.00 USD
Equity:Owner:Contrib

; 取出现金用于个人生活费用
2025-08-05 * "业主提取租金"
Equity:Owner:Draw 2,500.00 USD
Assets:Bank:Business

通过将这些记录为权益交易,你可以确保它们不会错误地夸大你的企业支出或减少你报告的利润。

• 3 — 快速处理混合收据

错误是难免的。你可能会不小心用你的企业卡支付了个人晚餐。关键是在你的账本中立即更正它。不要删除交易;将其重新分类为所有者提款。

2025-08-07 * "用企业卡购买的个人杂货"
Equity:Owner:Draw 72.35 USD
Assets:Bank:Business

此条目正确反映了企业资金用于个人支出,将其视为你从公司取出的资金。这可以防止你意外地在税款中申报不可扣除的个人支出。

• 4 — 按计划对账和审查

一致性是你对抗混乱账簿的最佳防御措施。每周或每月留出时间来核对你的企业账户。使用 Beancount 的工具来确保你的账本与你的银行对账单相符,并审查你公司的业绩。

# 检查你的企业银行余额与你的对账单是否相符
bean-balance books.bean "Assets:Bank:Business"

# 生成损益表以审查盈利能力
bean-report books.bean income_statement -e 2025-08-31

这种定期审查的习惯满足了 IRS 的记录保存要求,并让你随时了解企业的财务状况。

税务注意事项

  • 预估税: 为了避免巨额税单,将你未来的税款视为一项持续的企业支出。创建负债账户(Liabilities:Tax:FederalLiabilities:Tax:State),并定期将每笔存款的一定比例转移到这些账户中。当季度付款到期时,现金已经到位。
  • 不可扣除的个人费用: 记住 IRS 的规则:企业支出必须对你的工作“普通且必要”。你的个人餐费、通勤费用和非企业订阅不符合条件,必须完全排除在企业的损益表之外。

快速入门清单

  • 开设仅限企业的银行和信用卡账户。
  • 使用 Assets:Bank:BusinessEquity:Owner:ContribEquity:Owner:Draw 构建 Beancount 科目表。
  • 决定你的会计基础(现金制或权责发生制),并在你的 Beancount options 中注明。
  • 立即将企业卡上的任何意外个人费用标记为 Equity:Owner:Draw
  • 每周对账;将你的 .bean 文件备份到私有的 Git 远程服务器。
  • 每月审查你的损益表、资产负债表和现金流量表。

底线: 分开资金,分开账本。Beancount 使你的企业和个人财务之间的界限明确——并且版本控制——因此你的企业始终处于审计就绪状态,而你的拿铁习惯除了你之外谁也不知道。祝你记账愉快!

在 Beancount 中建模房地产交易

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

房地产交易可能构成一个家庭一生中最大的金融活动。本文解释了如何在 Beancount 中建模房地产。我将房地产视为一项资产,房屋的增值视为未实现收益。此外,抵押贷款被建模为负债,利息被视为费用。

假设 A 先生于 2020 年 1 月 1 日购买了一套位于 123 ABC Street, XYZ City, CA, 12345 的豪宅,价格为 100 万。利率为 3.0%,首付为 20%,贷款金额为 80 万。

项目金额
抵押贷款金额800,000
利率3%
抵押贷款期限30 年
抵押贷款总成本1,478,219.62
每月还款额4,106.17
房屋保险每年 1,300 (总计 39,000)
房产税每年 7,500 (总计 225,000)
贷款还清日期2049 年 12 月
已付总利息414,219.62

2023-06-09-房地产追踪

抵押贷款详情截图

创建账户

首先,我们将房屋视为一项资产。由于房屋被列为资产,它需要被赋予一个单位。在这种情况下,单位数量只有一个,不太可能出现多个,即使是第 N 套房屋,我们也会希望将其记录在单独的资产中。也就是说,一套房屋对应一项资产,并且这项资产有一个特殊的单位,其值只能是 1。

2019-12-31 commodity HOUSE.ABC
name: "123 ABC Street, XYZ City, CA, 12345"

2019-12-31 open Assets:Property:US:CA:123ABC HOUSE.ABC
2019-12-31 open Liabilities:Bank:US:SomeBank:Mortgage:Loan USD

在这里的第一行,我们定义了一个代表房屋的商品单位。在第四行,我们定义了一个资产账户,它持有之前定义为房屋的商品单位。在第五行,我们定义了一个贷款银行的账户。由于它是一项负债,因此属于负债类别。

购买

按照上述账户设置,购买房屋的行为等同于

借款(债务)+ 支出(首付)= 1 套房屋资产

购买房产时最重要的参考可能是买方结算声明,它清楚地列出了资金流向。

2020-01-01 * "Buying the house"
Assets:Property:US:CA:123ABC 1 HOUSE.ABC {1,000,000 USD}
Assets:Bank:US:SomeBankA -100,000 USD
Assets:Bank:US:SomeBankB -101,000 USD
Liabilities:Bank:US:SomeBank:Mortgage:Loan -800,000.00 USD
Expenses:Home:Insurance 1,000 USD
Expenses:Home:Mortgage:Loan:ClosingCost

在这里,我们详细说明了购房交易,其中资金从某些银行流出(用于首付和其他费用),获得贷款(增加负债),并获得一套房屋(增加资产)。

偿还抵押贷款

根据上述购买记录,我们目前欠款 80 万美元。由于利息的存在,并且考虑到美国所有贷款都是本金和利息均等摊销的,因此每月还款额包括一部分利息和一部分本金。在早期阶段,利息占大部分。

要记录贷款还款,你只需查看你的贷款银行对账单。你只需要知道每月偿还了多少本金,其余部分就是利息。利息被计为费用。

2020-02-01 * "Mortgage payment"
Assets:Bank:US:SomeBank:Saving:Joint -3,372.83 USD
Liabilities:Bank:US:SomeBank:Mortgage:Loan 1,376.26 USD
Expenses:Home:Mortgage:Loan:Interest

此分录详细说明了每月抵押贷款还款,该款项从你的联名储蓄账户中扣除。本金的偿还减少了负债,而利息部分则被视为费用。

增值

如果你想记录房产的增值,有些人会创建一个单独的账户,只记录当前房产的增值。考虑到房屋的价值可能会增加或减少,这种增值也可能是负的。这样做的好处是,在你的总资产汇总中,这两个账户都会被包含在内,一个用于记录交易时的房屋价值,另一个用于记录房屋当前的增值,从而反映房屋的实时价格。

我没有采用这种方法,主要原因如下:

  1. 房屋的当前价值只能是一个估算值,仅供参考,没有实际价值。通常,我只能在 Redfin 或 Zillow 等网站上获得房产估值,我个人认为其参考价值不高。我也没有考虑将这些增值实时纳入总资产。
  2. 我个人认为,在抵押贷款还清之前,如果房屋的现金流为负,某种程度上,该房产仍然是一项负债。因此,过早地将其纳入资产会给你一种资产丰富和增值的错觉,我个人希望避免这种错觉。

我用来记录房产增值的方法,稍后也将讨论如何建模 RSU。这种方法是使用一个虚拟货币单位。假设你的基础货币是美元,我们可以使用 USD.UNVEST(似乎没有必要为此创建一个新的商品)来表示该资产以特殊货币计算。该资产的增长或减少将不会以美元记录。通过这种方式,我可以实现我的最初目标,即记录房屋的增值,并且这种增值不会包含在最终的资产负债表(Balance Sheet)中。

2020-01-01 price HOUSE.ABC                          1,000,000 USD
2025-01-01 price HOUSE.ABC 1,400,000 USD.UNVEST

你只需要定期将你的房产定价为 USD.UNVEST。

因此,在 Fava 的商品页面上,你可以追踪房屋参考价格的趋势。但在资产负债表页面上,房屋的价格仍然是交易时的房屋价格。也就是说,你的总资产仍然是你当时的首付款,加上你不断偿还的本金。这项资产的最终变动只应发生在你购买房屋时。

房产价格图表截图

出售

由于尚未出售任何房产,且中间的各种杂费不明确,这是一个假设情景。

假设,在 2025 年 1 月 1 日,房产已增值至 1,400,000 美元,一些参考数据如下:

项目金额
余额709,656.20
代理费 (6%)72,000
其他过户费10,000

A 先生决定出售该房产,最终房屋售价为 1,300,000 美元。

2025-01-01 * "Selling the house"
Assets:Property:US:CA:123ABC -1 HOUSE.ABC {1,300,000 USD}
Liabilities:Bank:US:SomeBank:Mortgage:Loan 709,656.20 USD
Expenses:Home:Agent:Fee 72,000 USD
Expenses:Home:ClosingCost 10,000 USD
Expenses:Home:Tax 90,000 USD
Assets:Bank:US:SomeBankA

这里假设 5 年中有 2 年是自住的,因此 50 万的增值无需纳税。我在这里随机计算了一个数字。最终,进入 A 先生账户的资金是 418,343.8 美元,其中 20 万是当时的首付款,大约 10 万是已支付的利息。因此,最终 A 先生的账面利润约为 10 万。值得注意的是,我的计算不尽公平,毕竟 A 先生在这 5 年中节省了租金,而且房屋可能还有其他开销,例如维护、装修等。

为了在资产负债表中反映这一点,你可以添加此定价。

2025-01-01 price HOUSE.ABC                          1,300,000 USD

理解 Beancount 中的应收账款和应付账款

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

大家好!在今天的博客文章中,我们将深入探讨 Beancount 的世界,这是一款因其简洁和强大而备受推崇的复式记账工具。更具体地说,我们将讨论两个关键概念:应收账款和应付账款。

理解这些术语对于有效使用 Beancount(或任何复式记账系统)至关重要。但如果你是初学者,请不要担心——我们将一步一步地为你详细解释!

应收账款和应付账款:基础知识

应收账款和应付账款

在会计中,“应收账款”和“应付账款”是用于追踪欠款的术语。“应收账款”指他人欠你的钱,而“应付账款”指你欠他人的钱。

让我们举个例子:

  1. 应收账款 (A/R):假设你拥有一家书店,一位顾客赊账购买了一本书。他们欠你购买这本书的钱就是一笔应收账款。

  2. 应付账款 (A/P):另一方面,想象一下你从出版商那里订购了一套新书,但没有预先支付。你欠出版商的钱就是一笔应付账款。

在 Beancount 中,这些通常通过相应的账户进行追踪。这里的主要好处是,它能让你在任何时间点清晰准确地了解自己的财务状况。

在 Beancount 中设置应收账款和应付账款

你的 Beancount 文件结构可以根据你的需要简单或复杂。对于应收账款和应付账款,你可能希望在你的资产 (Assets) 和负债 (Liabilities) 部分下创建单独的账户。

这是一个简单的例子:

1970-01-01 open Assets:AccountsReceivable
1970-01-01 open Liabilities:AccountsPayable

追踪交易

收款方

设置好账户后,你可以追踪涉及应收账款和应付账款的交易。让我们看一个例子:

2023-05-29 * "Sold books to customer on credit"
Assets:AccountsReceivable 100 USD
Income:BookSales -100 USD

在这里,你将 100 美元添加到你的应收账款中,因为客户欠你这笔钱。同时,你将收入减少相同的金额以保持平衡(因为你尚未实际收到这笔钱)。

当客户最终付款时,你将这样记录:

2023-06-01 * "Received payment from customer"
Assets:Bank:Savings 100 USD
Assets:AccountsReceivable -100 USD

付款方

同样的原则也适用于应付账款,但符号相反:

2023-05-30 * "Bought books from publisher on credit"
Liabilities:AccountsPayable 200 USD
Expenses:BookPurchases -200 USD

当你还清债务时:

2023-06-02 * "Paid off debt to publisher"
Liabilities:AccountsPayable -200 USD
Assets:Bank:Checking 200 USD

总结

应收账款和应付账款是任何会计系统的核心。通过准确追踪这些,你可以全面了解自己的财务状况。

这只是一个起点,Beancount 的功能远不止于此。我希望这篇博客文章能帮助你澄清这些重要概念。一如既往,祝你记账愉快!