跳到主要内容

90 篇博文 含有标签「Accounting」

查看所有标签

企业与个人簿记:使用 Beancount 划清界限

· 阅读需 6 分钟
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 中建模房地产交易

· 阅读需 6 分钟
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 中的应收账款和应付账款

· 阅读需 3 分钟
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 的功能远不止于此。我希望这篇博客文章能帮助你澄清这些重要概念。一如既往,祝你记账愉快!

解构 Beancount 账本:企业会计案例研究

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

在今天的博客文章中,我们将深入剖析一个专为企业设计的 Beancount 账本,帮助你理解这种纯文本复式记账系统的复杂细节。

解构 Beancount 账本:企业会计案例研究

我们先从代码开始:

2023-05-22-business-template

1970-01-01 open Assets:Bank:Mercury
1970-01-01 open Assets:Crypto

1970-01-01 open Equity:Bank:Chase

1970-01-01 open Income:Stripe
1970-01-01 open Income:Crypto:ETH

1970-01-01 open Expenses:COGS
1970-01-01 open Expenses:COGS:Contabo
1970-01-01 open Expenses:COGS:AmazonWebServices

1970-01-01 open Expenses:BusinessExpenses
1970-01-01 open Expenses:BusinessExpenses:ChatGPT

2023-05-14 * "CONTABO.COM" "Mercury Checking ••1234"
Expenses:COGS:Contabo 17.49 USD
Assets:Bank:Mercury -17.49 USD

2023-05-11 * "Amazon Web Services" "Mercury Checking ••1234"
Expenses:COGS:AmazonWebServices 14490.33 USD
Assets:Bank:Mercury -14490.33 USD

2023-03-01 * "STRIPE" "Mercury Checking ••1234"
Income:Stripe -21230.75 USD
Assets:Bank:Mercury 21230.75 USD

2023-05-18 * "customer_182734" "0x5190E84918FD67706A9DFDb337d5744dF4EE5f3f"
Assets:Crypto -19 ETH {1,856.20 USD}
Income:Crypto:ETH 19 ETH @@ 35267.8 USD

理解代码

  1. 开立账户:代码首先在 1970-01-01 开立了一系列账户。其中包括资产账户(Assets:Bank:MercuryAssets:Crypto)、权益账户(Equity:Bank:Chase)、收入账户(Income:StripeIncome:Crypto:ETH)以及费用账户(Expenses:COGSExpenses:COGS:AmazonWebServicesExpenses:BusinessExpensesExpenses:BusinessExpenses:ChatGPT)。

  2. 交易记录:接着,代码记录了 2023-03-01 至 2023-05-18 期间的一系列交易。

    • 2023-05-14 的交易表示从 Mercury Checking ••1234CONTABO.COM 支付了 17.49 美元。这笔交易被记录为一项费用(Expenses:COGS:Contabo),并相应地从 Assets:Bank:Mercury 账户中扣除。

    • 同样,2023-05-11 的交易表示从同一银行账户向 Amazon Web Services 支付了 14490.33 美元。这笔交易记录在 Expenses:COGS:AmazonWebServices 下。

    • 2023-03-01 的交易显示来自 STRIPE 的收入存入 Mercury Checking ••1234,总计 21230.75 美元。这笔交易被记录为收入(Income:Stripe),并增加到银行账户(Assets:Bank:Mercury)中。

    • 2023-05-18 的最后一笔交易代表一笔涉及客户 19 ETH 的加密货币交易。这笔交易记录在 Assets:CryptoIncome:Crypto:ETH 下。{1,856.20 USD} 显示了交易时 ETH 的价格,而 @@ 35267.8 USD 则指明了这笔 19 ETH 交易的总价值。

在所有交易中,都遵循了复式记账原则,确保 资产 = 负债 + 权益 的等式始终成立。

总结

这个 Beancount 账本提供了一个直接而强大的财务交易追踪系统。正如最后一笔交易所示,Beancount 足够灵活,可以核算加密货币等非传统资产,这证明了它在我们日益数字化的金融环境中的实用性。

我们希望这次剖析能帮助你更好地理解 Beancount 的结构和功能,无论你是经验丰富的会计师还是尝试管理个人财务的初学者。敬请关注我们的下一篇博客文章,届时我们将深入探讨 Beancount 的高级操作。

重新推出新客户免费计划

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

我们很高兴地宣布,自2023年5月1日起,我们将重新推出面向新客户的免费计划。这一决定是在我们对平台进行重大改进并优化资源之后做出的,旨在更好地服务所有客户,无论是免费用户还是付费用户。

推出面向新客户的全新免费计划

