| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Invoicing (account) |
| Community Apps Dependencies | Show |
| Lines of code | 4992 |
| Technical Name |
eh_account_fx_revaluation |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Invoicing (account) |
| Community Apps Dependencies | Show |
| Lines of code | 4992 |
| Technical Name |
eh_account_fx_revaluation |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
FX Period End Revaluation
Retranslate open foreign currency balances at the closing rate into one balanced, audited IAS 21 journal, with optional next day auto reversal.
Why this module
FX Period End Revaluation
IAS 21, done as a mechanism
Open monetary balances are retranslated at the closing rate and the unrealised gain or loss is posted to one balanced journal. Non monetary accounts (inventory, fixed assets, equity) are rejected even if a user flags them, because IAS 21 carries them at historical rate.
Lines are real records
Every adjustment is a queryable, exportable line carrying its closing rate snapshot, old and new balance, and partner. Each run stamps user and timestamp on every transition with full chatter, post and reverse are manager only, and a posted run cannot be re posted.
A missing rate stops the run
The ECB feed walks back from the daily to the 90 day historical feed for non business days and back dated runs, then surfaces an explicit error rather than returning empty. A missing closing rate raises and names the currency instead of guessing.
Day in the life
A controller closes a multi currency month.
On the last day of the period the controller opens a new revaluation run, pulls the missing closing rates (only the currencies that actually appear in open lines are fetched), and computes. The run scans every open foreign currency receivable and payable, groups them by account, partner and currency, and produces one adjustment line per group, each carrying the closing rate it used. A line reconciled later than the revaluation date still counts because open balance is judged on the foreign currency residual, not a reconciliation flag. Posting books the per group adjustments and a single balancing leg to the FX gain or FX loss account. The controller ticks the auto reversal option, so the entry backs itself out on the next day and does not carry into the next period.
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.
Gain and loss classification respects the signed balance, so a positive adjustment on a credit balance liability is treated correctly versus the same adjustment on an asset. This sign inversion is the subtlety most spreadsheet workflows get wrong.
Open balance detection uses the foreign currency residual, so a line reconciled at a date after the revaluation date is still included while a fully settled line is skipped. Revaluation reflects what was actually open on the date.
The functional currency translation legs carry no amount in foreign currency, so the foreign currency residual stays on the original journal items and the same exposure is never revalued twice.
Within a run each currency is fetched from the rate source only once and cached, even across many account and partner groups, and only currencies present in open lines are requested from the provider.
The feed falls back from the daily to the 90 day historical XML for non business days and back dated runs and derives non EUR pairs by cross rate, then raises an explicit error rather than returning empty silently.
Regression effectiveness rejects a sign blind R squared by also requiring a negative slope near minus one, so a positively correlated, non hedging relationship fails the test instead of passing on correlation alone.
What is inside
Built to do the job, end to end.
- Revaluable account flag. A per account FX Revaluation toggle, defaulted on for receivable, payable, bank and credit card accounts. Non monetary account types are rejected with an explanatory error to keep retranslation IAS 21 monetary only.
- Revaluation run with state machine. One run record per period end date moving through draft, computed, posted, reversed and cancelled. Compute, post and reverse are explicit actions, each transition is stamped, and the generated and reversal moves link back to the run.
- Per group adjustment lines. One line per account, partner and currency, each storing the closing rate snapshot, old and new functional balance, and the adjustment, rounded with company currency precision before posting. Lines are real, queryable, exportable records.
- Single balanced journal entry. Posting books the per group adjustment to the account and a single balancing leg to the configured FX gain or FX loss account. The gain and loss legs come from the same per line adjustments, so the move balances by construction.
- Optional next day auto reversal. A one click option posts a reversal dated the next day, matching the common policy of reversing the unrealised entry at period start so it does not carry into the next period.
- Live ECB rate feed and daily cron. Fetches the ECB daily and 90 day historical XML over HTTP with EUR cross derivation, writes rates into the currency, runs on a daily cron, and pulls missing rates on demand for a run. No silent fallback: a missing rate raises and names the currency.
- IFRS 9 hedge accounting engine. Cash flow, fair value and net investment hedge models with dollar offset and slope guarded regression effectiveness tests, OCI versus P and L split posting, and OCI to P and L reclassification. Installs with the module and is reached via the Hedges action.
Honest about the edges
What this does not do, so nothing surprises you.
- IAS 21 compliant for the common case where the company keeps its functional currency in the ledger and transacts partly in foreign currencies. It revalues open monetary balances, it is not a full foreign operation translation engine.
- The hedge accounting engine installs and is functional, but it is not yet surfaced on a top level menu. Reach the hedge records through the Hedges action rather than a dedicated menu item.
- Hedge fair value changes are supplied manually or pushed from a treasury system into movement records. There is no automatic instrument valuation or market data feed for hedged items.
- Audit fields are readonly in the UI and every transition is tracked in chatter, but there is no model level write or unlink immutability guard on the run or line records.
- A missing closing rate aborts the whole run by design rather than skipping the affected currency. There is no per line isolation that posts the rest of the run around a missing rate.
Odoo 19 FX revaluation, IAS 21 foreign currency revaluation Odoo, unrealised gain loss period end Odoo Community, multi currency month end revaluation, ECB rate feed Odoo accounting, auto reverse FX revaluation journal entry, foreign currency receivable payable retranslation, IFRS 9 hedge accounting Odoo, hedge effectiveness dollar offset regression Odoo
Please log in to comment on this module