Nordlet

← 文档 / 指南

收入确认 (IFRS 15 / ASC 606)

递延收入、按期确认、里程碑和完工百分比计划、退货负债、订阅。

按明细行分摊的收入递延与计划确认:合同负债、履約进度方法、交易价格分摊、退款准备金、订阅以及合同变更。默认路径保持不变,即普通发票明细行仍然在开具时全额确认收入(某一时点),这符合单项履约义务在交付时满足的 606/15 准则。以下所有内容均为发票明细行的可选功能。

该软件支持 606/15 准则,而报告主体才是合规的主体。针对每项义务选择正确的方法、估算单独售价和退款率、以及在发生变更时判断剩余商品或服务是否可明确区分,这些依然是报表编制主体需要做出的会计判断。

会计科目

三个总账科目支持相关业务流程,并作为过账规则键进行配置(可通过 ledger/posting-rules/update 按公司进行覆盖):revenue.deferredIncome 对应 4910 "Ateinančių laikotarpių pajamos"(合同负债),revenue.refundLiability 对应 4450 "Grąžinimo įsipareigojimai pirkėjams",revenue.contractAsset 对应 2910 "Sukauptos pajamos"。现有公司可以通过重新应用科目表模板(ledger/accounts/apply-template)来获取这些科目。

发票明细行上的履约义务

sales/invoices/create|update 的明细行接受 recognition: { method, startDate, endDate, milestones } 参数,其中 method 可以是以下选项之一:

方法 开具时的行为 确认方式
point_in_time(默认) 贷记全额收入 在开具时确认,保持不变
ratable(startDate..endDate) 贷记递延收入 在服务期间内按天数加权的每月计划确认
milestone(milestones[],百分比总和为 100) 贷记递延收入 每个里程碑对应一个分期,在事件发生时确认
percent_complete 贷记递延收入 通过累计进度报告确认

应收账款和增值税保持不变:开具发票时,借记 2410 记录总额,贷记 4492 记录增值税,并将净额拆分计入收入(按时点确认的明细行)和 4910(递延明细行)。计划以公司本位币按开具日期的汇率存储,sales/recognition-schedules/list(sales:read)展示所有状态为 pending | recognized | cancelled 的分期。

交易价格分摊。 当存在多行时,每一行上的 standaloneSellingPrice 会按比例将发票净额分摊到各项履约义务中(IFRS 15 第 76 至 80 段);分摊后的金额(而非明细行标明的价格)决定了收入与递延的拆分以及确认计划。增值税按发票明细行原样保留。

收入确认引擎

收入确认每次运行生成单张凭证,借记 4910,贷记收入(原明细行中的服务/产品科目及成本中心),并记录在 sales/recognition/runs/list 中。

  • POST /v1/sales/recognition/compute (sales:read) { asOfDate? } - 预览到期的按期确认分期的演练。
  • POST /v1/sales/recognition/run (sales:write) { asOfDate?, postingDate?, scheduleIds? } - 过账到期的按期确认分期,或准确过账由 scheduleIds 指定的分期(适用于任何方法)。
  • POST /v1/sales/recognition/progress (sales:write) { invoiceLineId, percentComplete, date? } - 针对完工百分比明细行:报告累计进度;新挣得的差额会立即过账,进度倒退会被拒绝。
  • POST /v1/sales/recognition/summary (sales:read) - 每行的截至目前的已确认金额、剩余金额、待处理数量、下一个到期日,以及公司汇总数据。

无需轮询即可触发确认的三个事件为:期间锁定(ledger/periods/lock)首先会确认截至期间结束时的所有到期金额,并于期间结束日过账;交付确认单开具(sales/acts/issue)在交付单日期确认关联发票中待处理的里程碑分期;计划到期定时器会在下一个按期确认到期日触发,并在其到来时按公司过账(锁定的期间会稍后重试)。里程碑有意设计为基于事件的机制,里程碑的 expectedDate 属于计划信息,本身绝不会触发收入确认。

可变对价 - 退货负债

明细行上的 refundEstimatePercent 会在开具发票时,将(分摊后的)净额的相应份额贷记至 4450 科目,而不是计入收入或递延收入,预计退款不计入交易价格(IFRS 15 第 55 段)。每张发票的状态存储在 sales/refund-liability/list 中(包含预计金额、已消耗金额、观察到的结算退款以及剩余金额)。

实际业务:针对发票开具的红字发票(credit note)会借记 4450 科目以冲减剩余负债,直至冲减完毕才会触及收入。sales/refund-liability/true-up (sales:write) { invoiceId, estimatedTotal, date? } 用于修改估计值,并按任意方向将差额过账至收入(以下限为已消耗金额)。与发票匹配的支付服务商(PSP)结算退款会记录在负债中,并发出 refund_liability.actual Webhook 通知,它们不会直接过账冲减 4450,因为冲减收入和销项税需要红字发票作为税务凭证。

订阅 - 协议到发票

为协议指定 billingPeriod(monthly | quarterly | annual),然后调用 agreements/generate-invoice (agreements:write) 即可创建下一个未开票期间的草稿发票:明细行来自协议条款(或将 value 作为每个期间的一行),每行在服务期间内按期进行收入确认。agreements/billing/run { asOfDate? } 会遍历所有生效协议,生成所有到期的期间,并使超过结束日期且已完全开票的协议失效。最后的短周期会按天数折算;autoRenew 会按原期限延长协议并继续计费。生成的发票带有 agreementId(可在 sales/invoices/list 中筛选)。

合同变更

POST /v1/sales/recognition/modify (sales:write) { invoiceLineId, approach, date?, newEndDate?, newMilestones? }:

  • prospective(未来适用法) - 取消待处理的计划,并将未确认的剩余金额从变更日起按新条款重新分摊(剩余的商品或服务是可明确区分的:IFRS 15 第 20 段 (a)、第 21 段 (a))。按期确认的明细行采用 newEndDate;里程碑明细行采用 newMilestones(剩余金额的百分比)。
  • cumulative_catch_up(追溯调整法,仅限按期确认) - 重新计算收入,犹如新条款自始适用,并立即按任意方向过账差额(单项部分履约的义务:第 21 段 (b));剩余部分重新分摊。

价格下调通过红字发票处理:针对带有待处理计划的发票开具红字发票时,会优先借记递延收入并从远端削减待处理计划,接着冲减退货负债,最后才冲减收入。价格上调则是带有各自确认逻辑的附加发票,按结构属于未来适用法。

限制

  • 计划和确认过账金额为本位币(EUR),在开具日期的汇率下固定;开具后,递延余额不会根据汇率进行重估。
  • 资产负债表中提供了合同资产科目(2910)并作为过账键,但目前尚无自动化的未开票收入过账流程,在开票前确认收入目前需要手动做凭证。
  • 价格分摊要求发票上的所有明细行或均无明细行提供单独售价;未实现残余法(第 79 段 (c))。
  • 退货负债在发票级别按不含税净额追踪;未对相应的收回退回商品的权利资产(第 B25 段)进行建模。
  • 追溯调整法适用于按期确认的明细行;里程碑重新规划仅支持未来适用法;完工百分比明细行通过进度报告进行调整,而不是通过 modify。
  • 重大融资成分(第 60 至 65 段)、非现金对价以及应付客户对价不在本范围之内。
  • 自动计划到期运行会在触发当天过账;计入已锁定期间的追溯过账将被拒绝,请先解锁期间或使用开放的过账日期。