Legacy to Inspire
Three of the five cores are migrations; one is a deliberate greenfield; one has not started. Which situation a core is in explains most of why its code looks the way it does.
flowchart LR
A["Compass 2000<br/>Centura, VB6, T-SQL, COBOL"] --> B["inspire-group<br/>group insurance"]
C["iCLIPS<br/>VB.NET, ASP.NET WebForms"] --> D["inspire-cl<br/>credit life"]
E["RPAS<br/>VB6, SQL Server"] --> F["inspire-pension<br/>pension"]
G["no legacy<br/>greenfield by decision"] --> H["inspire-gi<br/>general insurance"]
| Core | Legacy system | Client | Legacy stack | Legacy volume |
|---|---|---|---|---|
| Group | Compass 2000 (1996–2009, v5.37) | AIA | Centura/Gupta UI, VB6 (HSD, renewal), 3,046 T-SQL procs (1.15M lines), 1,287 triggers, 958K lines of Micro Focus COBOL batch, 5 report engines, SQL Server 2000-era, no foreign keys | 15,230 files archived, read-only forever |
| Credit Life | iCLIPS | — | VB.NET / ASP.NET WebForms + SQL Server | 1.7 GB of source, .bak dumps and Word specs, shared out-of-band |
| Pension | RPAS | Avrist | VB6 client, SQL Server (RDPTS_UAAT06), Java 7-era reporting |
An 862-table database dump plus configuration docs |
| GI | none | — | — | ADR 0003: no legacy migration — no in-force book to bring across |
The rules of the migration
Section titled “The rules of the migration”These are standing rules, not aspirations — they are why the new code contains things that look odd until you know the reason.
legacy/ is read-only forever. Nothing in a migration may modify the archive.
It is the evidence base; the Compass archive is also sensitive (plaintext
credentials and a committed AES key live in it — never copy any of it forward).
Translation-only porting. Ported business rules keep the legacy system’s exact
messages, status values, and money precision (DECIMAL(13,5) / DECIMAL(38,5)
were bug fixes — naive two-decimal mapping breaks premium reconciliation), and
even flagged legacy bugs are carried, marked, on purpose. Behaviour first,
tidiness later.
Single generic baseline. Compass was deployed per country with code forks; the migration collapses nine country variants into one configurable system. Variant rules are recorded but not ported.
Schema is regenerated, not redesigned (credit life). inspire-cl’s 113
sql/010-tables/ files are generated from the restored legacy databases by
sql/tools/generate-ddl.sh; entities mirror legacy result sets name-for-name.
Schema changes belong in sql/migrations/.
The platform absorbs the plumbing. Both migrated cores ride the same platform as everything else — code tables, autonumbering, approvals, queues, the response envelope — so the migration work concentrates on business behaviour.
Spec first, then code, in waves. The group migration runs as a loop
(“gauntlet”): every module gets a spec (docs/04-module-specs/, 24 modules, ~22
written) before code, each task gated on dotnet build and npm run build
passing. Progress is tracked task by task, not estimated.
How to check what is actually done
Section titled “How to check what is actually done”Each repo carries a live tracker — read it before believing anything else, including these pages:
| Repo | Tracker | What it records |
|---|---|---|
inspire-gi |
docs/13-build-tracker.md |
157 vertical slices with dependencies and verification; which blocks (product, UW, policy, billing, GL, claims, reinsurance, UI) are closed |
inspire-group |
docs/05-tasks-checklist.md |
The loop state — spec rows and code rows done against the plan, with the current task number |
inspire-cl |
the code itself | The README understates progress; count the controllers and web modules |
As this page was written: GI’s core modules are complete and the UI CRUD phase is open; group has finished its specification waves with implementation just beginning; credit life has its domain modules landing; pension has no modern code.
Reading the new code with legacy eyes
Section titled “Reading the new code with legacy eyes”- Statuses and codes you don’t recognise are probably legacy. Compass’s
"DR"→VAL→"AC"→TRM→"TM"→RACrecord lifecycle, message codes likeE0553fromTMSGTBL, and soft delete viaRCDSTSall survive as behaviour to preserve. - Two dialects of plumbing coexist in
inspire-cl— raw ADOSqlAccess/sp_getwrappers from the legacy side and EF-era services; also dual service namespaces (Inspire.Core.Servicesplural,Inspire.Core.Servicesingular). Match the dialect of the file you are editing. - GI kept its pre-rebrand names: database
nxgi, response-code prefixNXGI-####(ADR 0007 — renamed to Inspire, kept the codes). - Compass’s source-of-truth matrix (
inspire-group/docs/00-legacy-overview.md) maps questions to legacy assets: user manuals for screens, per-program PS specs for behaviour, 17 data dictionaries for tables, the message catalog for rules.
- The five cores — what each migration must deliver
- Glossary