Borrowing Costs (IAS 23)
Capitalise the borrowing costs directly attributable to a qualifying asset, specific borrowings net of temporary investment income plus general borrowings at the capitalisation rate, capped at costs actually incurred, and reclassify them from interest expense to the asset in one balanced, sealed entry.
Why this module
Borrowing Costs (IAS 23)
The whole IAS 23 formula, not a flat rate
The capitalisable amount is specific borrowing cost less temporary investment income, plus general expenditure times the capitalisation rate, then capped at the borrowing costs actually incurred. Investment income floors the specific tranche at zero so it can never subsidise the general pool.
Weighted-average base from dated expenditure
Enter dated expenditure lines and each amount is apportioned by the fraction of the period it was outstanding, giving the weighted-average accumulated expenditure the rate is applied to. Leave the lines blank and a single flat expenditure figure is used instead.
One balanced entry, gated and sealed
Capitalising is restricted to the EH Accounting Manager group and writes a single balanced move that debits the asset account and credits the interest account, marked sealed and stamped on the chatter. Measurement inputs freeze once posted.
Day in the life
Closing a construction period
You open a borrowing-cost record for the qualifying asset, enter the specific borrowing cost and any temporary investment income, set the capitalisation rate and the general expenditure or dated expenditure lines, and enter the total borrowing costs actually incurred. The result group shows the uncapped and capped capitalisable amounts as you type. If activity was suspended you add a suspension span and the window logic carves those days out. A manager clicks Capitalise, the module posts the balanced reclassification entry from interest to the asset, and the record moves to Capitalised with its inputs frozen so the figure can never drift away from what was posted.
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.
Temporary investment income is netted against the specific borrowing cost only and floored at zero, so an excess of income can reduce the specific tranche to nil but never erode the general-borrowing component.
The capitalised amount is capped at the borrowing costs actually incurred in the period, and the final figure is floored at zero, so it can never exceed real cost or go negative.
Commencement, cessation and suspension dates carve the active window out of the period; expenditure before commencement, after cessation or during a suspension is not capitalised, and the window can only ever reduce the base, never inflate it.
Once a period is capitalised, every measurement input on the record, its dated expenditure lines and its suspension spans are frozen against edit, create, unlink and re-parenting, so a posted entry can never be silently re-measured.
A missing journal or account, a non-draft state, or a nil capitalisable amount each raise an explicit error rather than posting nothing or a wrong figure.
What is inside
Built to do the job, end to end.
- eh.borrowing.cost. The period record on models/borrowing_cost.py: qualifying asset, specific and general inputs, capitalisation rate, actual cost cap, the computed weighted-average base, uncapped and capitalisable amounts, mail thread tracking, and the capitalise, cancel and view-entry actions.
- eh.borrowing.cost.line. Dated expenditure lines that drive the weighted-average base by time-apportioning each amount from its date to the period end, with create, write, unlink and re-parent all frozen once the parent is capitalised.
- eh.borrowing.cost.suspension. Suspension spans for IAS 23.20-21 with a database check that the end is after the start; spans are clamped and merged into disjoint active sub-windows and frozen after posting.
- Balanced sealed entry. action_capitalise builds one account.move that debits the qualifying asset account and credits the interest and borrowing cost account for the rounded capitalisable amount, marks it sealed, posts it and links it back to the record.
- Security and isolation. ir.model.access.csv grants user, manager and read-only auditor rights across the three models, a global company-isolation record rule scopes records to the active companies, and posting is gated to the EH Accounting Manager group.
- Sequence and views. A per-year BORR reference sequence names each record, and the list and form views expose the inputs, dated expenditure, suspension periods, the live result group and the posted-entry stat button.
Honest about the edges
What this does not do, so nothing surprises you.
- It capitalises borrowing costs into a nominated asset account through one general journal entry; it does not integrate with a fixed-asset register or start depreciating the capitalised amount.
- It does not pull borrowing costs, expenditure or interest automatically from loans, bank statements or existing journal entries; the specific cost, investment income, expenditure, rate and actual cost are entered on the record.
- It does not compute the capitalisation rate for you from your general borrowings; you enter the weighted-average rate as a percentage.
- It does not itself reverse a posted entry; cancelling a capitalised record is blocked until you reverse its journal entry in accounting.
- There is no borrowing-cost disclosure note or report beyond the record, its tracked history and the posted move.
odoo 19 borrowing costs, IAS 23 odoo, interest capitalisation odoo, capitalisation rate, qualifying asset, directly attributable borrowing cost, specific and general borrowings, temporary investment income, weighted average expenditure, borrowing cost capitalisation, reclassify interest to asset, odoo 19 community accounting
Borrowing costs eligible for capitalisationAn IAS 23 computation that nets specific borrowing costs of temporary investment income and applies the capitalisation rate to general expenditure, capped at the actual borrowing cost.
Please log in to comment on this module