All posts
Functional5 min read

Revenue Recognition Under IFRS 15 in Odoo Accounting

Implement IFRS 15 revenue recognition in Odoo - defining performance obligations, deferring revenue until obligations are satisfied, and matching revenue to delivery milestones.

IFRS 15 Revenue Recognition in Odoo#

IFRS 15 requires revenue to be recognized when (or as) performance obligations are satisfied - not simply when cash is received or an invoice is issued. For multi-element contracts, this often means recognizing revenue over time or upon specific delivery milestones.

Core IFRS 15 Steps in an Odoo Context#

  1. Identify the contract → the signed sale order or contract
  2. Identify performance obligations → distinct goods or services promised
  3. Determine the transaction price → the total contract value
  4. Allocate the price to obligations → prorate by standalone selling price
  5. Recognize revenue when each obligation is satisfied → delivery, milestone, or over time

Deferred Revenue for Upfront Payments#

When a customer pays upfront for services delivered over time:

  1. Invoice the customer → Account: Deferred Revenue (Liability)
  2. Set up a deferred revenue schedule in Odoo (see "Managing Prepaid Expenses and Deferred Revenue")
  3. Each period, Odoo auto-posts: Debit Deferred Revenue → Credit Service Revenue

This matches revenue recognition to when the service is actually delivered.

Milestone-Based Revenue Recognition#

For project-based contracts with milestone payments:

Project → [Project] → Milestones → New:

  • Milestone 1: Design Complete - $25,000 (recognized on completion)
  • Milestone 2: Development Complete - $50,000
  • Milestone 3: Go-Live - $25,000

When each milestone is marked complete:

  1. Odoo triggers an invoice for that milestone amount
  2. Revenue is recognized on the invoice date - correctly aligned with obligation completion

Contract Modifications Under IFRS 15#

When a contract is modified (scope change, price adjustment):

  • Additive change (new distinct service at standalone price): treat as a new contract
  • Modification of existing service: adjust the transaction price allocation across remaining obligations

In Odoo: create a new sale order line for additive changes; issue a credit note + new order for modifications that change the existing obligation.

Multi-Element Arrangements#

When a sale includes software + support + implementation:

  1. Determine standalone selling prices for each element
  2. Allocate the total contract price pro-rata:

- Software: $8,000 standalone → 40% of bundle

- Support: $6,000 standalone → 30%

- Implementation: $6,000 standalone → 30%

  1. Recognize:

- Software revenue at delivery of license

- Support revenue ratably over 12 months

- Implementation revenue at go-live (point in time) or % completion (over time)

Manage this allocation in Odoo using separate invoice lines and deferred revenue schedules per element.

Disclosure Requirements#

IFRS 15 requires detailed disclosures in financial statements - use Odoo's analytic account and deferred revenue reports to compile:

  • Remaining performance obligations (contract backlog)
  • Revenue recognized from contract liabilities (deferred → recognized this period)
  • Disaggregated revenue by type and geography

Try ERPeek on your own Odoo module - ask questions, scaffold tests, and explore your codebase in plain language.

Get started free