Each entity keeps its own chart, journal and functional currency. Consolidation is a read-only projection computed when you ask for it — there is no cross-entity posting to go wrong.
Consolidation reads; it never writes. An entity's books cannot be changed by the act of consolidating them.
Matched intercompany balances are eliminated and an unmatched difference is surfaced as a blocker. Nothing is netted away quietly.
The translation difference lands on Cumulative Translation Adjustment as its own line. It is a plug by definition — so it is labelled, not buried.
Own chart of accounts, own journal, own functional currency, own close. Entities share nothing but the group they roll up into.
Balance-sheet accounts at the closing rate, profit-and-loss at the average rate, summed by account code across the group.
Configurable receivable/payable code pairs eliminated against each other at the matched amount, with the residual reported line by line.
Rates are stored as rationals, never floats, so a conversion is reproducible to the minor unit years later. A rate that was never loaded throws rather than carrying a stale one forward.
Monetary balances in a foreign currency revalue at each period end and the delta hits FX gain or loss. Non-monetary balances never revalue, which is why revaluation is opt-in per account.
Ownership is recorded in basis points per entity, and a subsidiary cannot be added before its parent.
The demo runs on a seeded company with a live close waiting — two real blockers and agents holding proposals.