EA Data Model

The EA catalog exists in two forms: CSV (working/validation surface) and Cloudflare D1 (published consumption layer). CSVs are the editing surface — D1 is written only after the validation gate passes. The schemas are shared.

Objects CSV — {slug}-objects.csv

One row per architecture object. Schema version: v3.2 (current).

Column Req Values / Format Description
ID {PREFIX}-NNN Unique ID — prefix must match Type (e.g. APP-001, CAP-003)
Type See 18 prefixes SAP LeanIX fact sheet type
Name Universal product name Vendor/technical name as found in source (e.g. "Azure API Management")
Display_Name Organizational alias What people in the org actually call it (e.g. "Maestro"). Never contains Name in parentheses.
Group Architectural concept Strategic category for board-level diagrams. Independent of vendor and org alias.
Subgroup Sub-category Optional further classification within a Group. No Group duplication.
Description Free text What this component does
Level L0, L1, L2, L3 Hierarchy depth (L0 = top-level)
Parent_ID ID of parent object Hierarchy containment — enables visual nesting in diagrams
TOGAF_Layer Business, Application, Data, Technology Architecture layer — drives diagram layer placement
Lifecycle plan, phaseIn, active, phaseOut, endOfLife Current lifecycle status (LeanIX camelCase)
Business_Criticality missionCritical, businessCritical, businessOperational, administrativeService Impact if unavailable
Functional_Fit perfect, appropriate, insufficient, unreasonable Functional suitability
Technical_Fit fullyAppropriate, adequate, unreasonable, inappropriate Technical suitability
Owner Person or role name Who owns this object
Department Department name Owning department
Tags Comma-separated Labels for filtering — include Macroscope A-code (e.g. A250, A370)
Cost_Size XS, S, M, L, XL Relative sizing
Cost_Amount Number Estimated cost
Notes Free text Additional context

Relations CSV — {slug}-relations.csv

One row per directed relationship between two objects.

Column Req Description
Source_ID ID of the source object (must exist in objects CSV)
Source_Display_Name Display name of the source object
Relationship_Type One of 12 standard types (contains, supports, requires, uses, realized-by, owned-by, provided-by, transfers, successor-of, data-flow, depends-on, triggers)
Target_ID ID of the target object (must exist in objects CSV)
Target_Display_Name Display name of the target object
Description What this relationship means in context
Visual_Verb Short label for diagram edges (e.g. "uses", "triggers", "data flow")

CO CSV — {slug}-co.csv

Changement Organisationnel — optional, produced only for roadmap-driven transformations. Mandatory for migration projects (one CO row per decommissioned, introduced, or migrated object).

Column Req Values / Description
CO_ID CO-NNN — unique change record ID
Object_ID ID of the object being changed
Initiative_ID ID of the Initiative driving this change (INI-NNN) — use program-level INI
Scenario Option_A, Option_B… — for orientation comparisons. Omit for single-project changes.
Impact_Type introduction, decommissioning, rollout, withdrawal, scopeChange, technicalChange, interfaceChange, discontinuation
Change_Type New, Modified, Retired, Migrated, Consolidated
Impact_Level High, Medium, Low
Impact_Description What changes and why
Current_State As-is state description
Target_State To-be state description
Phase Implementation phase (e.g. "Phase 0 — Foundation" or "INI-002")
Cost_Project Project cost estimate
OpEx_Delta Change in operational cost
CapEx_Delta Change in capital cost
Status Planned, In_Progress, Completed, Cancelled
Notes Additional context

D1 Database Structure

One D1 database per customer. Each database holds all that customer's DAE catalogs via a catalog discriminator column. The same SQLite schema runs locally and on Cloudflare (foundry split).

catalogs
Registry of DAE catalogs per customer
id, dae, slug, label, customer
objects
All EA objects across catalogs
id, catalog, type, name, display_name, group, togaf_layer, lifecycle, attrs (JSON)
relations
All relationships between objects
id, catalog, source_id, target_id, type, description, visual_verb
-- Key queries (Pages Function API)
GET /api/catalogs
→ all catalogs for the current customer
GET /api/objects?catalog=TES
→ all objects in catalog TES (Transgesco EA System)
GET /api/relations?catalog=TES
→ all relations in catalog TES
GET /api/orphans
→ objects with no relations and no Parent_ID (should return empty)
GET /api/stats
→ counts per type, lifecycle, TOGAF layer

Customer Config — customers.json

Located at experiments/dae-catalog-d1/customers.json. Adding a customer or DAE is a config edit — no code change needed.

{
  "transgesco": {
    "db": "transgesco",
    "daes": [
      { "dae": "DAE-0007", "catalog": "TES", "label": "Évaluation des systèmes" },
      { "dae": "DAE-0007", "catalog": "BCM", "label": "Business Change Map" }
    ]
  },
  "stm": {
    "db": "stm",
    "daes": [
      { "dae": "DAE-0001", "catalog": "VTB", "label": "Vigie technique BizTalk" },
      { "dae": "DAE-0002", "catalog": "PIS", "label": "Passeport intégration STM" }
    ]
  }
}

Schema Version History

v3.2 Current Mandatory INI sweep for all AS-IS extractions + Macroscope deliverable routing (A-codes in Tags)
v3.1 Migration Project Mode + orchestration granularity rules (PRO/PRS split) + PRS as 18th type
v3.0 Full LeanIX v4 coverage: 17→18 prefixes, CO Impact_Type + Scenario, camelCase lifecycle values
v2.1 Display_Name (renamed), Group + Subgroup columns, Functional_Fit added
v2.0 English columns, Level, Parent_ID, Lifecycle, Business_Criticality added
v1.0 Legacy French columns (Nom, Couche TOGAF…) — auto-migrated on extraction