了解应收账款(Beancount 指南)
如果你的企业向客户开具账单,你需要一种坚如磐石的方式来追踪谁欠你钱。这正是应收账款(AR)发挥作用的地方。它不仅仅是报告上的一个数字;它是你现金流的命脉。
本指南将带你了解应收账款是什么、为何重要,以及如何使用 Beancount 这套纯文本会计系统,以精准、清晰的方式进行管理。
TL;DR
应收账款 (AR) 是客户因已交付的商品或服务而欠你的钱。它是资产负债表上的流动资产,是权责发生制会计的核心,也是企业现金流的关键驱动因素。你可以在 Beancount 中通过使用客户子账户、使用 ^links
将发票与付款关联,并运行几个简单查询来干净地追踪 AR。要衡量收款速度,可计算 AR 周转率 和 应收账款天数 (DSO)。为控制风险,可使用 坏账准备。
什么是应收账款?
定义
应收账款代表因已交付或已使用但尚未收到付款的商品或服务而应收的款项余额。根据 权责发生制会计,你在赚取收入时确认它,而不是在收到现金时。于是,AR 作为 流动资产 出现在公司资产负债表上。
为何重要
有效管理 AR 对保持健康的流动性至关重要。你收回发票的速度越快,现金转换周期 就越短——即将库存和其他资源的投资转化为现金所需的时间。通过监控 AR 周转率和应收账款天数 (DSO) 等指标,你可以清晰了解收款效率,并采取行动加以改进。
应收账款 vs. 应付账款(单行速记)
- AR = 欠 你 的钱(资产)。
- AP = 你 欠别人的钱(负债)。
双重记账中的应收账款流程
概念上,应收账款的生命周期包括以下步骤:
- 开具发票(赊销):当你发送发票时,资产(具体为应收账款)增加,同时确认已赚取的
Income
。 - 收款:客户付款时,你增加一个资产(
Assets:Bank
账户),并减少另一个资产(Assets:AR
)。总资产不变,但现金位置改善。 - 折扣或贷项:若提供提前付款折扣或开具贷项通知单,你会减少客户的 AR 余额,并以折扣费用或收入冲减(contra‑revenue)的方式抵消。
- 坏账:并非所有发票都能收回。为此,你可以确认坏账准备(contra‑asset,降低 AR 账面价值)并计入相应的坏账费用。随后,可针对特定不可收回的发票冲减该准备。
在 Beancount 中建模 AR
Beancount 是一套纯文本、双重记账系统,极其适合追踪 AR。它使用以 #
开头的 tags
、以 ^
开头的 links
,以及类似 SQL 的查询语言 (bean-query
),让整个 AR 流程透明、可审计且可脚本化。
建议的账户结构
一个清晰的科目表是基础。以下是推荐结构:
Assets:AR
Assets:AR:Clients:<Name>
Assets:AR:Allowance ; 坏账准备(contra‑asset)
Income:Sales
Income:Contra:SalesDiscounts ; 与费用账户的替代方案
Expenses:SalesDiscounts
Expenses:BadDebt
1. 记录赊销(开具发票)
向客户发送发票时,将其记入账本。
2025-07-01 * "Acme Co." "Invoice 2025-045 · Web design" ^INV-2025-045 #ar #client:acme
invoice: "2025-045"
due: "2025-07-31"
document: "/invoices/2025/INV-2025-045.pdf"
Assets:AR:Clients:Acme-Co 1200.00 USD
Income:Sales -1200.00 USD
^INV-2025-045
link 是唯一标识符,用于将此发票与后续付款关联。document:
metadata 让 Fava(Beancount 的网页界面)能够直接点击链接打开发票 PDF。
2. 记录全额付款
Acme Co. 全额付款后,清除其应收账款余额。
2025-07-25 * "Acme Co." "Payment for INV-2025-045" ^INV-2025-045 #ar
Assets:Bank:Checking 1200.00 USD
Assets:AR:Clients:Acme-Co -1200.00 USD
使用相同的 ^INV-2025-045
link,可在审计线上清晰连接发票与付款。
3. 处理部分付款
若客户只付款部分,流程相同。link 仍保持关联。
2025-07-20 * "Acme Co." "Partial payment INV-2025-045" ^INV-2025-045 #ar
Assets:Bank:Checking 400.00 USD
Assets:AR:Clients:Acme-Co -400.00 USD
查询 ^INV-2025-045
将显示原始 1200 美元发票、这笔 400 美元付款,剩余 800 美元未收。
4. 处理提前付款折扣
假设对 1000 美元发票提供 2% 的提前付款折扣。
2025-07-10 * "Acme Co." "2% early-payment discount on INV-2025-046" ^INV-2025-046 #ar
Assets:Bank:Checking 980.00 USD
Expenses:SalesDiscounts 20.00 USD
Assets:AR:Clients:Acme-Co -1000.00 USD
这里,你冲销了全部 1000 美元的应收账款,记录了 980 美元现金收入,并将 20 美元折扣计作费用。注意:许多账本将销售折扣视为 contra‑revenue 而非费用。对小型账本而言,使用费用账户更为简便。关键是选定一种方法并保持一致。
5. 在发票中计入销售税
若收取销售税,应在开票时将其记为负债。
2025-07-01 * "Acme Co." "INV-2025-047 · Hardware + tax" ^INV-2025-047 #ar
invoice: "2025-047"
due: "2025-07-31"
Assets:AR:Clients:Acme-Co 1100.00 USD
Income:Sales -1000.00 USD
Liabilities:Tax:Sales -100.00 USD
你为 1100 美元开票,确认 1000 美元收入,同时对税务机关负有 100 美元的税金义务。
6. 处理坏账(坏账准备法)
在美国公认会计原则(GAAP)下,推荐使用坏账准备法,因为它能更好地匹配费用与收入。
步骤 1:在年末估计并建立准备
依据历史数据,估计一定比例的应收账款可能无法收回。
2025-12-31 * "Allowance for doubtful accounts (2% of AR)"
Expenses:BadDebt 300.00 USD
Assets:AR:Allowance -300.00 USD
这会创建一个 contra‑asset 账户(Assets:AR:Allowance
),降低总应收账款的账面价值。
步骤 2:冲销具体的坏账
当确认某张发票肯定无法收回时,直接冲减准备。
2026-03-05 * "Write-off INV-2025-049 for Insolvent Client" ^INV-2025-049 #ar
Assets:AR:Allowance 1200.00 USD
Assets:AR:Clients:Insolvent-Client -1200.00 USD
此交易不影响费用,因为费用已在建立准备时确认。
简易报表与查询
使用 Fava 或 bean-query
可快速获取 AR 快照。
按客户列出未收款项
SELECT account, SUM(position)
WHERE account '^Assets:AR'
GROUP BY account
ORDER BY account;
某期间的 AR 活动日志
JOURNAL
WHERE account '^Assets:AR'
AND date >= 2025-07-01 AND date < 2025-08-01;
核心 AR 指标(快速公式)
这些比率的计算可通过 bean-query
导出所需数值(期间销售额、期初/期末 AR 余额),随后在电子表格或脚本中完成。这样既保持账本简洁,又让计算过程透明。
AR 周转率
衡量企业在一定期间内收回平均应收账款的次数。数 值越高越好。
应收账款天数 (DSO)
衡量从销售实现到收款完成的平均天数。数值越低越好。
这两个指标共同反映了将发票转化为现金的效率。
简单的 Beancount 入门文件(复制/粘贴)
; --- Accounts ---------------------------------------------------------------
1970-01-01 open Assets:Bank:Checking USD
1970-01-01 open Assets:AR
1970-01-01 open Assets:AR:Clients:Acme-Co
1970-01-01 open Assets:AR:Allowance
1970-01-01 open Income:Sales
1970-01-01 open Expenses:SalesDiscounts
1970-01-01 open Expenses:BadDebt
1970-01-01 open Liabilities:Tax:Sales USD
; ---------------------------------------------------------------------------
; Example invoice
2025-07-01 * "Acme Co." "Invoice 2025-045 · Web design" ^INV-2025-045 #ar
invoice: "2025-045"
due: "2025-07-31"
document: "/invoices/2025/INV-2025-045.pdf"
Assets:AR:Clients:Acme-Co 1200.00 USD
Income:Sales -1200.00 USD
; Payment received
2025-07-25 * "Acme Co." "Payment INV-2025-045" ^INV-2025-045 #ar
Assets:Bank:Checking 1200.00 USD
Assets:AR:Clients:Acme-Co -1200.00 USD
保持 AR 健康的运营技巧
- 设定明确条款:在每张发票上注明到期日、逾期费用政策以及提前付款折扣条款。
- 全链路关联:使用统一的
^INV-...
link 将发票、付款、贷项等全部关联,形成清晰审计链。 - 附加文档:利用
document:
元数据链接发票 PDF、采购订单、合同等文件。 - 每月复盘:至少每月检查一次未收款报告,并跟进逾期发票。关注 AR 周转率和 DSO 趋势,及早发现问题。