Skip to content

Snowflake Analytics & Risk Platform

System ID SD06
Repo bank-risk-platform
Business domain BD03
Tech owner Data & Risk Engineering
Build status Not started

The bank's analytical brain. All risk models, regulatory calculations, and intelligence outputs run in Snowflake. Results written back to Postgres for operational use. No manual spreadsheet calculations.

Architecture

See ADR-002 for the Snowflake-as-analytical-store decision and the write-back pattern that governs how results flow to operational systems.

Critical constraints

  1. Snowflake is the analytical store only — no operational system may query Snowflake inline during a customer request.
  2. All risk model outputs must be written back to Postgres before operational systems consume them.
  3. MOD-036 prudential returns must be submitted by RBNZ/APRA deadlines without manual intervention.
  4. MOD-038 must block downstream model runs if data quality checks fail.

Deployment notes — as of 2026-05-14

Most Phase 3–4 modules (MOD-032, MOD-035, MOD-038, MOD-039, MOD-040, MOD-085, MOD-086, MOD-098) are deployed to dev as of commit 629c644.

Three modules remain undeployed. The shared AWS SCP blocker was resolved (bank-platform commit 911a11f7). Diagnostic update 2026-05-14: SHOW GRANTS (live dev account, ACCOUNTADMIN) confirmed BANK_NONPROD_RISK_ROLE was already granted to BANK_RISK_PLATFORM_DEPLOY since 2026-04-30. The earlier diagnosis attributing MOD-056/080 failures to a missing grant was incorrect. The real blocker on MOD-056/080 is that HAS_DCM=false was set as a workaround, preventing Phase-2 ownership transfer from ever running against real credentials:

  • MOD-041HAS_DCM=false / HAS_DBT_PROJECT=false workaround skips the Snowpark deploy step, so NORMALISE_MERCHANT UDF is never deployed. Resolution: flip HAS_DCM=true and HAS_DBT_PROJECT=true — the Snowpark path should deploy the UDF automatically once the flags are restored.

  • MOD-056HAS_DCM=false workaround prevented Phase-2 ownership transfer from running. After flipping HAS_DCM=true, the expected next blocker is schema ownership: the REGULATORY schema is owned by BANK_NONPROD_RISK_ROLE, not SF_ROLE; dbt creating views in that schema as SF_ROLE will fail with "Insufficient privileges". Resolution options: (A) extend Phase-2 in risk-platform.gitlab-ci.yml to also transfer schema ownership, or (B) add explicit GRANT CREATE VIEW / DYNAMIC TABLE ON SCHEMA REGULATORY TO ROLE SF_ROLE.

  • MOD-080 — Same Phase-2 / schema-ownership issue as MOD-056 (schema STATUTORY), plus an independent code bug: reconciliation_status_current Dynamic Table has target_lag='5 minutes' while its upstream dependency trial_balance_period has target_lag='15 minutes' — Snowflake requires downstream DTs to have lag ≥ their dependencies. Fix: bump reconciliation_status_current.sql target_lag to '15 minutes' (independent of the Phase-2 / schema-ownership fix).

Modules

Module Name Status Policies
MOD-032 LCR / NSFR calculator Deployed CLQ-002 · REP-002 · GOV-002
MOD-033 RWA & capital ratio engine Deployed CLQ-001 · REP-002 · CLQ-006 · GOV-002
MOD-034 Stress testing scenario engine Not started CLQ-003 · CLQ-005 · GOV-002
MOD-035 IRRBB / EVE / NII model Deployed CLQ-004 · REP-002 · GOV-002
MOD-036 Prudential return builder (RBNZ / APRA) Deployed REP-001 · REP-002 · REP-005
MOD-037 AUSTRAC / RBNZ AML reporting pipeline Not started REP-003 · AML-001 · AML-006 · REP-005
MOD-038 Data quality & reconciliation monitor Deployed REP-005 · DT-004 · GOV-006
MOD-039 Customer risk score model Deployed AML-002 · AML-005 · DT-005
MOD-040 Churn & health score engine Deployed CON-001 · CON-003
MOD-041 Categorisation & merchant enrichment model Deployed CON-005 · DT-005
MOD-055 Onboarding fraud scoring engine Not started AML-013
MOD-056 Compliance visibility engine Deployed REP-006 · GOV-006
MOD-057 Statistical returns & survey engine Deployed REP-008 · REP-005
MOD-058 Regulatory incident & breach notification engine Not started REP-009
MOD-060 FATCA/CRS/AEOI reporting engine Deployed REP-011 · PRI-004 · REP-005
MOD-080 Statutory financial reporting & ERP integration Deployed REP-004 · REP-001 · GOV-006
MOD-085 Market rates ingestion & normalisation Deployed REP-005 · CLQ-002
MOD-086 Funds transfer pricing engine Deployed REP-001 · CLQ-003
MOD-088 Expense classification engine Not started PRI-001
MOD-089 Geo-spatial processor Not started PRI-001
MOD-092 Tax logic engine Not started PRI-001
MOD-094 Property attribution engine Not started PRI-001
MOD-095 Ring-fencing logic engine Not started PRI-001
MOD-098 Cost attribution engine Deployed REP-001
MOD-101 Wealth intelligence engine Not started
MOD-105 Product eligibility engine Not started CON-006 · CON-001 · CRE-001
MOD-106 ROTE engine Not started CON-006 · CRE-001
MOD-107 Next best product engine Not started CON-006 · CON-001
MOD-147 Related party exposure monitor Not started GOV-009 · GOV-009 · CRE-005
MOD-150 Risk management platform Not started OPS-003 · OPS-004 · OPS-005 · OPS-006 · OPS-007 · DT-003 · DT-005 · DT-008 · GOV-002 · REP-009 · PRI-002 · CLQ-002
MOD-152 Climate risk assessment Not started CLQ-007 · REP-012 · GOV-002
MOD-165 Synthetic swap book aggregator Not started CLQ-001 · REP-002 · REP-004
MOD-170 Regulatory Submissions Portal Deployed REP-005 · REP-001 · REP-002 · GOV-002
MOD-171 Risk Intelligence Dashboard Deployed GOV-002 · REP-002 · DT-005
MOD-172 Operations & Model Intelligence Dashboard Deployed DT-005 · OPS-003 · REP-002
MOD-173 Model risk register & inventory Not started DT-013 · DT-005
MOD-174 Model performance monitoring & drift detection Not started DT-013 · DT-005
MOD-175 Model change control & re-approval workflow Not started DT-013 · DT-005

Compiled 2026-05-22 from source/entities/system-domains/SD06.yaml