免费计划一直是我们愿景的重要组成部分,即为所有人提供可访问且用户友好的服务。我们相信,过去几个月所做的改进将使我们能够为用户提供更好的体验,同时保持对专业版计划客户的服务质量。

2023-04-28-start-serving-free-users

2023年5月1日之后注册的新客户将可以使用免费计划。

**你的支持和忠诚是本次免费计划得以重新推出的重要财务保障。**正是通过你的贡献,我们才得以投资于我们的基础设施和支持系统,确保我们能够继续提供你所期望的高质量服务,同时为新用户扩展我们平台的访问权限。你对我们愿景的承诺帮助我们成长和发展,我们衷心感谢你持续的合作。我们正在共同建设一个蓬勃发展的社区,并赋能各行各业的用户实现他们的目标。

如果你有任何疑问或疑虑,请随时与我们联系。我们随时乐意听取你的反馈并解决你可能遇到的任何问题。感谢你一直以来的支持,我们期待为你提供最优质的服务。

Beancount 速查表

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

账户名称示例

Assets:US:BofA:Checking

cheatsheet-en

账户类型

Assets          +
Liabilities -
Income -
Expenses +
Equity -

商品/货币

CNY, EUR, CAD, AUD
GOOG, AAPL, RBF1005
HOME_MAYST, AIRMILES
HOURS

指令

通用语法

YYYY-MM-DD <Directive> <Parameters...>

开立与关闭账户

2001-05-29 open Expenses:Restaurant
2001-05-29 open Assets:Checking USD,EUR ; 货币限制

2015-04-23 close Assets:Checking

声明商品/货币 (可选)

1998-07-22 commodity AAPL
name: "苹果电脑公司"

价格

2015-04-30 price AAPL   125.15 CNY
2015-05-30 price AAPL 130.28 CNY

备注

2013-03-20 note Assets:Checking "致电询问回扣事宜"

文档

2013-03-20 document Assets:Checking "path/to/statement.pdf"

交易

2015-05-30 * "关于此交易的描述"
Liabilities:CreditCard -101.23 CNY
Expenses:Restaurant 101.23 CNY

2015-05-30 ! "有线电视公司" "电话账单" #tag ˆlink
id: "TW378743437" ; 元数据
Expenses:Home:Phone 87.45 CNY
Assets:Checking ; 你可以省略其中一个金额

分录

  ...    123.45 USD                             简单
