Employee Benefits (IAS 19)
Import the actuary's valuation and the module owns the ledger mechanics: net interest on the opening net position, service cost to profit or loss, remeasurements to non-recycling OCI, the asset ceiling, settlements, and rollforward ties that keep every disclosure schedule reconciled.
Why this module
The books the actuary's report never touches.
P&L and OCI, kept apart
Current and past service cost and net interest go to profit or loss; actuarial gains and losses, the excess return on plan assets and asset ceiling changes go to other comprehensive income and are never recycled (IAS 19.122). Each posted valuation books one balanced entry that splits them correctly.
Closing figures that must tie
The closing obligation and closing plan assets are editable so the actuary's reported figures can be keyed, but a rollforward-tie constraint refuses any closing that does not reconcile to the movement analysis within a cent, and each period's opening chains to the prior posted valuation's closing.
Surplus capped at the ceiling
When the plan is in surplus, the recognised asset is the lesser of the surplus and the asset ceiling (IAS 19.64); the unrecognisable excess is an allowance credited to the plan asset account, and its period change routes to OCI, disclosed separately in the ceiling schedule.
Day in the life
A period from actuarial report to posted entry.
You register the defined benefit plan, mark it funded or unfunded, set the accounts and the contribution routing, and activate it. Each period you create a valuation and key the actuary's figures: the obligation and plan assets, the service cost, the actuarial gains and losses, contributions and benefits paid, the discount rate and any settlement. The module derives net interest on the opening balances, the closing rollforward, the P&L and OCI split and the asset ceiling. It refuses to post if a closing figure does not tie or the opening does not chain to the prior period. When it does tie, a manager posts one balanced sealed entry, and the IAS 19.140-141 obligation, asset and ceiling schedules read straight off the posted ledger.
Edge cases
The controls that keep the disclosures honest.
Each one is in the shipped code today.
A keyed closing obligation or plan asset that does not reconcile to opening plus the movement analysis within one cent is refused, and the check re-runs at the posting gate, so a draft made before the prior period posted can never slip a stale opening onto the ledger.
A funded plan pays benefits and settlements out of plan assets with no employer cash leg; an unfunded plan holds no assets at all, so opening assets, contributions and excess return are constrained to zero and the employer pays benefits directly. The asset ceiling can never apply to an unfunded plan.
Past service cost is recognised in profit or loss immediately, never spread, and may be negative for a benefit reduction; a settlement gain or loss is computed as the obligation released minus the payment and sits inside service cost, per IAS 19.8 and 19.103.
Valuations post in period order and reversal runs newest to oldest, so the opening-to-closing chain that makes the disclosure schedules audit-proof can never be broken from the middle.
A posted valuation freezes its inputs and cannot be deleted or re-keyed; the generated entry is sealed against the standard reversal wizard, so a restatement always runs through the module's own Reverse action that posts the mirroring entry.
What is inside
Built to do the job, end to end.
- Defined benefit plan register. One record per plan carrying the funded flag, the contribution routing choice, the six ledger accounts (service cost, net interest, remeasurement OCI, DBO liability, plan asset, contribution or benefit payment) and the journal, with a draft, active and closed lifecycle.
- Per-period valuation. The actuary's imported inputs plus the computed net interest, service cost total, settlement gain or loss, closing rollforward, net liability or asset, asset ceiling effect and OCI remeasurement, all rounded in a documented order.
- Rollforward-tie and opening-chain constraints. Keyed closing figures must reconcile to the movement analysis within a cent, opening figures must equal the prior posted closing, and both re-check at the posting gate.
- Sealed posting and reversal. One balanced sealed journal entry per posted valuation, with an internal balance assertion, and a state-machine Reverse that posts the mirroring entry rather than editing the sealed move.
- Disclosure feed (IAS 19.140-141). A rollforward builder that returns the obligation, plan asset and asset ceiling movement schedules straight from the posted valuations, reconciled by construction.
- Defined contribution accrual (IAS 19.51). A simple per-period accrual booking the contribution as an expense and a payable in one sealed entry, so the module covers the whole of IAS 19's scope.
Honest about the edges
What this does not do, so nothing surprises you.
- It is an accounting layer, not an actuarial engine: the obligation, plan assets, service cost, actuarial gains and losses and asset ceiling are imported inputs. It carries no mortality tables and no salary projection.
- Net interest is the discount rate on the opening balances (IAS 19.123 simplified); mid-year weighting of contributions and benefit payments in the interest calculation is out of scope.
- Interest on the asset ceiling effect is not split out of net interest; the whole change in the ceiling effect routes to OCI, a stated simplification consistent with rate times opening balances.
- It does not generate a formatted disclosure note; it feeds the movement schedules as data, not a rendered report.
- It covers defined benefit accounting and a defined contribution accrual; short-term benefits, other long-term benefits and termination benefits are out of scope.
- It holds amounts in the company currency of the plan; multi-currency plans are out of scope.
Installing this module
A standard Odoo addon, installed the standard way.
This is a standard Odoo addon that ships Python models, not a data-only package. Install it by placing the module folder, together with its dependency modules, into a directory on your Odoo addons_path, then open Apps, update the apps list, and install it from there. Do not use the Apps to Import Module upload screen: that path does not load Python code, so a module with models will not run when installed that way. Once the folder is on the addons_path the usual Apps install and later upgrades work exactly as they do for any other addon.
odoo 19 IAS 19, defined benefit accounting odoo, DBO rollforward, defined benefit obligation, net interest defined benefit, remeasurement OCI, non-recycling OCI, asset ceiling IAS 19.64, past service cost, settlement gain loss, funded pension plan, unfunded pension plan, defined contribution accrual, pension accounting odoo, IAS 19.140 disclosure schedule, plan assets rollforward
Modules teams pair with this one.
Premium ERP Heritage modules that extend the same stack, each built to the same engineering bar.
Imports finalised pay run journals from the Employment Hero payroll platform (KeyPay) into Odoo Community account...
Sync attendance clock events from the Employment Hero people platform into the stock Odoo Attendances app, keyed...
The Singapore country pack for the ERP Heritage Employment Hero integration
Please log in to comment on this module