| Availability |
Odoo Online
Odoo.sh
On Premise
|
| Odoo Apps Dependencies |
•
Discuss (mail)
• Invoicing (account) |
| Community Apps Dependencies | Show |
| Lines of code | 3798 |
| Technical Name |
eh_account_consolidation |
| 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 | 3798 |
| Technical Name |
eh_account_consolidation |
| License | LGPL-3 |
| Website | https://www.erpheritage.com.au/ |
Group Consolidation
Roll up every legal entity in your group. Translate, eliminate, carve NCI.
Overview
What this module does, in one read.
Define a consolidation entity with a parent and member companies, each carrying ownership percentage and consolidation method (full / proportional / equity). Run a per-period consolidation that pulls each member's trial balance, translates to the presentation currency at IAS 21 closing + average rates, applies your intercompany elimination journals, books the CTA balancing entry to OCI, and carves out non-controlling interest where ownership is below 100%.
Day in the life
Quarter-end. 5 subsidiaries across 3 currencies.
Wednesday morning the controller opens the consolidation entity for Q3. One click on Compute pulls each subsidiary's trial balance from the underlying companies, translates each foreign-currency line: closing rate for the balance-sheet items, average rate for income and expenses. The CTA difference posts to OCI automatically. Three IC elimination journals are queued for review (sales between AU and NZ subs, IC loan principal, management fee chargeback). After posting, the run computes NCI on the 70%-owned subsidiary and carves it to the configured equity-class account. The full consolidated trial balance is one query away. Total elapsed time: under an hour. The same close on Excel was a two-day cycle.
Capabilities
8 things this module gives you, with no padding.
Consolidation entity definition
One record per group perspective: name, code, presentation currency, root company, list of member companies.
Member companies + ownership
Per-member ownership percentage drives NCI carve-out. Method (full / proportional / equity) determines how the member rolls up.
Per-period run lifecycle
Draft to computed to reviewed to closed state machine. Compute pulls every member's trial balance and produces the consolidated set.
IAS 21 translation
Closing rate for balance-sheet items, average rate for income and expense. Different rates produce a CTA balancing entry that goes to OCI.
Intercompany elimination
Free-form elimination journals against the consolidated set. Posting refuses unbalanced lines so the elimination math is always sound.
Non-controlling interest
Ownership below 100% triggers an automatic NCI line: subsidiary equity x (1 - ownership%). Equity-method members are skipped.
Run lines tagged by source
Every consolidated line carries a kind discriminator (parent / subsidiary / elimination / CTA / NCI) so the breakdown is traceable per source.
Reviewed + closed lockdown
Closed runs are read-only and cited in audit. Reset-to-draft requires Accounting Manager privileges; full audit chain preserved.
Compared
How this module stacks up.
Workflow
Configure once. Operate. Audit.
Define entity
Create the consolidation entity with parent company and presentation currency. Add member companies with ownership and method.
Compute
Action pulls each member's TB, translates, scales by ownership, books CTA + NCI. One row per (account, kind, source).
Eliminate
Add free-form elimination journals against the consolidated set. Posting refuses unbalanced entries.
Review + close
Reviewer signs off; close locks the run for audit. Reopen requires Manager group + leaves audit trail.
Why Heritage
Where this leads, where it matches, what we are honest about.
- Foundation for group-level reporting on Odoo Community without paying for Enterprise.
- Tagged-by-source run lines so every consolidated number is traceable to the originating company / elimination / CTA / NCI calculation.
- Same lifecycle pattern as period-close and year-end so groups already on those flows pick this up without rework.
- Per-member ownership percentage and method.
- IAS 21 closing + average rate translation.
- Free-form IC elimination with balance enforcement.
- NCI carve-out via configurable equity-class account.
- Deferred-tax consolidation is queued for a follow-up wave; the foundation handles base translation + elimination + NCI.
- Equity-method members are skipped from per-account roll-up; the parent carries a single investment line. Automatic equity-method maintenance arrives in a future wave.
- Goodwill / fair-value-adjustment accounting at acquisition is out of scope; manual adjustments go through the elimination journal.
The full ERP Heritage Accounting Suite (26 modules)
Engineering
Ten engineering rules we hold ourselves to.
No silent fallbacks.Missing config, missing accounts, malformed input each surface explicit messages naming the bad field.
Tests cover the bug, not just the feature.Every defect found in review has a regression test attached to the fix, kept in the repository.
Plain Python where possible.Algorithms that do not need the ORM live under tools/ with unit tests that run without Odoo.
Atomic counters via SQL.Concurrent counters use UPDATE col = col + 1, never read-modify-write loops.
Per-record savepoints in cron loops.A single bad record never freezes the batch; failing rows are recorded, the rest of the batch keeps moving.
Schema-first XML output.PAIN.001 / PAIN.008 / UBL 2.1 generators target the published namespace; tests parse output back and assert structure.
ValidationError versus UserError.Constraint failures raise ValidationError; action failures raise UserError with a remedy.
Privilege groups, not direct upstream references.ACL CSVs reference suite-specific groups; the post-migration script promotes upstream-only users.
Append-only audit logs.Approval log, override log, reconciliation audit, mandate amendment log all override write and unlink at the model level.
Originality from public spec.Every standard implementation is built from the published technical specification, not from another vendor codebase.
The standard we hold: every shipped capability is original code from a public technical specification, with regression tests, with a documented engineering rule for the invariant the code preserves, and with no vendor names in code or user-facing docs. From the suite contributing process
Frequently asked questions
Honest answers to the questions a buyer asks.
How is the CTA computed?
Closing-rate translation of the balance sheet vs average-rate translation of the P&L produces a difference. We post that difference to a kind='cta' run line so the consolidated set balances per IAS 21.
Can I do equity-method investments?
Yes. Set the member's method to 'equity' and the run skips the per-account roll-up; the parent's investment line carries the share. Future waves will add automatic equity-method maintenance.
Does this handle minority interests?
Yes. When a full-method member has ownership below 100%, the run computes NCI = subsidiary equity x (1 - ownership%) and books it as a kind='nci' line.
What about deferred-tax consolidation?
Deferred-tax consolidation is queued for a follow-up wave. The current foundation handles the base translation + elimination + NCI; deferred-tax requires the additional layer.
Can the same module run multiple consolidation perspectives?
Yes. Each eh.consol.entity is independent. You can have one entity for IFRS group reporting and another for AU tax group with different members + currency.
Does this run on Odoo 19 Community?
Yes. Every module is built and tested against Odoo 19 Community. No Enterprise dependency anywhere in the stack.
What is the licence?
LGPL-3. Source available, modify and redistribute, with the LGPL terms on derivative works.
Will this conflict with another accounting addon I already use?
All models, fields, and security groups are namespaced under eh_. Conflicts with other suites are unlikely, and we test against the stock OCA + Odoo Enterprise modules.
Are the engineering principles documented?
Yes. The Engineering rules section above lists the ten invariants we hold across the suite. Every module references these rules in its CHANGELOG entry.
Is there a test suite?
Yes. Each module ships unit + integration tests; the test suite runs against Odoo 19 Community with no Enterprise dependency. Test counts are documented in CHANGELOG.
How do I get support?
Reach out via info@erpheritage.com.au or +61 469 095 910 (also www.erpheritage.com.au). Testing, deployment, and customisation work is invoiced via ERP Heritage.
Built by ERP Heritage
ERP Heritage builds accounting suite engineering for the Odoo Community ecosystem. Originality matters: every module is built from the public technical specification, with regression tests, plain Python where possible, and no vendor names in code or user-facing docs.
Built in Australia. Distributed under LGPL-3.
Talk to ERP Heritage about Odoo implementation, customisation, training, or support.
End-to-end engagement across the Odoo platform: implementation, customisation, reimplementation, functional and technical training, ongoing support, integration planning, and scoped extensions. One team, one response within a business day.
Group Consolidation, drop-in for Odoo 19 Community.
No Enterprise dependency. No vendor lock-in. Original work under LGPL-3.
Please log in to comment on this module