Match the mirror.
Net to zero.
Last reviewed·ReconPe Editorial
Upload both entity ledgers. A payable in Entity A must mirror a receivable in Entity B, and the pair must net to zero on elimination. ReconPe’s ACRE engine keys the two legs on the cross-referenced document, confirms the amounts agree within tolerance, and classifies the residue — FX differences across USD / EUR / INR, timing differences, one-sided entries, transfer-pricing markup. Asymmetry surfaces as one INVARIANT_VIOLATION, not two stray rows.
Where intercompany close actually breaks
The mirror that doesn't mirror
An intercompany payable in Entity A should have an exact receivable twin in Entity B, and the pair should net to zero on elimination. When the amounts disagree — or one leg is simply absent — the consolidation no longer eliminates clean. A spreadsheet shows two unrelated rows; the real story is a violated structural invariant.
Two legs, two currencies, two rates
Entity A books the charge in USD; Entity B records the same charge in EUR or INR at a different rate on a different day. Local amounts agree, base amounts don't — that signature is FX, not a real break. Net it the wrong way and you carry a phantom difference into consolidation.
Booked here this period, there the next
Entity A raises the intra-group invoice on 30-Mar; the counterparty books it on 02-Apr. Close March against an unbounded counterparty ledger and the pair looks one-sided — a timing difference masquerading as a missing entry that resolves itself a week later, after someone's chased it.
Transfer-pricing markup hides in the delta
Intra-group invoices carry a transfer-pricing markup, so the two legs are deliberately not equal at gross. Without modelling the markup, every marked-up pair reads as a value mismatch and buries the genuine one-sided entries and FX residuals under noise.
What the engine gives you
Mirror-pair matching, invariant-first
ACRE keys the two legs on the cross-referenced document ID, then confirms the amounts agree within tolerance — the mirror invariant. A balanced pair nets to zero on elimination; genuine asymmetry surfaces as a single INVARIANT_VIOLATION exception, not two stray rows. The framing is structural, as argued in /blog/intercompany-reconciliation-mirror-invariant-breaks/.
Currency-isolated FX handling
When local amounts agree but base amounts differ, the cause is classified FX, not a break. ReconPe rolls open FX differences into a period-end revaluation entry — one balanced sub-entry per currency, never summed across USD, EUR, and INR — and routes it to the approval inbox. AI proposes the reval direction; an accountant confirms gain or loss before anything posts.
Timing differences held, not flagged
Date-window awareness separates a true one-sided entry from a leg the counterparty simply hasn't booked yet. Timing differences are held as accepted reconciling items so close isn't blocked by a pair that will settle next period — and exception memory links it to the settling leg when it arrives.
Fellegi-Sunter confidence per pair
Each candidate mirror pair gets a 0–100 confidence score combining key agreement, counterparty match, and amount residual. High-confidence pairs auto-confirm; the mid band surfaces for review; low-confidence and asymmetric legs are flagged for investigation. No black box — every score is decomposable.
Elimination prep, audit-grade
Every confirmed pair exports its two legs, the residual, the confidence, and the rule that fired — the workpaper a group controller hands to the auditor. Reruns are deterministic. Open FX, timing, and one-sided items roll into a clean elimination schedule so consolidation starts from a tied position.
Cross-period exception memory
A leg that hadn't been booked by the counterparty this month doesn't vanish. ReconPe fingerprints the exception per organisation and links it to next period's mirror entry automatically — so a recurring late-booking entity is recognised as a pattern, not re-investigated from scratch every close.
Frequently asked
What is the mirror invariant in intercompany reconciliation?
The mirror invariant is the structural rule that an intercompany payable booked in one entity must have an equal-and-opposite receivable booked in the counterparty entity, so the pair nets to zero on consolidation elimination. ReconPe treats this as a first-class invariant rather than a generic two-file match: it keys the two legs on the cross-referenced document ID, confirms the amounts agree within tolerance, and emits an INVARIANT_VIOLATION exception when they don't. The reasoning behind the framing is laid out in /blog/intercompany-reconciliation-mirror-invariant-breaks/.
How does ReconPe handle FX differences between the two legs?
When Entity A books a charge in USD and Entity B records the mirror leg in EUR or INR at a different rate, the local amounts agree but the base amounts diverge — that signature is classified as an FX cause, not a real break. ReconPe rolls the open FX differences in a close package into a period-end revaluation entry, keeping each currency as a separate balanced sub-entry (USD, EUR, and INR are never summed together). That entry lands in the approval inbox as PENDING_REVIEW with the gain/loss direction surfaced for an accountant to confirm — AI proposes, a human disposes.
What happens when one entity books in the period and the other books next period?
That is a timing difference, and it's the most common false alarm in intercompany close. ReconPe's date-window awareness distinguishes a genuinely one-sided entry from a leg the counterparty simply hasn't posted yet, so it's held as an accepted reconciling item instead of blocking close as a missing match. When the counterparty leg arrives next period, exception memory links the held item to the settling entry automatically rather than treating it as a brand-new break.
Can it cope with transfer-pricing markup on intra-group invoices?
Intra-group invoices often carry a transfer-pricing markup, so the two legs are intentionally unequal at gross. The matching cascade — exact key, then fuzzy on counterparty and reference, then aggregation for split bookings — pairs the legs on the document reference rather than insisting on rupee-for-rupee equality, and the residual (the markup) is surfaced on the pair for review. You decide whether the markup is expected or a genuine variance; ReconPe doesn't silently absorb it.
How does this differ from AR-to-GL or AP-to-GL reconciliation?
Same ACRE engine, same exception memory, same agent modes — different invariant. AR-to-GL and AP-to-GL tie a sub-ledger to a control account, which is largely a many-to-one aggregation problem. Intercompany is a mirror problem: two independent entity ledgers that must agree leg-for-leg and net to zero on elimination. The matching leans on the exact key plus fuzzy counterparty resolution, the dominant break causes are FX, timing, and one-sided entries, and the output feeds consolidation elimination prep rather than a single control-account tie-out.
Will it work with Tally, Zoho Books, QuickBooks, NetSuite, or SAP?
Today ReconPe ingests CSV, Excel, JSON, and XML extracts from any source system, so the export-and-upload flow gives you a clean intercompany reconciliation in the first session — schema detection recognises the document reference, amount, currency, and counterparty entity columns on each leg without manual mapping. Approved journal entries, including the FX revaluation entry, export as Tally XML. Direct connectors to NetSuite, QuickBooks, and Zoho are being built; until they land, the extract-and-upload path is the supported way in.
Is the output strong enough for statutory audit and consolidation?
Every confirmed mirror pair exports its two source legs, the residual, the composite confidence, and the rule that fired; reruns are deterministic given the same inputs. Open FX, timing, and one-sided items roll into an elimination schedule so consolidation begins from a tied position, and the FX revaluation entry carries its per-currency sub-entries for the controller to post. The exception memory pool keeps a per-organisation fingerprint history with 180-day aging, so the human-state dimension — who accepted which break, when, and why — is captured as a first-class audit trail.

The intercompany USD/EUR puzzle
Parent in USD posts $50,000 to subsidiary in EUR on 15 March. Books close 31 March. The EUR has moved. Consolidation shows €380 variance — but it isn't a break. It's unrealised FX. Document it; books tie.
Every sub-ledger ties out in the same close
Same ACRE engine, same cross-period memory, same AI-proposes / finance-approves flow — across all six tie-outs of a month-end close.
Start consolidation from a tied position, not a spreadsheet.
Free tier reconciles 1 entity pair with up to 50 transactions per month — enough to run the mirror invariant on your own intercompany ledgers.
Request early access