This integration playbook covers the end-to-end intercompany elimination process across three leading consolidation platforms: Oracle FCCS, SAP S/4HANA Group Reporting with ICMR, and OneStream. It addresses integration patterns between source ERP systems and consolidation engines for both homogeneous and heterogeneous ERP landscapes.
| System | Role | API Surface | Direction |
|---|---|---|---|
| Source ERP(s) | Transaction origination — GL balances, subledger detail | REST / OData / File-based | Outbound to consolidation |
| Oracle FCCS | Consolidation engine — matching, elimination, reporting | REST (EPM Automate), Data Integration | Inbound + processing |
| SAP S/4HANA Group Reporting | Consolidation engine — ICMR matching, elimination, reporting | OData v4, ICMR APIs, RFC | Inbound + processing |
| OneStream | Consolidation engine — matching, elimination, reporting | REST API, Connector Framework | Inbound + processing |
| iPaaS / Middleware | Orchestration — data extraction, transformation, scheduling | MuleSoft / Boomi / Workato / Celigo | Orchestrator |
| Consolidation Engine | Data Load API | Elimination Trigger | Matching API | Real-time? | Multi-GAAP? |
|---|---|---|---|---|---|
| Oracle FCCS | EPM Automate REST + Data Management | Consolidation process (automatic) | Manual matching workspace + rules | No (batch) | Yes |
| SAP S/4HANA Group Reporting | OData v4 + Flexible Upload + RFC | Group close task (ICMR-linked) | ICMR (real-time matching) | Yes (ICMR) | Yes |
| OneStream | REST API + Connector Framework | Consolidation workflow (rules engine) | IC Matching cube + rules | No (batch) | Yes |
| BlackLine (overlay) | API connectors to ERPs | Workflow-triggered | Automated matching engine | Near-real-time | N/A |
| Workiva (overlay) | API + spreadsheet upload | Manual / workflow | Transaction-level matching | No | N/A |
| Engine | Limit Type | Value | Notes |
|---|---|---|---|
| Oracle FCCS | Max data load file size | 2 GB per file | Split larger extracts |
| Oracle FCCS | Max concurrent data loads | 5 per application | Queue additional loads |
| SAP S/4HANA ICMR | Max entities per matching run | No hard limit (performance-dependent) | Degrade above 500 entities |
| SAP S/4HANA | OData batch request size | 1,000 changesets per batch | Chunk larger payloads |
| OneStream | REST API payload | 100 MB per request | Connector framework handles chunking |
| Engine | Limit Type | Value | Window | Notes |
|---|---|---|---|---|
| Oracle FCCS | EPM Automate sessions | 1 concurrent per user | Per session | Use service accounts |
| Oracle FCCS | API calls (EPM Cloud) | Fair use (no hard cap) | 24h | Monitor via Activity Reports |
| SAP S/4HANA | Communication Arrangement API calls | Configurable per arrangement | Tenant-specific | Default: no hard limit on Cloud |
| OneStream | REST API calls | Governed by platform license | Per tenant | Contact OneStream for specifics |
| Engine | Flow | Use When | Token Lifetime | Notes |
|---|---|---|---|---|
| Oracle FCCS | EPM Automate CLI + OAuth | Scheduled consolidation runs | Session-based (8h) | Service account recommended |
| Oracle FCCS | REST API with OAuth 2.0 | Custom integrations | 1h access token | Refresh via token endpoint |
| SAP S/4HANA | OAuth 2.0 Client Credentials | Server-to-server ICMR/OData | Configurable (default 12h) | Communication Arrangement required |
| SAP S/4HANA | SAML / SSO | Interactive group reporting | Session-based | For Fiori-based matching workspace |
| OneStream | REST API Bearer Token | All programmatic access | Configurable (default 4h) | API key + secret for token generation |
START — Implement intercompany elimination integration
|
+-- What consolidation engine are you using?
| +-- Oracle FCCS
| | +-- Single Oracle ERP Cloud --> Data Integration direct connector
| | +-- Multiple / non-Oracle ERPs --> iPaaS + Data Management flat file
| | +-- Standard IC balances --> Built-in FCCS_Intercompany Eliminations
| | +-- Custom rules (margin, markup) --> Configurable Consolidation Rules
| |
| +-- SAP S/4HANA Group Reporting
| | +-- All SAP S/4HANA --> ICMR native (no ETL needed)
| | +-- Mixed SAP + non-SAP --> Flexible Upload / API import to ICMR
| | +-- Real-time continuous --> ICMR with daily data release
| | +-- Period-end batch --> Group close task with ICMR trigger
| |
| +-- OneStream
| | +-- Direct ERP connectors available --> OneStream connector
| | +-- Custom sources --> REST API / flat file load
| | +-- Simple 1:1 matching --> IC Matching dimension rules
| | +-- Complex many:many --> Custom business rules + workflow
| |
| +-- No consolidation engine / spreadsheet-based
| +-- < 10 entities --> Automate with scripts + reconciliation tool
| +-- 10+ entities --> STRONGLY recommend a consolidation engine
|
+-- Data flow: Extract --> Transform --> Load --> Match --> Reconcile --> Eliminate --> Report
|
+-- Multi-currency?
+-- YES --> Translate FIRST, then eliminate (current rate method default)
+-- NO --> Eliminate directly after matching
| Step | Source System | Action | Target System | Data Objects | Failure Handling |
|---|---|---|---|---|---|
| 1. Extract | Source ERP(s) | Export GL trial balance with IC dimension | iPaaS / staging | Trial balance, IC partner codes | Retry 3x, alert on missing entities |
| 2. Transform | iPaaS | Map COA, IC partners, currencies | Staging | Mapped trial balance | Reject unmapped accounts |
| 3. Load | iPaaS | Push data to consolidation engine | FCCS / SAP GR / OneStream | Consolidation data cubes | Idempotent reload — clear and replace |
| 4. Match | Consolidation engine | Auto-match IC transactions | Internal | Matched/unmatched pairs | Route unmatched to exception workflow |
| 5. Reconcile | Consolidation engine | Resolve discrepancies | Internal | Adjustment entries | Escalation after 48h |
| 6. Translate | Consolidation engine | Convert to reporting currency | Internal | Translated balances | Flag missing exchange rates |
| 7. Eliminate | Consolidation engine | Post elimination journals | Internal | Elimination JEs + plug entries | Abort if out-of-balance |
| 8. Consolidate | Consolidation engine | Roll up entity hierarchy | Internal | Consolidated trial balance | IC balances must net to zero |
| 9. Report | Consolidation engine | Generate consolidated statements | Reporting / BI | Financial statements | Reconciliation report for auditors |
Set up the IC dimension in your consolidation engine with members for each legal entity participating in IC transactions. [src1, src2]
# Oracle FCCS — import IC dimension members
epmautomate login [email protected] password https://epm-instance.oraclecloud.com
epmautomate uploadfile ic_members.csv inbox
epmautomate importdimension "FCCS" "Intercompany" "ic_members.csv"
Verify: Consolidation > Manage > Dimensions > Intercompany — all legal entities appear as IC members.
Extract account, entity, IC partner, currency, period, and amount. BOTH sides of every IC transaction must be extracted. [src4, src5]
-- Oracle ERP Cloud GL extract for FCCS
SELECT
gl.ledger_id,
gcc.segment1 AS entity,
gcc.segment5 AS intercompany_partner,
gcc.segment3 AS natural_account,
gl.currency_code,
gl.period_name,
SUM(gl.accounted_dr - gl.accounted_cr) AS balance
FROM gl_balances gl
JOIN gl_code_combinations gcc ON gl.code_combination_id = gcc.code_combination_id
WHERE gl.period_name = :period
AND gl.actual_flag = 'A'
AND gcc.segment5 IS NOT NULL
GROUP BY gl.ledger_id, gcc.segment1, gcc.segment5,
gcc.segment3, gl.currency_code, gl.period_name
Verify: Row count per entity > 0. IC partner column has no NULLs.
Map source ERP accounts to consolidation COA and IC partner codes. Transformation must be idempotent. [src4]
# Input: Source GL extract CSV
# Output: Mapped CSV ready for consolidation engine load
import pandas as pd
coa_map = pd.read_csv('coa_mapping.csv')
entity_map = pd.read_csv('entity_mapping.csv')
source = pd.read_csv('gl_extract.csv')
mapped = source.merge(coa_map, left_on='natural_account', right_on='source_account')
mapped = mapped.merge(entity_map, left_on='entity', right_on='source_entity')
unmapped = source[~source['natural_account'].isin(coa_map['source_account'])]
if len(unmapped) > 0:
raise ValueError(f"{len(unmapped)} unmapped accounts — fix mapping first")
mapped[['consol_entity', 'consol_account', 'consol_entity_ic',
'currency_code', 'period_name', 'balance']].to_csv('consol_load.csv', index=False)
Verify: Zero unmapped accounts. Output row count matches input.
Use clear-and-replace per entity per period for idempotency. [src1, src2]
# Oracle FCCS
epmautomate rundatarule "IC_Data_Load_Rule" "Jan-2026" "Jan-2026" \
REPLACE "consol_load.csv"
# SAP S/4HANA Group Reporting
curl -X POST "https://sap-instance.com/sap/opu/odata4/sap/api_grp_rptg_data_upload/..." \
-H "Authorization: Bearer $SAP_TOKEN" \
-H "Content-Type: application/json" -d @consol_load.json
# OneStream
curl -X POST "https://onestream-instance.com/api/data/load" \
-H "Authorization: Bearer $OS_TOKEN" \
-H "Content-Type: text/csv" --data-binary @consol_load.csv
Verify: Data load status returns SUCCESS. Trial balance totals match source.
Matching pairs reciprocal transactions. Discrepancies route to exception workflows categorized by type: timing, currency, or amount differences. [src2, src5]
Resolution matrix:
- Timing < 1 period: Post accrual in lagging entity
- Timing > 1 period: Escalate to IC coordinator
- FX within tolerance (< 0.1%): Post to FX elimination account
- FX outside tolerance: Restate at agreed rate
- Amount difference: Route to transfer pricing team
- Missing counterpart: Block elimination until both sides posted
Verify: Matching report shows > 95% auto-matched. Unmatched items within tolerance.
Post elimination journals at the first common parent. Validate IC balances net to zero. [src1, src3]
-- Validate: IC balances must net to zero after elimination
SELECT parent_entity, SUM(elimination_amount) AS net_ic_balance
FROM elimination_journals
WHERE period = '2026-01' AND elimination_type = 'Intercompany'
GROUP BY parent_entity
HAVING ABS(SUM(elimination_amount)) > 0.01
-- Expected: no rows returned
Verify: Query returns zero rows. All IC accounts net to zero at every parent node.
| Source ERP Field | Consolidation Engine Field | Type | Transform | Gotcha |
|---|---|---|---|---|
| GL Account Code | Consolidation Account | String | COA mapping table | Many-to-one possible — validate totals |
| Entity / Company Code | Consolidation Unit / Entity | String | Entity mapping table | Must exist in hierarchy before load |
| IC Partner Code | Intercompany Member | String | Partner mapping table | Must be valid entity in IC dimension |
| Functional Currency Amount | Amount (LC) | Decimal | Direct (if same currency) | Some ERPs store in cents |
| Reporting Currency Amount | Amount (RC) | Decimal | Translate via rate table | Rate source and timing must match |
| Period (YYYY-MM) | Period / Scenario | String | Period mapping | Fiscal year differences across entities |
| Debit/Credit indicator | Signed Amount | Decimal | Convert DR(+) / CR(-) | Some ERPs use separate columns |
| IC Transaction Type | IC Elimination Category | String | Category mapping | Drives which plug account is used |
| Trading Partner VAT ID | IC Partner Identifier | String | Lookup in master data | Critical for EU VAT reporting |
| Engine | Code | Meaning | Cause | Resolution |
|---|---|---|---|---|
| Oracle FCCS | EPMCSS-20501 | Data load validation failed | Unmapped dimension member | Add member or fix mapping |
| Oracle FCCS | EPMCSS-20123 | Consolidation process failed | Missing plug account | Configure plug account |
| SAP S/4HANA | ICMR_MATCH_001 | No matching partner entry | One side not posted | Post missing entry or adjust |
| SAP S/4HANA | GR_ELIM_002 | Wrong hierarchy level | Entity hierarchy misconfigured | Verify parent assignments |
| OneStream | OS-CONSOL-4001 | IC mismatch exceeds tolerance | Amount/currency difference | Adjust tolerance or resolve |
| OneStream | OS-LOAD-3002 | Duplicate data for period | Data loaded without clear flag | Use clear-and-replace |
Implement mandatory IC confirmation workflow — both entities must confirm before period close. [src5]Enforce consolidation process sequencing — translate first, then eliminate. [src7]Monitor monthly. Set threshold alerts (> $10K triggers investigation). [src1]Apply hierarchy changes prospectively. Maintain period-specific snapshots. [src1]Maintain separate elimination journals per GAAP basis. Run separate consolidation per standard. [src6]Chunk matching by IC category. Schedule during off-peak. Enable background processing. [src2]// BAD — eliminates at group level, misses intermediate subgroup consolidation
Elimination Level: Top Parent (Group)
Entity A (subsidiary of SubGroup X) sells to Entity B (subsidiary of SubGroup Y)
--> Elimination posted only at Group level
--> SubGroup X and SubGroup Y statements still contain IC transactions
// GOOD — eliminates at the correct level per accounting standards
Entity A (SubGroup X) sells to Entity B (SubGroup Y)
--> Both roll up to Regional HQ
--> Elimination posted at Regional HQ (first common parent)
--> Both subgroup and group consolidated statements are correct
// BAD — eliminates in local currencies, then translates
Step 1: Entity A (EUR) has IC receivable 100 EUR from Entity B (USD)
Step 2: Eliminate 100 EUR vs 110 USD (WRONG — different currencies)
Step 3: IC accounts don't net to zero in reporting currency
// GOOD — translate to reporting currency, then eliminate matched amounts
Step 1: Translate Entity A: 100 EUR --> 108 USD at closing rate
Step 2: Entity B already in USD: 110 USD payable
Step 3: Eliminate 108 USD vs 110 USD
Step 4: 2 USD difference --> FX elimination plug account
--> IC accounts net to zero (within tolerance)
// BAD — one entry for all IC transaction types
Dr. IC Revenue $500,000
Cr. IC COGS $500,000
// Misses: IC loans, dividends, management fees, unrealized profit
// GOOD — separate entries per IC category
// Sales/Purchases
Dr. IC Revenue $500,000
Cr. IC COGS $500,000
// Loans
Dr. IC Loan Payable $200,000
Cr. IC Loan Receivable $200,000
// Dividends
Dr. IC Dividend Inc $50,000
Cr. IC Dividend Paid $50,000
// Unrealized IC Profit (at HISTORICAL rate)
Dr. IC Profit Elim $30,000
Cr. Inventory $30,000
Create IC SLAs with standard pricing, payment terms, and currency conventions. [src5]Configure ownership tables. Verify NCI formulas match ASC 810-10-45 or IFRS 10 B94. [src6]Monthly elimination cycles minimum. Best: continuous matching with ICMR. [src4]Load-test with 3x expected peak volume. Set monitoring alerts. [src2]Version mapping with effective dates. Validate coverage before every load. [src4]Include IC cash flow categories in elimination rules. Verify independently. [src7]# Oracle FCCS — Check consolidation status
epmautomate getconsolstatus "FCCS" "Actual" "Jan-26" "Total_Entity"
# Oracle FCCS — Export IC matching report
epmautomate exportdata "IC_Matching_Report" "Jan-26"
# SAP S/4HANA — Check ICMR matching status
curl -X GET "https://sap-instance.com/sap/opu/odata4/sap/api_icmr_status/..." \
-H "Authorization: Bearer $SAP_TOKEN"
# SAP S/4HANA — List unmatched IC items
curl -X GET "https://sap-instance.com/sap/opu/odata4/sap/api_icmr_items/.../UnmatchedItemSet" \
-H "Authorization: Bearer $SAP_TOKEN"
# OneStream — Check consolidation status
curl -X GET "https://onestream-instance.com/api/consolidation/status?scenario=Actual&period=2026M1" \
-H "Authorization: Bearer $OS_TOKEN"
# Validate IC balances net to zero (any engine)
SELECT parent_entity, SUM(elimination_amount) AS net_ic_balance
FROM elimination_journals
WHERE period = '2026-01' AND elimination_type = 'Intercompany'
GROUP BY parent_entity
HAVING ABS(SUM(elimination_amount)) > 0.01
-- Expected: no rows returned
| Engine / Feature | Version | Release Date | Status | Key Changes |
|---|---|---|---|---|
| Oracle FCCS | 24.12 | 2024-12 | Current | Enhanced IC matching rules, improved plug account reporting |
| Oracle FCCS | 24.06 | 2024-06 | Supported | Multi-GAAP elimination rule sets |
| SAP S/4HANA ICMR | 2023 FPS02 | 2024-03 | Current | Real-time matching, API data import |
| SAP S/4HANA ICMR | 2021 | 2021-10 | Supported | Initial ICMR release |
| SAP BPC | 11.1 | 2020-05 | Maintenance | Being replaced by S/4HANA GR |
| OneStream | 8.2 | 2025-01 | Current | Enhanced connectors, REST API v2 |
| OneStream | 7.5 | 2023-06 | Supported | IC Matching cube improvements |
SAP BPC is in maintenance mode — SAP steers customers to S/4HANA Group Reporting with ICMR. Oracle Hyperion Financial Management (HFM) is being sunset in favor of FCCS. Organizations on legacy platforms should plan migration within 2-3 years.
| Use When | Don't Use When | Use Instead |
|---|---|---|
| Multi-entity group with IC transactions requiring consolidation | Single legal entity with no subsidiaries | Standard GL close process |
| 10+ legal entities across multiple jurisdictions | 2-3 entities with minimal IC transactions | Spreadsheet-based consolidation |
| Multiple source ERPs feeding one consolidation | Single ERP with built-in consolidation module | Native ERP consolidation |
| Multi-GAAP reporting (local GAAP + IFRS) | Single GAAP with simple structure | Simplified consolidation tools |
| High IC volume (> 1,000 transactions/month) | < 50 IC transactions per month | Manual matching + journal entries |
| Audited consolidated statements required | Internal management reporting only | BI tool with entity roll-up |
| Capability | Oracle FCCS | SAP S/4HANA GR + ICMR | OneStream | Notes |
|---|---|---|---|---|
| IC Matching | Manual workspace + rules | Real-time auto-matching | Rules-based matching cube | SAP most automated |
| Elimination Trigger | Consolidation process (batch) | Group close task (ICMR-linked) | Consolidation workflow | SAP offers real-time |
| Multi-GAAP | Parallel scenario dimensions | Multiple consolidation versions | Separate workflows | All three support it |
| API Data Load | EPM Automate REST + DM | OData v4 + Flexible Upload | REST API + connectors | SAP most modern API |
| Hierarchy Management | Dimension editor | Organizational structure | Entity dimension mgmt | SAP most integrated |
| Plug Account Handling | Automatic with config | Automatic with config | Automatic with config | All comparable |
| Audit Trail | Process logs + lineage | ICMR status + change docs | Workflow audit log | All adequate |
| Scalability | 1,000+ entities proven | 500+ entities proven | 500+ entities proven | FCCS best for large groups |
| Deployment | Cloud only | Cloud or on-premise | Cloud only | SAP only hybrid option |
| Pricing | Oracle EPM Cloud license | Included in S/4HANA | Platform license | SAP most cost-effective for SAP shops |