Objective
Establish a transparent, automated, and auditable intercompany framework that enforces IFRS compliance, segregation of duties (SoD), and real-time reconciliation across Bethlehem HQ, Ramallah, Jerusalem, Amman (Jordan), and Cairo (Egypt).
Quick Launch Checklist
Automated IC Transactions
Configure automated intercompany SO/PO, invoices, and journals with mirrored entries
Control Matrix
Implement centralized control matrix and cross-company reconciliation reports
Approval Workflow
Define approval workflow & SoD controls for IC creation, posting, and settlement
Exception Dashboards
Build exception dashboards for out-of-balance, missing mirror, or currency mismatch
Monthly IC Close
Establish monthly IC close checklist and audit trail logging
Continuous Monitoring
Integrate internal audit sampling & continuous control monitoring (CCM)
A. Intercompany Transaction Flow
Swimlane diagram showing automated SO/PO/Invoice mirroring between branches
(1399 Asset)
(2399 Liability)
(Net = 0)
Legend:
- All flows use IC accounts (1399–Assets / 2399–Liabilities)
- Currency translation at posting using FX rate from Odoo daily rate table
- Audit trail captured at each step; no manual adjustments allowed outside Controller role
- Automated by
alp_ic_auto_synccustom module
B. Controls Matrix (Key Financial & Operational Controls)
| # | Control Area | Control Objective | Control Description / Mechanism (Odoo) | Frequency | Control Owner |
|---|---|---|---|---|---|
| 1 | IC Creation Authorization | Ensure only valid IC transactions created | Restrict IC SO/PO creation to IC Controller; require cross-company approval workflow (alp_ic_auto_sync) | Continuous | IC Controller |
| 2 | Mirror Document Integrity | Guarantee one-to-one mirror between companies | Automated mirror PO/Bill creation; validation rule: count(SO)=count(PO) per pair | Daily | Finance Controller |
| 3 | Posting Approval SoD | Prevent same user from creating and posting | Rule: Creator ≠ Poster; enforced via access group & automated check | Continuous | Internal Audit |
| 4 | Account Mapping Accuracy | Ensure correct account codes used | IC journal uses pre-mapped 1399/2399 based on company pair; mapping locked | Continuous | CFO |
| 5 | FX Translation | Ensure consistent FX rate usage | System pulls daily rate; freeze rate at posting; log rate in journal ref | Daily | Treasury |
| 6 | Reconciliation Completeness | Ensure IC balances net to 0 across entities | Automated SQL/domain check; report differences > 0.01; auto-ticket to Helpdesk | Weekly | Group Finance |
| 7 | Period Close Controls | Prevent postings after close | Fiscal period lock at T+5; unlock via CFO + Audit approval only | Monthly | CFO |
| 8 | Change Management | Track config or mapping edits | All IC config objects tracked in audit log model; diff exported weekly | Weekly | Internal Audit |
| 9 | Data Quality | Prevent orphaned IC records | Scheduled job checks orphan records (missing mirror ID) | Daily | Data Gov Lead |
| 10 | Exception Escalation | Ensure timely correction of breaks | IC variance > threshold auto-creates "IC-Exception" Helpdesk ticket | Daily | IC Controller |
| 11 | Consolidation Integrity | Verify elimination correctness | Consolidation run compares elimination company vs. sum; report ≤ tolerance | Monthly | Group Finance |
| 12 | Documentation Retention | Ensure audit evidence retained | All IC docs auto-saved to /Finance/Intercompany/<period> | Monthly | Audit Team |
C. Sample Queries / Automated Checks
1. Out-of-Balance Intercompany Pairs
SELECT c1.name AS company_from, c2.name AS company_to,
SUM(a1.balance) AS from_balance, SUM(a2.balance) AS to_balance,
(SUM(a1.balance) + SUM(a2.balance)) AS net_diff
FROM account_move_line a1
JOIN account_move_line a2
ON a1.ref = a2.ref AND a1.company_id <> a2.company_id
JOIN res_company c1 ON a1.company_id = c1.id
JOIN res_company c2 ON a2.company_id = c2.id
WHERE a1.account_id IN (SELECT id FROM account_account WHERE code LIKE '1399%')
OR a1.account_id IN (SELECT id FROM account_account WHERE code LIKE '2399%')
GROUP BY c1.name, c2.name
HAVING ABS(SUM(a1.balance) + SUM(a2.balance)) > 0.01;
2. Missing Mirror Transactions
SELECT so.name AS ic_sale, so.company_id
FROM sale_order so
WHERE so.is_ic = TRUE
AND so.id NOT IN (
SELECT ic_source_id FROM purchase_order WHERE is_ic = TRUE
);
3. Post-Close Adjustments (Control Breach Detection)
SELECT move.name, move.company_id, move.date, move.write_uid
FROM account_move move
WHERE move.date < (SELECT lock_date FROM account_fiscalyear WHERE is_locked = TRUE)
AND move.create_date > move.date;
D. Intercompany Reconciliation Dashboard
Summary KPIs
Aging View
Outstanding IC receivables/payables > 30 days
| Company Pair | Outstanding | Age (Days) |
|---|---|---|
| HQ → AMM | $12,500 | 45 |
| HQ → EGY | $8,300 | 32 |
Break Analysis
By company pair, currency, document type
- HQ-AMM: Currency mismatch (ILS vs JOD) - $250 variance
- HQ-EGY: Missing mirror invoice - 1 document
Exception Tracker
Auto-populated from Helpdesk tickets tagged "IC-Exception"
| Ticket # | Pair | Issue | Status |
|---|---|---|---|
| #IC-2025-045 | HQ-AMM | FX rate mismatch | In Progress |
| #IC-2025-046 | HQ-EGY | Missing PO mirror | In Progress |
E. Segregation of Duties (SoD) – Intercompany Layer
| Role | Can Create SO/PO | Can Post Journal | Can Approve FX Rate | Can Approve Period Close | Comment |
|---|---|---|---|---|---|
| IC Controller | Creates & reviews mirror docs | ||||
| Finance Controller | Posts & reconciles | ||||
| Treasury | Owns FX & payment execution | ||||
| CFO | Signs off rates & close | ||||
| Internal Audit | Monitors logs; independent sample |
F. Intercompany Close & Audit Checklist (Monthly)
| Step | Activity | Owner | Due (T+days) |
|---|---|---|---|
| 1 | Freeze FX rates for month | Treasury | T+1 |
| 2 | Run IC balance report & validate mirror pairs | IC Controller | T+2 |
| 3 | Post accruals (if needed) | Finance Controller | T+3 |
| 4 | Run reconciliation query; review exceptions | Finance Controller | T+3 |
| 5 | Correct exceptions & post eliminations | IC Controller | T+4 |
| 6 | Lock IC journals | CFO | T+5 |
| 7 | Export reconciliation & audit logs (PDF/CSV) | Audit Team | T+5 |
| 8 | Archive docs to /Finance/Intercompany/<Month> | Finance Ops | T+6 |
G. Exception Management Workflow (Odoo Helpdesk Integration)
Detection
Automated job or reconciliation script flags variance
Ticket Creation
System opens Helpdesk ticket (Team = Finance → Category = IC Exception)
Assignment
IC Controller reviews → tags company pair → assigns to Finance Controller
Correction
Journal adjustments via DCR workflow only
Closure
Controller validates; CFO approves closure; log retained
AI Helpdesk Learning
Root cause tagged; summary article generated for future prevention
H. Continuous Control Monitoring (CCM)
- Schedule daily IC variance job and weekly SoD violation report
- Use
alp_audit_controlsmodule to feed anomalies into Internal Audit Dashboard - Internal Audit reviews top 10 exceptions monthly, ensuring remediation logged within SLA (≤ 5 days)
- Automated alerts for control breaches sent to CFO + Internal Audit
- Monthly CCM scorecard presented to Audit Committee
I. Sample Intercompany Accounts (COA Segment Summary)
| Account Code | Description | Type | Company Usage |
|---|---|---|---|
1399-AMM |
IC Receivable – Amman | Asset | HQ |
2399-HQ |
IC Payable – Bethlehem HQ | Liability | AMM |
1399-EGY |
IC Receivable – Egypt | Asset | HQ |
2399-HQ-EGY |
IC Payable – HQ | Liability | EGY |
1399-JRS |
IC Receivable – Jerusalem | Asset | HQ |
2399-JRS-HQ |
IC Payable – HQ | Liability | JRS |
alp_ic_auto_sync module only.
J. Audit Evidence Package Contents
Storage Location: /Audit/IC/<YYYY-MM>/
Retention: 10 years
Package Contents:
- Signed IC Reconciliation Report (PDF)
- Exception Log (CSV export from Helpdesk)
- IC Mapping Configuration (YAML snapshot)
- System Audit Log extract (CSV)
- CFO & Controller sign-off email (PDF)
- SQL checksum file confirming 0 net balance per pair
K. Control Validation – Go/No-Go Criteria
Automated mirror posting tested between ≥ 2 branches
IC balance variance ≤ 0.01 after reconciliation
All IC accounts locked post-close
SoD violations = 0 (unapproved cross-role actions)
Audit evidence generated & archived successfully