One group, one September close.
Current answers to this question list the causes: timing, currency, missing entries, keying errors. All true. What they do not show is how the causes stack inside one difference, or which of them a journal cannot fix.
So here is an example group. Parent reports in US dollars. Rhine GmbH is its German subsidiary and keeps its books in euros. Services LLC is a second US company. Every intercompany charge is invoiced in dollars. We used example exchange rates, not market rates: 1.10 dollars per euro until 25 September and 1.08 from 26 September, which is also the closing rate. Company names are placeholders.
| Charge | Parent’s books | Rhine’s books | Matcher result |
|---|---|---|---|
| Opening balance (August invoice) | 200,000.00 due from Rhine | EUR 181,818.18 due to Parent, at 1.10 | Carried forward |
| Management fee, ref IC-0930 | 50,000.00 on 30 Sep | EUR 46,296.30 on 30 Sep, at 1.08 | Matched |
| Goods shipment, ref IC-0924 | 120,000.00 on 24 Sep | EUR 111,111.11 on 6 Oct, at 1.08 | Date lag, across the month end |
| IT recharge, ref IC-0917 | 18,400.00 on 17 Sep | EUR 16,363.64 on 19 Sep (18,000.00), at 1.10 | Amount mismatch, 400.00 |
| Interest on the group loan | 6,250.00 on 30 Sep | Nothing booked | Missing mirror |
| Consulting, ref IC-0912 | Billed by Services LLC, 9,800.00 on 12 Sep | EUR 8,909.09 on 12 Sep, booked as due to Parent | Wrong counterparty |
The balances are 120,991.81 dollars apart.
We ran these entries through the matching code Rivane uses, with its default settings. It matched one pair of journals, found one break of each journal type, and then compared the closing balances in dollars, translating Rhine’s euro balance at the closing rate.
| Pair | Owed to the lender | Owed by Rhine, at 1.08 | Difference | Tolerance | Result |
|---|---|---|---|---|---|
| Parent and Rhine | 394,650.00 | EUR 253,387.21 = 273,658.19 | 120,991.81 | 1,973.25 | Balances disagree |
| Services LLC and Rhine | 9,800.00 | Nothing due to Services | 9,800.00 | 100.00 | Balances disagree |
| Item | Break type | US dollars |
|---|---|---|
| Goods booked by Rhine in October | Timing | 120,000.00 |
| Interest not booked by Rhine | Missing mirror | 6,250.00 |
| Euro balance translated at 1.08, booked at 1.10 | Exchange difference | 4,141.81 |
| Recharge booked 400 short | Amount mismatch | 400.00 |
| Consulting booked as due to Parent | Wrong counterparty | (9,800.00) |
| Total difference | 120,991.81 |
Two things stand out. The wrong counterparty entry hides part of the problem: Rhine booked a 9,800 dollar consulting invoice from Services LLC as owed to Parent, which makes the Parent pair look 9,800 better and leaves Services LLC with nothing on the other side. A team that only compares one pair at a time can spend a day on the wrong company.
The second is the 4,141.81 dollars of exchange difference. No journal is missing or wrong there. Rhine booked its August balance and two September invoices at 1.10, and by 30 September a euro buys 1.08 dollars, so the same euros are worth fewer dollars than Parent is owed.
The gap that stays after every journal is fixed.
Suppose Rhine fixes all four journal breaks on 30 September: it books the goods in transit, tops up the recharge by 400 dollars, books the interest, and moves the consulting invoice to Services LLC. We ran the matcher again.
| Stage | Pair | Owed to the lender | Owed by Rhine | Difference | Result |
|---|---|---|---|---|---|
| After the four journal fixes | Parent and Rhine | 394,650.00 | EUR 361,746.64 = 390,686.37 | 3,963.63 | Break |
| After the four journal fixes | Services LLC and Rhine | 9,800.00 | EUR 8,909.09 = 9,621.82 | 178.18 | Break |
| After Rhine revalues at 1.08 | Parent and Rhine | 394,650.00 | EUR 365,416.67 = 394,650.00 | 0.00 | Matched |
| After Rhine revalues at 1.08 | Services LLC and Rhine | 9,800.00 | EUR 9,074.07 = 9,800.00 | 0.00 | Matched |
Both pairs still break. The Parent pair is 3,963.63 dollars apart against a tolerance of 1,973.25, and the Services LLC pair is 178.18 apart against a tolerance of 100. Widening the tolerance would hide it this month and fail again next month.
The answer is in IAS 21. Paragraph 23(a) says foreign currency monetary items are translated at the closing rate at the end of each reporting period, and paragraph 28 puts the exchange difference in profit or loss. Rhine owes dollars, so it must remeasure those dollar payables at 1.08. That entry is a loss of EUR 3,670.03 on the Parent balance and EUR 164.98 on the Services LLC balance. After it, both pairs agree to the cent.
Then comes the part that surprises people. IFRS 10 paragraph B86(c) eliminates intragroup balances in full, so the 394,650 dollars disappear from the group balance sheet. Rhine’s exchange loss does not. IAS 21 paragraph 45 says an intragroup monetary item cannot be eliminated against its mirror “without showing the results of currency fluctuations”, because it commits the group to convert one currency into another. The loss stays in consolidated profit or loss, as a real cost of the group carrying a dollar balance inside a euro company.
That is why one common example of a currency conversion difference corrected before consolidation needs care. If the difference comes from rates, the right fix is the revaluation entry in the entity that holds the foreign currency item. Adjusting one side to equal the other, or plugging the elimination, removes a gain or loss the group is required to report.
A close order that ends with matching balances.
- Agree a cut-off date and one shared reference for every intercompany charge. The issuer puts the reference on the invoice and the receiver keys it on its journal. A shared reference is what lets a matcher pair two lines with different dates or amounts.
- Map every intercompany account to one counterparty. An account called “due to group companies” cannot tell you which company Rhine owes, so a wrong counterparty stays invisible until the balances refuse to agree.
- Revalue foreign currency intercompany items in each entity at the closing rate before you match. This is the step most often left until after the matcher, and it is the one that produces a gap no journal fix can close.
- Match the journals and work the breaks by type. Timing: the receiver books goods in transit at month end. Amount: the issuer’s invoice is the reference, and the receiver corrects. Missing mirror: the receiver books its side. Wrong counterparty: reclassify to the right company.
- Reconcile the closing balances last, in the group reporting currency, with a tolerance stated in advance. Whatever is left above it after the steps above is an open question for a person, not a plug.
- Eliminate the agreed balances, and leave the exchange gains and losses from step 3 in group profit or loss.
What Oracle and SAP give you.
Oracle’s intercompany reconciliation report shows the receivables and payables difference in transaction currency. If you add a second currency, it asks for a conversion rate type and date. From the difference you drill to the journal lines that sit in one balance but not the other, and Oracle’s stated fix for a line posted to the wrong account is to reverse it.
SAP S/4HANA intercompany matching and reconciliation matches items with a matching method built from matching rules, with exact, suggested and exceptional match patterns. Reconciliation cases group the results into display groups with tolerance settings, and runs can be started from the apps or scheduled as background jobs.
Both are strong at finding the lines that differ. In both, as in any system, the revaluation is a separate close step, so put it before the matching run on the close calendar.
How Rivane matches intercompany today.
Rivane’s intercompany matcher runs per consolidation group and period, from Close management, Intercompany, with a Run matcher button. It starts from a counterparty map that names the group company behind each due-to and due-from account, compares every pair of companies in the group reporting currency, and labels each break with one of the five types used above. The tables in this article come from running the example through that matching code with its defaults.
Rivane intercompany matcher, as built
# How Rivane's intercompany matcher works today.
counterparty map each due-to / due-from account, per
entity, names one group company
legs read the period, widened by 62 days either
side, so a mirror in the next month
is still found
translation every leg at the spot rate on its
posting date; closing balances at the
closing rate. A missing or stale rate
stops the run; it never assumes 1.0
tolerance 0.5% of the larger side, floor of 100
in the reporting currency
date window 7 days (settable 0 to 31)
same transaction shared reference such as IC-0917, or
50% of narration words in common
break types date lag, amount mismatch, wrong
counterparty, missing mirror,
balances disagree
each item stored with a plain explanation, the
rate receipt and a link to the source
journal
matched balances passed to consolidation as the
elimination for that pair
What it does not do: the matcher reports breaks and does not post corrections. Fixing a break means a journal in the entity concerned, then a rerun. It also translates balances as they stand in the ledger, so the revaluation in step 3 of the close order has to be posted before the run for the exchange gap to clear. Tolerance and the date window can be changed per run through the API; the screen uses the defaults.
Keep the record your auditor will ask for.
- The counterparty map in force for the period, with who changed it and when.
- Every matched pair and every break, with both journal numbers, dates, amounts, and the rate used to translate each side.
- The revaluation entry in each entity, with the closing rate, its date and its source.
- For each break: the correcting entry, who posted it, and the rerun that shows the pair matched.
- The elimination entry, tied to the reconciled balances it removes.
Revalue first, then match.
In the example, four of the five causes were journals to fix, and each had an owner and a date. The fifth was 3,963.63 dollars of exchange difference that only a revaluation could clear, and its loss belongs in group profit. Put revaluation ahead of matching on the close calendar and the balances that remain to argue about are the real ones.
If you run a group with more than one currency, see how Rivane handles multi-entity close, intercompany matching and eliminations.
Sources
- IFRS 10 Consolidated Financial Statements, paragraph B86(c), as adopted in Commission Regulation (EU) 2023/1803. Read in the text for eliminating in full intragroup assets, liabilities, income, expenses and cash flows relating to transactions between entities of the group.
- IAS 21 The Effects of Changes in Foreign Exchange Rates, paragraphs 23, 28 and 45, in the same Regulation. Read in the text for translating foreign currency monetary items at the closing rate, recognising the exchange difference in profit or loss, and for an intragroup monetary item not being eliminated without showing the results of currency fluctuations.
- Oracle Financials 26D, Implementing Accounting Hub, Generate the Intercompany Reconciliation Report. Read in the page for the difference shown in transaction currency, the conversion rate type and date asked for when a second currency is chosen, drilling to journal lines that are in one balance but not the other, and reversing a journal posted to the wrong account.
- SAP Learning, Configuring the Financial Closing in SAP S/4HANA, Intercompany Matching and Reconciliation (Overview). Read in the page for matching methods made of matching rules, exact, suggested and exceptional match patterns, display groups with tolerance settings, and runs started from the apps or scheduled as background jobs.
- insightsoftware, Intercompany Reconciliation (encyclopedia entry). Read as a current answer. It lists timing differences, currency conversion variances and data entry errors as causes, resolved through journal entries or allocations, without a worked example.
- Hyperbots, What is Intercompany Matching? (glossary). Read as a current answer. Its example treats a currency conversion difference as a mistake corrected before consolidation.
A note on how this was researched. IFRS 10 and IAS 21 were read in the text adopted by the European Union. This article cites IFRS; if you report under US GAAP, confirm the treatment under ASC 830 with your auditor. The Oracle and SAP behaviour comes from each vendor’s own pages and may differ by release. The group, the charges and the rates are examples, and every figure was produced by the Rivane matching code and checked by hand. The Rivane section describes the product as built today, checked against the code rather than marketing copy.
On embedded social posts: we looked for public posts from vendors or practitioners on exchange differences in intercompany reconciliation and found none we could verify as current, relevant and authentic, so this article uses ordinary citations instead.