... 10 GOOG {502.12 USD} 带单位成本
... 10 GOOG {{5021.20 USD}} 带总成本
... 10 GOOG {502.12 # 9.95 USD} 带两种成本
... 1000.00 USD @ 1.10 CAD 带单位价格
... 10 GOOG {502.12 USD} @ 1.10 CAD 带成本与价格
... 10 GOOG {502.12 USD, 2014-05-12} 带日期
! ... 123.45 USD ... 带标记

余额断言与填充

; 仅断言指定货币的金额:
2015-06-01 balance Liabilities:CreditCard -634.30 CNY

; 自动插入交易以满足以下断言:
2015-06-01pad Assets:Checking Equity:Opening-Balances

事件

2015-06-01 event "location" "美国纽约"
2015-06-30 event "address" "梅街123号"

选项

option "title" "我的个人账本"

其他

pushtag #trip-to-peru
...
poptag #trip-to-peru
; 注释以分号开头

Beancount 纯文本记账的魔力

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

探索 Beancount 纯文本记账的魔力

Beancount.io 横幅

引言

2023-04-18-Beancount 介绍

欢迎来到一个记账不再是艰巨任务的世界。今天,我们向你介绍 Beancount,一个强大、灵活且直观的纯文本记账工具。Beancount 通过提供透明、直接的资金管理方法,让你能够掌控自己的财务。

在这份全面的指南中,我们将深入探讨 Beancount 的基础知识,解释其核心概念,并引导你了解其简单而强大的功能。阅读完这篇博客,你将对 Beancount 有扎实的理解,并准备好开始使用它来整理和分析你的财务生活。

什么是 Beancount?

Beancount 是由 Martin Blais 创建的一个开源纯文本记账系统。受 John Wiegley 的 Ledger 系统启发,Beancount 旨在提供一种强大可靠的方法,使用纯文本文件管理个人和小型企业的财务。通过 Beancount,你可以轻松追踪你的收入、支出、投资等等。

为什么选择 Beancount?

纯文本记账相比传统的基于电子表格或软件的记账系统具有多项优势:

  • 透明度:Beancount 文件是人类可读的,这使得理解和审计你的财务数据变得容易。
  • 灵活性:Beancount 可以轻松定制以满足你的特定需求,你可以使用你喜欢的文本编辑器和版本控制系统来管理你的财务数据。
  • 便携性:你的财务数据可以在任何设备上访问,并且易于在系统之间传输或与他人共享。
  • 面向未来:纯文本文件具有通用兼容性,确保你的财务数据即使随着技术发展也能保持可访问性。

Beancount 的核心概念

要有效使用 Beancount,理解其核心概念至关重要:

  • 交易:财务事件,例如收入、支出或账户之间的转账,都记录为交易。
  • 账户:交易涉及一个或多个账户,例如资产、负债、收入或支出。
  • 复式记账:Beancount 强制执行复式记账,确保每笔交易都有平衡的借方和贷方。
  • 指令:Beancount 使用一组指令来定义交易、账户开立和其他财务事件。

Beancount 入门

要开始使用 Beancount,请遵循以下简单步骤:

  • 安装 Beancount:根据你操作系统的安装说明,在你的系统上安装 Beancount。
  • 创建你的 Beancount 文件:创建一个新的纯文本文件,扩展名为 .beancount(例如,my_finances.beancount)。
  • 定义你的账户:使用 "open" 指令定义你将在交易中使用的账户。
  • 记录交易:使用 "txn" 指令记录你的财务交易。

或者直接在 https://beancount.io 注册。以下是一些纯文本记账示例 -

示例 1:基本交易

2023-04-01 open Assets:Checking
2023-04-01 open Expenses:Groceries

2023-04-10 txn "Grocery Store" "Buying groceries"
Assets:Checking -50.00 USD
Expenses:Groceries 50.00 USD

在此示例中,我们开立了两个账户:Assets:Checking(资产:活期账户)和 Expenses:Groceries(支出:食品杂货)。2023 年 4 月 10 日,我们记录了一笔价值 50 美元的购买食品杂货的交易。该交易使 Assets:Checking 的余额减少 50 美元(借方),并使 Expenses:Groceries 的余额增加 50 美元(贷方)。

示例 2:收入和支出交易

2023-04-01 open Assets:Checking
2023-04-01 open Income:Salary
2023-04-01 open Expenses:Rent

2023-04-05 txn "Employer" "Salary payment"
Assets:Checking 2000.00 USD
Income:Salary -2000.00 USD

2023-04-06 txn "Landlord" "Monthly rent payment"
Assets:Checking -1000.00 USD
Expenses:Rent 1000.00 USD

在此示例中,我们开立了三个账户:Assets:Checking(资产:活期账户)、Income:Salary(收入:工资)和 Expenses:Rent(支出:租金)。2023 年 4 月 5 日,我们记录了一笔 2000 美元的工资支付交易。该交易使 Assets:Checking 的余额增加 2000 美元(贷方),并使 Income:Salary 的余额减少 2000 美元(借方)。2023 年 4 月 6 日,我们记录了一笔 1000 美元的月租支付交易。该交易使 Assets:Checking 的余额减少 1000 美元(借方),并使 Expenses:Rent 的余额增加 1000 美元(贷方)。

示例 3:账户间转账

2023-04-01 open Assets:Checking
2023-04-01 open Assets:Savings

2023-04-15 txn "Bank" "Transfer from Checking to Savings"
Assets:Checking -500.00 USD
Assets:Savings 500.00 USD

在此示例中,我们开立了两个账户:Assets:Checking(资产:活期账户)和 Assets:Savings(资产:储蓄账户)。2023 年 4 月 15 日,我们记录了一笔从活期账户向储蓄账户转账 500 美元的交易。该交易使 Assets:Checking 的余额减少 500 美元(借方),并使 Assets:Savings 的余额增加 500 美元(贷方)。

这些示例说明了 Beancount 复式记账系统的基本概念。通过正确记录交易,用户可以维护其财务活动的准确记录,并生成报告以深入了解其财务状况。

生成报告和分析数据

Beancount 附带了一套强大的工具,用于生成财务报告,包括资产负债表、利润表等。你还可以使用 Fava(一个基于 Web 的 Beancount 用户界面)来可视化和交互你的财务数据。https://beancount.io 是基于 MIT 许可证的 Fava 构建的。

结论

拥抱 Beancount 纯文本记账的强大和简洁。通过理解其核心概念并遵循本指南中概述的步骤,你将能够轻松精确地管理你的个人或小型企业财务。随着你对 Beancount 越来越熟悉,你可以探索高级功能和自定义设置,以根据你的独特需求调整系统。

无论你是想追踪支出、规划未来,还是深入了解你的财务习惯,Beancount 都提供了实现目标所需的灵活性和透明度。凭借其用户友好的方法,Beancount 有潜力彻底改变你管理财务的方式,并赋能你掌控自己的财务未来。

现在你已经对 Beancount 有了坚实的基础,是时候开始你的纯文本记账之旅了。告别繁琐的电子表格和复杂的软件,欢迎来到 Beancount 的世界。祝你记账愉快!

通过自定义链接和查询提升你的 Beancount 体验

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

Beancount,这个深受开发者和财务爱好者喜爱的复式记账系统,以其简洁性而强大。但是,对于那些希望在 Beancount 的网页界面 Fava 中获得更多控制和更快导航的用户来说,自定义侧边栏链接和 SQL 查询可以将你的工作流提升到新的水平。

在本指南中,我们将向你展示如何:

  • 在 Fava 的侧边栏添加快速访问链接
  • 使用 SQL 查询进行高级筛选和分析
  • 为月度审查或异常检测自定义你的工作流

为什么要自定义 Fava?

Fava 已经是查看你的 Beancount 账本的精美界面,但随着你的日记账不断增长,对更好快捷方式和更智能查询的需求也随之增加。

这解决了以下痛点:

  • 重复导航时间范围
  • 跨嵌套账户筛选交易
  • 更快地发现负余额或异常

✨ 自定义侧边栏链接

让我们从使用简单的侧边栏快捷方式改进你的日常工作流开始。这些链接会出现在 Fava 的左侧边栏,可以直接带你进入筛选视图,例如本月交易或上月收入。

将以下行添加到你的 Beancount 文件中:

2021-01-01 custom "fava-sidebar-link" "Current Month" "/jump?time=month"
2021-01-01 custom "fava-sidebar-link" "Last Month" "/jump?time=month-1"
2021-01-01 custom "fava-sidebar-link" "Clear All" "/jump?account=&time=&filter="

它们的作用:

  • 本月: 打开筛选到当前月份的交易视图。
  • 上月: 立即跳转到上个月——非常适合月末审查。
  • 清除所有: 重置筛选器,再次显示所有条目。

这些快捷方式消除了手动输入时间,让你的 Fava 体验更加流畅和个性化。

🔍 自定义 SQL 查询

为了获得更深入的洞察,Fava 的 SQL 界面功能强大得令人难以置信。这是一个查询,用于查找符合特定模式的账户中的所有负余额——非常适合标记异常或有问题的交易。

SELECT account, units(sum(position)), sum(position)
WHERE number(units(position)) < 0
AND account ~ '.*:BCM:.*'
AND date >= DATE(2021,12,9)
AND date < DATE(2022,1,9)

解析:

  • account ~ '.*:BCM:.*':筛选名称中包含 :BCM: 的账户。
  • number(units(position)) < 0:标记负余额(例如,预算超支)。
  • 日期筛选器将结果范围缩小到特定的 1 个月窗口。

用例:

  • 发现重复支出或错误过账等错误
  • 审计特定供应商或类别
  • 快速提取可操作的预算洞察

🛠 专业提示:结合链接 + 查询

虽然 Fava 不允许直接链接到自定义查询,但你可以通过以下方式养成每月审查的习惯:

  • 使用“本月”链接开始你的审查
  • 在另一个窗格中打开你保存的查询选项卡
  • 同时审查两者——先筛选,然后深入挖掘

这种组合有助于你在异常恶化之前发现它们确保你的账本保持整洁

总结

Beancount 的设计理念是极简,但像这些小小的增强功能却能带来巨大的效率提升。无论你是在审查预算、调试异常余额,还是仅仅为了节省点击次数,自定义链接和 SQL 查询都能为你提供更大的能力和更少的阻碍。

额外提示: 如果你正在使用 Fava 的自定义报告,你甚至可以构建完全符合你个人财务习惯的仪表板。

准备好掌控一切了吗?

从小处着手:添加“本月”链接。然后构建你自己的查询。未来的你会感谢你的。

想要更多此类技巧?订阅我们的新闻通讯或在 Beancount.io 探索更多 Beancount 秘籍。

Beancount 中未来交易的预测

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

Beancount 有一个插件可以预测未来的周期性交易。如何在 beancount.io 中应用它?将以下内容放入你的账本文件中。

; import the plugin
plugin "fava.plugins.forecast"

; add a monthly HOA fee
2022-05-30 # "HOA fee [MONTHLY]"
Expenses:Hoa 1024.00 USD
Assets:Checking -1024.00 USD

预测插件截图

2022-05-30-预测插件

然后,你将在净利润图表中看到预测结果。

预测插件

上面的标签 [MONTHLY] 意味着它将永久循环。如果你有更多条件需要应用,请尝试 [MONTHLY UNTIL 2022-06-01][MONTHLY REPEAT 5 TIMES][YEARLY REPEAT 5 TIMES][WEEKLY SKIP 1 TIME REPEAT 5 TIMES]

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