SaaS 收入确认:基于 IFRS 15 与实务分录详解
SaaS 合同适用 IFRS 15 的每一个步骤,通过包含真实金额的会计分录以及自动生成这些分录的 API 调用进行展示。
根据 IFRS 15,SaaS 订阅属于在某一时段内履行的履约义务,因此其收入应在服务期间内均匀确认,而已开票金额则在实现前计入合同负债(contract liability)。应收款项和增值税(VAT)在开票当日全额记账,唯独收入需要延期确认。
这就是全部规则。本文其余部分将展示其在总账中的实际面貌,并针对订阅业务经常遇到的几种情况提供借贷分录:年度方案、带折扣的产品组合、按里程碑计费的项目、预期退款以及中途变更的合同。每笔分录均采用 Nordlet 默认自带的立陶宛会计科目表(chart of accounts),最后一节则演示了无需人工录入即可过账这些分录的 API 调用。
应用于单一合同的五步法
某客户于 2026 年 1 月 1 日签约购买为期 12 个月的平台访问权限,不含增值税金额为 2,400 欧元。按 21% 的立陶宛增值税税率计算,税额为 504 欧元,因此价税合计发票金额为 2,904 欧元。
| 步骤 | 应用于本合同 |
|---|---|
| 1. 识别合同 | 为期 12 个月访问权限的已接受订单 |
| 2. 识别履约义务 | 一项:自 2026 年 1 月 1 日至 12 月 31 日的平台访问权限 |
| 3. 确定交易价格 | 2,400 欧元(本例首个示例中无可变对价) |
| 4. 分摊交易价格 | 无需分摊;单项履约义务承担全部价格 |
| 5. 确认收入 | 随着访问天数的推移,在一段时间内确认 |
SaaS 财务会计详解一文从概念上涵盖了相同的模型。这里我们直接进入分录环节。
方案一:年度方案
开票时,即 2026 年 1 月 1 日。 应收款项和增值税在此日真实产生,但收入尚未产生。
| 科目 | 借方 | 贷方 |
|---|---|---|
| 2410 应收账款 (Trade receivables) | 2,904.00 | |
| 4492 应交增值税-销项税额 (Output VAT payable) | 504.00 | |
| 4910 递延收入 (Deferred income / 合同负债) | 2,400.00 |
没有任何科目触及收入。然而,增值税按常规在开票日到期;无论服务是否已交付,1 月份的增值税申报表均包含这 504 欧元。
客户付款时。
| 科目 | 借方 | 贷方 |
|---|---|---|
| 2710 银行存款 (Bank) | 2,904.00 | |
| 2410 应收账款 (Trade receivables) | 2,904.00 |
每月月末。 教科书式的做法是每月释放 200 欧元。对于连续消费的服务,IFRS 15 §B15 允许采用基于时间流逝的产出法,即按天加权的进度表,将 365 天中各月份应占的份额分配到每个月:
| 月份 | 天数 | 分摊额 |
|---|---|---|
| 一月 | 31 | 203.84 |
| 二月 | 28 | 184.11 |
| 三月 | 31 | 203.84 |
| 四月 | 30 | 197.26 |
| … | ||
| 十二月 | 31 | 203.81 |
| 合计 | 365 | 2,400.00 |
最后一期分摊额吸收了分摊产生的尾差,确保进度表总额精确等于递延金额。一月份的释放分录为:
| 科目 | 借方 | 贷方 |
|---|---|---|
| 4910 递延收入 (Deferred income) | 203.84 | |
| 5001 服务收入 (Service revenue) | 203.84 |
在完成这 12 笔分录后,该发票对应的 4910 科目余额归零,且 2,400 欧元已在其赚取的年度内全部计入收入。
方案二:带折扣的产品组合
同一客户同时购买了订阅服务与上线实施服务。发票显示订阅服务价格为 2,400 欧元,上线服务为 600 欧元,净额合计 3,000 欧元。如果单独出售,订阅服务为 3,000 欧元,上线服务为 1,000 欧元,因此该产品组合带有 1,000 欧元的折扣。
根据 IFRS 15 第 76 至 80 段的要求,折扣必须按各项履约义务的单独售价(standalone selling prices)比例分摊至各个义务中,而不能留在销售团队随意放置的地方。
| 行项目 | 标示价格 | 单独售价 | 占比 | 分摊后价格 |
|---|---|---|---|---|
| 订阅服务(按时间段) | 2,400 | 3,000 | 75 % | 2,250.00 |
| 上线服务(在某时点) | 600 | 1,000 | 25 % | 750.00 |
| 合计 | 3,000 | 4,000 | 3,000.00 |
增值税随发票上标示的行项目价格计算,因为发票本身即为增值税凭证:3,000 欧元的 21% 为 630 欧元。分摊计算仅改变净额在即期收入与递延收入之间的划分。
开票时。
| 科目 | 借方 | 贷方 |
|---|---|---|
| 2410 应收账款 (Trade receivables) | 3,630.00 | |
| 4492 应交增值税-销项税额 (Output VAT payable) | 630.00 | |
| 5001 服务收入(上线服务,已交付) | 750.00 | |
| 4910 递延收入(订阅服务) | 2,250.00 |
上线服务在开票时即实现 750 欧元的收入,而非行项目上打印的 600 欧元。订阅服务递延 2,250 欧元,其一月份的分摊额为 2,250 × 31 ÷ 365 = 191.10 欧元。
如果不进行分录分摊,分录将显示 600 欧元的收入和 2,400 欧元的递延。其差额在于有 150 欧元的收入被计入了错误的年份。
方案三:按里程碑计费的项目
一个实施项目按净额 10,000 欧元(价税合计 12,100 欧元)开票,分为三个里程碑:设计占 30%,构建占 50%,上线占 20%。每个里程碑都是工作某特定部分被验收的时点,并以交付确认书为凭证。
开票时。
| 科目 | 借方 | 贷方 |
|---|---|---|
| 2410 应收账款 (Trade receivables) | 12,100.00 | |
| 4492 应交增值税-销项税额 (Output VAT payable) | 2,100.00 | |
| 4910 递延收入 (Deferred income) | 10,000.00 |
设计确认书签署时。
| 科目 | 借方 | 贷方 |
|---|---|---|
| 4910 递延收入 (Deferred income) | 3,000.00 | |
| 5001 服务收入 (Service revenue) | 3,000.00 |
里程碑的预计日期属于计划信息。收入在事件实际发生时变动,而不是在日历表预期的时间变动。
方案四:预期退款
假设历史数据显示,5% 的年度方案会在首月内发生退款。IFRS 15 第 55 至 58 段将预期退款视为可变对价:将其从交易价格中扣除,并在不确定性消除前作为退款负债(refund liability)列支。
假设有一笔净额 1,000 欧元(价税合计 1,210 欧元)的单次产品销售,退款估计为 5%,并在某时点确认收入。
开票时。
| 科目 | 借方 | 贷方 |
|---|---|---|
| 2410 应收账款 (Trade receivables) | 1,210.00 | |
| 4492 应交增值税-销项税额 (Output VAT payable) | 210.00 | |
| 4450 退款负债 (Refund liability) | 50.00 | |
| 5001 服务收入 (Service revenue) | 950.00 |
某客户退款净额 40 欧元。 退款由红字发票/贷记单记录,该单据冲减增值税和应收款项,并消耗负债而非减少收入。
| 科目 | 借方 | 贷方 |
|---|---|---|
| 4450 退款负债 (Refund liability) | 40.00 | |
| 4492 应交增值税-销项税额 (Output VAT payable) | 8.40 | |
| 2410 应收账款 (Trade receivables) | 48.40 |
退款窗口关闭。 50 欧元的估计数中仅使用了 40 欧元,因此剩余的 10 欧元转回至收入。
| 科目 | 借方 | 贷方 |
|---|---|---|
| 4450 退款负债 (Refund liability) | 10.00 | |
| 5001 服务收入 (Service revenue) | 10.00 |
对于同时带有待确认时间表的行项目,其消耗顺序为:首先是递延收入(从待确认时间表的远端开始裁剪),其次是退款负债,最后是收入。
方案五:合同变更
在方案一中年度方案进行到一半时,客户协商获得了为期六个月的免费延期。已经过了六个月(为了易读性,此处使用相等的月金额计算为 1,200 欧元;系统引擎则会按天加权计算),且仍有 1,200 欧元处于递延状态。
IFRS 15 第 20 和 21 段根据剩余服务是否可明确区分(distinct),提供了两种处理方法。
未来适用法(Prospective,§21(a))。 剩余的商品或服务是可明确区分的,因此未确认的 1,200 欧元将在新的 12 个月剩余期限内分摊:每月 100 欧元。不登记任何追溯调整分录;下一期的释放额直接变小。
累计追溯调整法(Cumulative catch-up,§21(b))。 该义务被视为单一的部分履约义务,因此重新计算收入,犹如从一开始就适用了 18 个月期限:2,400 欧元 ÷ 18 = 每月 133.33 欧元,到 6 月 30 日已赚取 800 欧元。由于已经确认了 1,200 欧元,因此需冲回 400 欧元:
| 科目 | 借方 | 贷方 |
|---|---|---|
| 5001 服务收入 (Service revenue) | 400.00 | |
| 4910 递延收入 (Deferred income) | 400.00 |
随后,剩余的 1,600 欧元将在新的剩余期限内以每月 133.33 欧元的额度释放。
按日交付的平台访问权限通常是一系列可明确区分的服务,因此未来适用法是常见答案。具体适用哪种方法属于会计判断;总账系统必须能够支持过账其中任意一种。
通过 API 执行相同的分录
上述每一笔分录均由 Nordlet 的收入确认模块根据常规发票数据自动生成。确认方法随发票行项目传递。
方案一。 创建包含按比例分摊(ratable)行项目的发票,然后对其进行开票。开票操作会过账应收款项、增值税以及递延收入,并构建 12 期的分摊表。
POST /v1/sales/invoices/create
Authorization: Bearer <api key with sales:write>
Idempotency-Key: <your order id>
{
"partnerId": "<customer id>",
"lines": [
{
"description": "Platform subscription 2026",
"unitPriceExclVat": "2400.0000",
"vatRatePercent": "21.00",
"recognition": { "method": "ratable", "startDate": "2026-01-01", "endDate": "2026-12-31" }
}
]
}
POST /v1/sales/invoices/issue
{ "id": "<invoice id>" }
方案二。 在发票的每一行中添加 standaloneSellingPrice。分摊额在开票时计算;上线行项目使用默认的 point_in_time(某时点)方法。
方案三。 在行项目中传入 "recognition": { "method": "milestone", "milestones": [ { "percent": 30, "description": "Design", "expectedDate": "2026-02-28" }, … ] }。通过针对该发票调用 sales/acts/issue 发布交付确认书,即可在确认书日期确认待处理的里程碑分摊额。
方案四。 在行项目中设置 refundEstimatePercent。贷记单按上述顺序消耗负债;带修订后 estimatedTotal 的 sales/refund-liability/true-up 会过账转回或补提。与发票相匹配的支付服务商退款会记录在负债上并发出 refund_liability.actual Webhook,但不会直接对负债本身过账,因为冲减收入和销项税额需要将贷记单作为增值税凭证。
方案五。
POST /v1/sales/recognition/modify
{ "invoiceLineId": "<line id>", "approach": "prospective", "newEndDate": "2027-06-30" }
若采用第二种处理方式,将 prospective 替换为 cumulative_catch_up;400 欧元的冲回将立即过账,剩余部分重新分摊。
释放处理。 每次运行会过账一张凭证。它可以通过三种无需轮询的方式触发:锁定期间会首先确认该期间结束前到期的所有项目,发布交付确认书会确认里程碑分摊额,设定至下一个到期日的定时器则会在按比例分摊额到期时进行过账。sales/recognition/compute 可预览运行将过账的内容;sales/recognition/run 执行过账;sales/recognition/summary 报告每行迄今已确认、剩余及下一个到期日的金额;sales/recognition-schedules/list 显示带有状态的每一个分摊期。
本模块不支持的功能
在规划结账工作时,明确记录的限制与功能本身同等重要:
- 分摊表以开票日汇率固定为欧元。发行后的货币变动不会对递延余额进行重新计量。
- 分摊要求每一行或所有行都有单独售价。未实现第 79(c) 段的剩余法(residual approach)。
- 退款负债按发票层面的不含税金额进行追踪。未对收回退回商品的权利对应的资产(§B25)进行建模。
- 累计追溯调整法仅适用于按比例分摊的行项目;里程碑重新规划采用未来适用法。
- 重大融资成分(§60 至 §65)、非现金对价以及应付客户对价不在范围内。
- 合同资产科目(2910)在科目表和过账代码中存在,但在开票前确认收入目前仍需手工凭证。
该软件具备处理 IFRS 15 和 ASC 606 的能力。为每个履约义务选择方法、估计单独售价和退款率,以及判断剩余服务是否可明确区分,仍然需要由报告实体做出业务决策。
FAQ
根据 IFRS 15,SaaS 订阅的收入在何时确认?
在服务期间内确认,因为访问软件属于在某一时段内履行的履约义务。对于预先开票的 12 个月方案,每个月赚取其应占的价格份额。发票日期决定了应收款项和增值税的记账时间,而不是收入的确认时间。
递延收入的会计分录是什么?
开票时:借记应收账款(价税合计金额),贷记应交增值税-销项税额,贷记递延收入(合同负债,按净额)。每个期间:借记递延收入,贷记服务收入(按赚取的金额)。当客户付款时,应收款项结清。
增值税是否跟随收入确认时间表?
不会。根据增值税指令及国家法律的常规规则,增值税在开票或收到预收款时到期。递延收入时间表与增值税负债是独立变动的,这就是为什么预付款发票是真正的增值税凭证而形式发票(proforma)不是。
组合折扣在 IFRS 15 下如何分摊?
按组合中各履约义务的单独售价比例进行分摊(§81)。对于总价 4,000 欧元且各部分单独定价为 3,000 欧元和 1,000 欧元的组合,1,000 欧元的折扣使每一部分均减少 25%。增值税按发票行项目上标示的金额保留。
未来适用法与累计追溯调整法有什么区别?
未来适用法将未确认的剩余部分从变更日起在新的期限内分摊,不对过去的收入进行调整。累计追溯调整法重新计算收入,犹如新条款自始适用,并立即过账其差额。具体适用哪种方法取决于剩余服务是否与已交付的服务可明确区分。