The five-step revenue recognition model — from contract identification through performance obligation satisfaction — implemented as a deterministic engine. Variable consideration, contract modifications, principal-vs-agent, and multi-element arrangements all handled programmatically. No judgement calls embedded in spreadsheet formulas. Live today on the same engine as IFRS 16.
IFRS 15 is live today, alongside IFRS 16, ASC 842 and ASC 606. Sign up and upload your first revenue contract.
A contract exists under IFRS 15 when it has commercial substance, the parties have approved it, rights and payment terms can be identified, and collection of substantially all consideration is probable. Ledger Layer validates contract eligibility before any recognition begins — incomplete contracts are flagged for review, not silently processed.
The engine evaluates each of the five existence criteria (IFRS 15.9) against the contract data you provide. Contracts that fail any criterion are held in a "pending" state until the condition is met. Contract combination rules (IFRS 15.17) are applied automatically when contracts are entered within the same timeframe with the same customer and meet the combination indicators.
Each distinct promise to transfer a good or service — or a series of distinct goods or services that are substantially the same and have the same pattern of transfer — is a separate performance obligation. Ledger Layer identifies obligations using both criteria: capable of being distinct (the customer can benefit from it on its own or with readily available resources) and distinct within the context of the contract.
The engine evaluates the distinct criterion at two levels. First, can the customer benefit from the good or service individually or with other readily available resources? Second, is the promise separately identifiable from other promises in the contract — or are goods/services highly interrelated, significantly modified, or highly interdependent? Non-distinct items are bundled into a combined performance obligation. The assessment is logged per obligation.
The transaction price is the amount of consideration the entity expects to receive in exchange for transferring goods or services. It includes fixed amounts, variable consideration (subject to the constraint), significant financing components, non-cash consideration, and consideration payable to the customer.
Variable consideration is estimated using either the expected value method (probability-weighted) or the most likely amount method — whichever better predicts the outcome. The variable consideration constraint limits inclusion to amounts where it is highly probable that a significant revenue reversal will not occur. Ledger Layer applies the constraint per performance obligation or per contract as appropriate, and reassesses at each reporting date.
The transaction price is allocated to each performance obligation based on relative standalone selling prices. If an observable standalone selling price exists, it is used directly. Otherwise, Ledger Layer supports three estimation methods: adjusted market assessment, expected cost plus margin, and residual approach (when the selling price is highly variable or uncertain).
Allocation is performed proportionally based on standalone selling prices (IFRS 15.74). Discounts are allocated to all obligations unless observable evidence indicates the discount relates to a specific subset. Variable consideration is allocated to a specific obligation only when it relates entirely to that obligation and the allocation depicts the amount the entity expects to receive. The allocation is locked at contract inception and only updated for contract modifications.
Revenue is recognised when (or as) each performance obligation is satisfied — either over time or at a point in time. Over-time recognition applies when the customer simultaneously receives and consumes the benefits, the entity creates an asset with no alternative use and has an enforceable right to payment, or the entity's performance creates or enhances an asset the customer controls.
For over-time obligations, Ledger Layer supports both input methods (cost-to-cost, labour hours) and output methods (units delivered, milestones, surveys of work performed). Progress is measured each reporting period and revenue is updated accordingly. For point-in-time obligations, the engine evaluates control transfer indicators: present right to payment, legal title, physical possession, significant risks and rewards, and customer acceptance.
Contract modifications — changes in scope, price, or both — require careful assessment under IFRS 15. A modification is either a separate contract (additional distinct goods at standalone selling price), a termination-and-creation of a new contract, or a continuation with cumulative catch-up adjustment.
Ledger Layer evaluates each modification against the separate contract criteria (IFRS 15.20). If the modification adds distinct goods or services at their standalone selling prices, it is accounted for as a separate contract. Otherwise, the engine determines whether the remaining goods or services are distinct from those already transferred — if so, it terminates the old contract and creates a new one; if not, it applies a cumulative catch-up adjustment. All modification assessments are logged.
IFRS 15 requires disaggregation of revenue, information about contract balances, remaining performance obligations, and significant judgements. Ledger Layer generates disclosure data from the same engine-verified contract records that produced your journal entries — no manual extraction, no reconciliation gap.
The disclosure pack includes revenue disaggregated by type, geography, timing (point-in-time vs over-time), and contract duration. Contract balance rollforwards (contract assets and liabilities with opening, additions, satisfactions, and closing) are computed automatically. Remaining performance obligations are reported with expected timing of satisfaction. All significant judgements — method of progress measurement, variable consideration estimation, principal/agent determination — are captured in the contract record.
IFRS 15 involves more judgement than lease accounting — variable consideration estimates, standalone selling price allocation, over-time progress measurement. These judgements need to be captured, versioned, and auditable. A spreadsheet buries them in formulas.
A single contract can be modified multiple times. Each modification can change the transaction price, reallocate to obligations, and trigger catch-up adjustments. Tracking this in Excel across hundreds of contracts is how revenue misstatements happen.
If you report under both IFRS 15 and ASC 606, the divergences are subtle but material — licenses of IP, disaggregation requirements, interim disclosures. One engine, two outputs, zero manual reconciliation.
Revenue disaggregation, contract balance rollforwards, and remaining performance obligations should come from the same data as your journal entries. Ledger Layer generates both from one verified source.
Same deterministic engine, same audit controls, same infrastructure as your lease accounting. Sign up and upload your first revenue contract.