A credibility asset, not an apology
Architecture — the mock as honest analogue
Every layer below is a real instance of the production technology, or a stated stand-in — never implying more than what runs.
Layer-by-layer substitution
| Proposal layer | Production | Mock analogue | Analogy holds? |
|---|---|---|---|
| Ingestion | Azure Data Factory | dlt + GitHub Actions cron | Yes — real scheduled extraction, real schema contracts |
| Landing | Blob / OneLake | Repo-committed parquet | Partially — no lake semantics |
| Warehouse | Snowflake EDW | DuckDB, server-side | Yes — columnar, SQL, KPIs computed in-warehouse. Deliberately server-side, not DuckDB-WASM in the browser, so RLS/suppression/audit can't be bypassed client-side |
| Transform | Snowflake SQL / dbt | dbt-core + dbt-duckdb | Yes — same tool, same tests |
| Semantic model | Fabric governed model | metrics.yaml, Zod-validated | Yes — this is the proposal's own YAML, running |
| BI | Power BI Direct Lake | shadcn chart (Recharts) | Shape only — not a BI tool |
| AI | Fabric Data Agent | OpenAI-compatible API + strict tool use → SQL compiler | Yes, and arguably stricter |
| Governance | Purview + RLS | Predicate injection + audit table | Yes — enforced at data layer |
| Map | Power BI maps | MapLibre + OpenFreeMap (keyless) | Yes — real DHIS2 facility coordinates, CMIS clinics approximated to country capital |
Where the analogy stops
Every item below is a constraint of this demo specifically— building a proof-of-concept without IPPF's real system access, data, or licenses. None of them are limitations of the production system the proposal describes; the real Azure/ Snowflake/Power BI/Copilot build would not inherit any of these.
See also the guided tour for the five scenes this architecture is built to carry, and PLAN.md for the full build plan.