The logical layer that lets a half-migrated roll-up still answer one question consistently — model once, federate the data, generate insights anyway.
Bajel can't wait for every project site and international desk to migrate to one ERP before it gets answers. The fix isn't one warehouse — it's a shared ontology (so everyone means the same thing) over a data mesh (each segment owns its data as a product), with a semantic layer that federates them. Insights generate today; they just carry a confidence flag where a segment isn't on the core ERP yet.
Ten classes everything maps to. The Site / Project is the keystone: it's where segment, leader, entity and geography reconcile.
66% of revenue is already site-grain actual; the rest is read in place from legacy site/international systems and reconciled — no big-bang migration required.
Every metric has one definition and a grain. The layer federates it across on-ERP and legacy domains, flagging where a value is allocated.
| Metric | Definition | Grain | How it federates across segments |
|---|---|---|---|
| Revenue | Σ recognized revenue | site · project | actuals where on ERP; allocated from area where not |
| EBITDA | revenue − project cost − overheads | segment · entity | entity P&L normalized to one chart of accounts |
| Order Book | confirmed unexecuted order value | project · segment | from ERP / tendering & Primavera across all segments |
| Transmission mix | transmission ÷ order book | segment | federated — same formula, many sources |
| Debtor Days | AR ÷ revenue × 365 | entity · site | legacy/international entities measured at area grain, flagged |
| Contribution margin | (revenue − direct project cost) ÷ revenue | project · segment | mapped via canonical cost categories |
| Repeat-order rate | expansion − attrition on base | client / utility | resolved across duplicate client records |
Entity resolution matches legacy site / segment / group-company codes to one canonical node — so the Ranjangaon plant data lines up with every project site.
Query reads each segment's data product in place; the semantic layer maps native ERP / MES / Primavera fields to canonical metrics.
Where a segment reports at area level, allocation disaggregates to site on learned drivers and marks it an estimate with a confidence band.
Allocated parts must tie back to the source total; anomalies and duplicate client / utility records & suppliers across segments are surfaced.
This is not theoretical — it's how this cockpit already works. The Story, Briefing and 360 views read the same governed metrics over on-ERP and legacy segments alike; 66% of the numbers are site-grain actuals and the balance is ERP-allocated and labelled. As each segment migrates to the core ERP, its data product's grain rises and estimates flip to actuals — the mesh closes itself.