Deferred Tax (IAS 12)
Compute deferred tax under the IAS 12 balance-sheet liability method, then post the period movement to profit or loss or to OCI as one balanced, audit-stamped journal entry.
Why this module
Deferred Tax (IAS 12)
The liability method, done properly
Temporary difference equals carrying amount less tax base, classified taxable or deductible by nature, multiplied by the enacted rate. Assets, liabilities, and tax losses each follow the correct IAS 12.15-24 sign convention rather than a single flat formula.
Only the period movement hits the ledger
Each line carries an opening position, and the run posts the closing-less-opening movement as one balanced entry. Deferred tax asset and liability legs are debit and credit natured, and the expense or OCI counterpart is the balancing plug, so the entry ties to the cent.
Posted figures are frozen and manager-gated
Once posted or reversed, the measurement fields on the run and its lines are locked at the ORM layer. Posting, reversal, and cancellation require the EH Accounting Manager group, and each action is timestamped with the acting user.
Day in the life
Period-end deferred tax in one run
You open a deferred tax run for the reporting date, set the statutory rate, and list each temporary difference with its carrying amount and tax base: accelerated depreciation, a warranty provision, an ECL allowance, a revaluation surplus taken to OCI. Compute seeds any blank line rate from the statutory rate, rolls opening balances forward from the prior posted run, and flags any opening that does not tie out. You review the closing deferred tax asset and liability, the split of the movement between profit or loss and OCI, and the effective-tax-rate reconciliation. A manager posts, and one balanced journal is written and sealed. If a later period needs correction, a manager reverses it: the symmetric entry is posted a day after period end and both entries are preserved.
Edge cases
The cases most modules quietly ignore.
In the shipped code today, each one a place where a cheaper module silently does the wrong thing.
A deferred tax asset is recognised only to the extent of projected recoverable profit (IAS 12.24/34): the deductible difference is capped at the entered recoverable amount before the rate is applied, and the unrecognised portion is tracked separately for IAS 12.81(e) disclosure. A hard not-recoverable flag excludes the DTA entirely.
Each line compares its entered opening to the same difference's closing on the prior posted run, matched by name within the company, and raises a tie-out flag when they disagree so a keying error that would silently mis-state the movement is caught before posting.
Lines flagged as recognised in OCI have their movement routed to the OCI reserve rather than profit or loss (IAS 12.61A), and posting is blocked with an explicit message if an OCI line exists but no OCI equity account is configured.
Re-pointing a draft line's run_id at a posted run, resetting a posted run to draft, or deleting a posted run are each blocked, so a plain user cannot lift the figure freeze on a GL-backed movement through a raw ORM write.
A run whose net movement is nil raises rather than posting an empty entry, and a missing asset, liability, expense, OCI account, or journal each surface a named, explicit error at post time.
What is inside
Built to do the job, end to end.
- eh.deferred.tax.run. The period-end computation for one company: statutory rate, the four posting accounts plus OCI reserve and journal, computed closing DTA/DTL, net position, and the profit-or-loss and OCI movement split. A unique constraint allows one run per company per reporting date.
- eh.deferred.tax.line. One temporary difference: carrying amount, tax base, nature, category, per-line rate, recoverability flag and cap, OCI flag, and opening balances. Computes the taxable and deductible split, closing and unrecognised DTA, closing DTL, and the movement from opening.
- ETR reconciliation. IAS 12.81(c) reconciliation on the run: accounting profit at the statutory rate, plus current tax and the deferred movement to give total tax expense, the effective rate, and a residual that flags any unexplained reconciling item.
- Balanced journal builder. _build_move posts the movement as one entry in the general journal, with the deferred tax expense or income leg as the balancing plug and the reserve leg for OCI, then posts and seals it. Reversal uses the native reverse-moves path dated the day after period end.
- Security and isolation. Three-tier access (user, manager, auditor) via eh_account_base groups, with auditors read-only and only managers able to delete, plus global multi-company record rules on both models.
Honest about the edges
What this does not do, so nothing surprises you.
- It does not detect temporary differences automatically from your ledger; each difference is entered with its carrying amount and tax base.
- It does not track deferred tax by individual asset over time; the prior-period carry-forward is matched by the line's name within the company, so consistent naming across runs is required.
- It applies the single enacted rate you enter per line and does not model expected future rate changes or graduated tax schedules.
- It does not prepare or lodge any tax return; the current tax expense used in the reconciliation is entered from your return or BAS.
- It does not maintain separate tax jurisdictions, transfer pricing, or group tax consolidation; each run is a single-company, single-rate computation.
- It computes in the company currency only and does not translate deferred tax on foreign operations.
odoo 19 deferred tax, IAS 12 deferred tax odoo, deferred tax asset liability, temporary differences accounting, tax base carrying amount, effective tax rate reconciliation, deferred tax OCI, tax losses carried forward, balance sheet liability method, deferred tax journal entry, deferred tax recoverability, odoo 19 community accounting
Deferred tax run, computedThe IAS 12 closing deferred tax asset and liability, the split of the period movement between profit or loss and OCI, and each temporary difference with its carrying amount, tax base, and enacted rate.
Modules teams pair with this one.
Premium ERP Heritage modules that extend the same stack, each built to the same engineering bar.
The Australia country pack for the ERP Heritage Employment Hero integration
Sync certifications, qualifications and employee document metadata from the Employment Hero people platform into...
Sync Employment Hero leave categories, leave requests and leave balances into the standard Odoo Time Off app, wit...
Show the Hijri (Umm al-Qura) date alongside Gregorian dates across Odoo 18
Connect Odoo partner records to the Saudi SPL National Address service and the Wathq commercial registry
Please log in to comment on this module