Nordlet

← 博客

SaaS 收入确认:基于 IFRS 15 与实务分录详解

SaaS 合同适用 IFRS 15 的每一个步骤,通过包含真实金额的会计分录以及自动生成这些分录的 API 调用进行展示。

Nordlet Team · · 4 分钟阅读

根据 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%。增值税按发票行项目上标示的金额保留。

未来适用法与累计追溯调整法有什么区别?

未来适用法将未确认的剩余部分从变更日起在新的期限内分摊,不对过去的收入进行调整。累计追溯调整法重新计算收入,犹如新条款自始适用,并立即过账其差额。具体适用哪种方法取决于剩余服务是否与已交付的服务可明确区分。

延伸阅读