{
  "modelData": {
    "1": {
      "name": "GL \u2192 Credit Exposure",
      "contractId": "CTR-FIN-001",
      "status": "\u2705 Healthy",
      "quality": "99.1%",
      "desc": "Core GL entries enriched with counterparty credit exposure data. Used by risk engines and compliance systems to track single-name concentration and aggregate exposure.",
      "consumerCut": "All GL entries where exposure_type in (SPOT, FWD, CREDIT_DEFAULT_SWAP)",
      "grain": "GL Entry + Counterparty",
      "refresh": "Real-time (sub-60sec)",
      "sla": "99.5% availability",
      "rules": [
        { "name": "Completeness", "value": "100%" },
        { "name": "Accuracy", "value": "0.01-999M range" },
        { "name": "Timeliness", "value": "<24hr" },
        { "name": "Uniqueness", "value": "100%" }
      ],
      "schema": [
        { "field": "gl_entry_id", "type": "String", "required": "\u2713", "classification": "PK" },
        { "field": "posting_date", "type": "Date", "required": "\u2713", "classification": "Public" },
        { "field": "account_code", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "amount_usd", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "legal_entity", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "counterparty_id", "type": "String", "required": "\u2713", "classification": "Confidential" },
        { "field": "exposure_type", "type": "String", "required": "\u2713", "classification": "Public" }
      ],
      "access": "REST API",
      "auth": "OAuth 2.0 + mTLS",
      "consumers": "ATLAS Risk Engine, Credit Analytics",
      "accessPolicy": "ACP-CTR-FIN-001",
      "lineage": "GL System (direct)"
    },
    "2": {
      "name": "Balance Sheet \u2192 MAS",
      "contractId": "CTR-FIN-002",
      "status": "\u2705 Healthy",
      "quality": "98.7%",
      "desc": "Balance sheet positions mapped to regulatory reporting (MAS) requirements. Includes local and USD denominations for multi-currency support.",
      "consumerCut": "All balance sheet accounts with MAS classification",
      "grain": "Account + Period",
      "refresh": "Daily (9 AM UTC)",
      "sla": "99.5% availability",
      "rules": [
        { "name": "Completeness", "value": "99.5%" },
        { "name": "Accuracy", "value": "Range validated" },
        { "name": "Timeliness", "value": "<24hr" },
        { "name": "Consistency", "value": "99.8%" }
      ],
      "schema": [
        { "field": "posting_period", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "legal_entity", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "account_category", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "balance_usd", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "balance_local", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "currency", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "adjustment_flag", "type": "Boolean", "required": "\u2717", "classification": "Public" }
      ],
      "access": "REST API + CSV",
      "auth": "OAuth 2.0 + API Key",
      "consumers": "ZEUS Regulatory, Compliance Team",
      "accessPolicy": "ACP-CTR-FIN-002",
      "lineage": "GL System + Manual Adjustments"
    },
    "3": {
      "name": "P&L \u2192 Board Dashboard",
      "contractId": "CTR-FIN-003",
      "status": "\u2705 Healthy",
      "quality": "97.5%",
      "desc": "Profit & Loss data aggregated by business line for executive reporting. Includes budget and forecast variance analysis.",
      "consumerCut": "Monthly P&L by business line and cost centre",
      "grain": "Business Line + Month",
      "refresh": "Daily (10 AM UTC)",
      "sla": "99.0% availability",
      "rules": [
        { "name": "Completeness", "value": "99.0%" },
        { "name": "Accuracy", "value": "\u00b10.1% variance" },
        { "name": "Timeliness", "value": "<24hr" },
        { "name": "Consistency", "value": "Budget reconcile" }
      ],
      "schema": [
        { "field": "reporting_month", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "business_line", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "revenue_usd", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "cost_usd", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "net_income_usd", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "budget_variance_pct", "type": "Decimal", "required": "\u2713", "classification": "Public" },
        { "field": "forecast_variance_pct", "type": "Decimal", "required": "\u2713", "classification": "Public" },
        { "field": "headcount", "type": "Integer", "required": "\u2717", "classification": "Public" }
      ],
      "access": "Dashboard View (Tableau/PowerBI)",
      "auth": "SSO (Azure AD)",
      "consumers": "Board Reports, CFO Dashboard",
      "accessPolicy": "ACP-CTR-FIN-003",
      "lineage": "GL + P&L System"
    },
    "4": {
      "name": "FTP \u2192 Liquidity",
      "contractId": "CTR-FIN-004",
      "status": "\u26a0\ufe0f Custom",
      "quality": "97.1%",
      "desc": "Funds Transfer Pricing rates applied to balance sheet assets and liabilities. Custom implementation for Treasury.",
      "consumerCut": "Subset: FTP-eligible products only",
      "grain": "Product + Maturity Bucket",
      "refresh": "Intra-day updates",
      "sla": "98.0% availability",
      "rules": [
        { "name": "Completeness", "value": "98.5%" },
        { "name": "Accuracy", "value": "0-5000 bps range" },
        { "name": "Timeliness", "value": "<4hr" },
        { "name": "Range validation", "value": "98%" }
      ],
      "schema": [
        { "field": "valuation_date", "type": "Date", "required": "\u2713", "classification": "Public" },
        { "field": "product_code", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "maturity_bucket", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "ftp_rate", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "allocated_amount_usd", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "cost_of_funds", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "spread_bps", "type": "Integer", "required": "\u2713", "classification": "Confidential" }
      ],
      "access": "Custom SFTP feed",
      "auth": "SFTP Key-based",
      "consumers": "Treasury System",
      "accessPolicy": "ACP-CTR-FIN-004",
      "lineage": "ALM System (custom extract)"
    },
    "5": {
      "name": "GL+P&L \u2192 Revenue",
      "contractId": "CTR-FIN-005",
      "status": "\u2705 Healthy",
      "quality": "95.8%",
      "desc": "Detailed revenue analysis combining GL entries with P&L decomposition. Includes rolling averages and trend analysis.",
      "consumerCut": "Revenue accounts only with YoY and trend metrics",
      "grain": "GL Entry + Business Line",
      "refresh": "Daily (8 AM UTC)",
      "sla": "98.5% availability",
      "rules": [
        { "name": "Completeness", "value": "97.2%" },
        { "name": "Accuracy", "value": "\u00b10.01% variance" },
        { "name": "Timeliness", "value": "<24hr" },
        { "name": "Seasonality check", "value": "97.8%" }
      ],
      "schema": [
        { "field": "gl_entry_id", "type": "String", "required": "\u2713", "classification": "PK" },
        { "field": "posting_date", "type": "Date", "required": "\u2713", "classification": "Public" },
        { "field": "account_code", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "amount_local", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "amount_usd", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "currency", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "business_line", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "cost_centre", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "rolling_30d_avg", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "rolling_90d_avg", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "yoy_change_pct", "type": "Decimal", "required": "\u2713", "classification": "Public" },
        { "field": "seasonality_flag", "type": "Boolean", "required": "\u2717", "classification": "Public" },
        { "field": "anomaly_score", "type": "Decimal", "required": "\u2717", "classification": "Public" }
      ],
      "access": "REST API + Parquet export",
      "auth": "OAuth 2.0",
      "consumers": "Data Science, Feature Store",
      "accessPolicy": "ACP-CTR-FIN-005",
      "lineage": "GL System + P&L System"
    },
    "6": {
      "name": "GL \u2192 Nostro Recon",
      "contractId": "CTR-FIN-006",
      "status": "\ud83d\udd34 BREACHED",
      "quality": "88.4%",
      "desc": "GL entries reconciled with nostro account statements from correspondent banks.",
      "consumerCut": "All nostro transactions",
      "grain": "Transaction",
      "refresh": "Every 30 minutes",
      "sla": "98.5% availability",
      "rules": [
        { "name": "Completeness", "value": "88.4% \u26a0\ufe0f" },
        { "name": "Accuracy", "value": "Match rate 92%" },
        { "name": "Timeliness", "value": "81.2% \u274c" },
        { "name": "Uniqueness", "value": "99.9%" }
      ],
      "schema": [
        { "field": "gl_entry_id", "type": "String", "required": "\u2713", "classification": "PK" },
        { "field": "posting_timestamp", "type": "Timestamp", "required": "\u2713", "classification": "Public" },
        { "field": "nostro_account", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "correspondent_bank", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "amount_usd", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "currency", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "swift_ref", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "match_status", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "match_timestamp", "type": "Timestamp", "required": "\u2717", "classification": "Public" }
      ],
      "access": "File Export (CSV every 30m)",
      "auth": "SFTP Key-based",
      "consumers": "Ops Recon System",
      "accessPolicy": "ACP-CTR-FIN-006",
      "lineage": "GL System + Bank Statements",
      "breach": true,
      "breachTitle": "Timeliness SLA Breach",
      "breachText": "Completeness: 88.4% (Target: 98.5%). Timeliness breached 12x in 30 days. Root cause: Sub-ledger delays from Correspondent Bank X. Remediation: Migrating to real-time API. Target: Q3 2026."
    },
    "7": {
      "name": "Market Risk VaR",
      "contractId": "CTR-RSK-001",
      "status": "\u2705 Healthy",
      "quality": "96.8%",
      "desc": "Daily Value-at-Risk calculations across traded portfolios for market risk surveillance.",
      "consumerCut": "Trading books with active market positions",
      "grain": "Portfolio + Risk Factor + Date",
      "refresh": "Hourly",
      "sla": "99.0% availability",
      "rules": [
        { "name": "Completeness", "value": "99.2%" },
        { "name": "Accuracy", "value": "Backtest within threshold" },
        { "name": "Timeliness", "value": "<2hr" },
        { "name": "Consistency", "value": "99.1%" }
      ],
      "schema": [
        { "field": "valuation_date", "type": "Date", "required": "\u2713", "classification": "Public" },
        { "field": "portfolio_id", "type": "String", "required": "\u2713", "classification": "Confidential" },
        { "field": "var_99", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "stressed_var", "type": "Decimal", "required": "\u2713", "classification": "Confidential" }
      ],
      "access": "REST API",
      "auth": "OAuth 2.0 + mTLS",
      "consumers": "Risk Analytics Engine, Market Risk Desk",
      "accessPolicy": "ACP-CTR-RSK-001",
      "lineage": "Risk Calc Grid + Market Data"
    },
    "8": {
      "name": "Counterparty Exposure",
      "contractId": "CTR-RSK-002",
      "status": "\u2705 Healthy",
      "quality": "95.9%",
      "desc": "Potential future exposure and current exposure by counterparty and netting set.",
      "consumerCut": "Counterparties above internal materiality threshold",
      "grain": "Counterparty + Netting Set",
      "refresh": "Every 4 hours",
      "sla": "98.8% availability",
      "rules": [
        { "name": "Completeness", "value": "98.7%" },
        { "name": "Accuracy", "value": "Model benchmarked" },
        { "name": "Timeliness", "value": "<6hr" },
        { "name": "Consistency", "value": "98.9%" }
      ],
      "schema": [
        { "field": "counterparty_id", "type": "String", "required": "\u2713", "classification": "Confidential" },
        { "field": "exposure_current", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "exposure_pfe", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "collateral_held", "type": "Decimal", "required": "\u2713", "classification": "Confidential" }
      ],
      "access": "REST API + CSV",
      "auth": "OAuth 2.0",
      "consumers": "Credit Risk Platform, Limit Monitoring",
      "accessPolicy": "ACP-CTR-RSK-002",
      "lineage": "CSA Store + Trade Capture"
    },
    "9": {
      "name": "Liquidity Stress Metrics",
      "contractId": "CTR-RSK-003",
      "status": "\u26a0\ufe0f Custom",
      "quality": "93.4%",
      "desc": "Liquidity stress projections and survival horizon metrics under adverse scenarios.",
      "consumerCut": "Treasury and liquidity reporting perimeter",
      "grain": "Scenario + Day Bucket",
      "refresh": "Daily",
      "sla": "98.0% availability",
      "rules": [
        { "name": "Completeness", "value": "96.0%" },
        { "name": "Accuracy", "value": "Scenario calibrated" },
        { "name": "Timeliness", "value": "<24hr" },
        { "name": "Range validation", "value": "97.2%" }
      ],
      "schema": [
        { "field": "scenario_id", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "day_bucket", "type": "Integer", "required": "\u2713", "classification": "Public" },
        { "field": "projected_outflow", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "survival_days", "type": "Integer", "required": "\u2713", "classification": "Confidential" }
      ],
      "access": "SFTP + API",
      "auth": "SFTP Key-based",
      "consumers": "Treasury Risk Portal",
      "accessPolicy": "ACP-CTR-RSK-003",
      "lineage": "ALM + Stress Engine"
    },
    "10": {
      "name": "Credit Concentration Limits",
      "contractId": "CTR-RSK-004",
      "status": "\u2705 Healthy",
      "quality": "94.7%",
      "desc": "Concentration risk indicators and breach flags for sector and single-name concentrations.",
      "consumerCut": "Credit portfolio and sector monitoring teams",
      "grain": "Entity + Sector + Date",
      "refresh": "Daily",
      "sla": "98.5% availability",
      "rules": [
        { "name": "Completeness", "value": "97.1%" },
        { "name": "Accuracy", "value": "Rule parity 99%" },
        { "name": "Timeliness", "value": "<24hr" },
        { "name": "Consistency", "value": "98.4%" }
      ],
      "schema": [
        { "field": "entity_id", "type": "String", "required": "\u2713", "classification": "Confidential" },
        { "field": "sector_code", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "limit_usage_pct", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "breach_flag", "type": "Boolean", "required": "\u2713", "classification": "Public" }
      ],
      "access": "Dashboard View",
      "auth": "SSO (Azure AD)",
      "consumers": "Credit Committee Dashboard, Risk Governance",
      "accessPolicy": "ACP-CTR-RSK-004",
      "lineage": "Loan Book + Collateral Master"
    },
    "11": {
      "name": "Basel Capital Reporting",
      "contractId": "CTR-REG-001",
      "status": "\u2705 Healthy",
      "quality": "97.2%",
      "desc": "Regulatory capital metrics for Basel submissions with fully auditable derivations.",
      "consumerCut": "Regulatory reporting function and control teams",
      "grain": "Jurisdiction + Quarter",
      "refresh": "Daily",
      "sla": "99.2% availability",
      "rules": [
        { "name": "Completeness", "value": "99.4%" },
        { "name": "Accuracy", "value": "Regulatory reconciled" },
        { "name": "Timeliness", "value": "<24hr" },
        { "name": "Consistency", "value": "99.3%" }
      ],
      "schema": [
        { "field": "reporting_period", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "jurisdiction", "type": "String", "required": "\u2713", "classification": "Public" },
        { "field": "cet1_ratio", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "rwa_total", "type": "Decimal", "required": "\u2713", "classification": "Confidential" }
      ],
      "access": "REST API + Report Export",
      "auth": "OAuth 2.0 + API Key",
      "consumers": "Regulatory Filing Service, Compliance Team",
      "accessPolicy": "ACP-CTR-REG-001",
      "lineage": "Finance Ledger + Regulatory Calc Engine"
    },
    "12": {
      "name": "AML Alert Feed",
      "contractId": "CTR-REG-002",
      "status": "\u2705 Healthy",
      "quality": "94.8%",
      "desc": "Transaction monitoring alerts and investigation states for AML and financial crime workflows.",
      "consumerCut": "AML operations and suspicious activity review teams",
      "grain": "Alert ID",
      "refresh": "Near real-time",
      "sla": "98.9% availability",
      "rules": [
        { "name": "Completeness", "value": "97.9%" },
        { "name": "Accuracy", "value": "Case sampling 98%" },
        { "name": "Timeliness", "value": "<30m" },
        { "name": "Consistency", "value": "98.6%" }
      ],
      "schema": [
        { "field": "alert_id", "type": "String", "required": "\u2713", "classification": "PK" },
        { "field": "transaction_id", "type": "String", "required": "\u2713", "classification": "Confidential" },
        { "field": "risk_score", "type": "Decimal", "required": "\u2713", "classification": "Confidential" },
        { "field": "case_status", "type": "String", "required": "\u2713", "classification": "Public" }
      ],
      "access": "Kafka + API",
      "auth": "OAuth 2.0",
      "consumers": "AML Case Manager, Financial Crime Ops",
      "accessPolicy": "ACP-CTR-REG-002",
      "lineage": "Payments Stream + AML Rules Engine"
    }
  },
  "contractRegistry": {
    "CTR-FIN-001": {
      "product": "Finance",
      "version": "v2.3.0",
      "statusText": "Active",
      "statusBadge": "healthy",
      "lifecycle": "Certified",
      "owner": "Finance Data Platform",
      "changeType": "Non-breaking",
      "expires": "2027-06-30",
      "accessPolicy": "ACP-CTR-FIN-001"
    },
    "CTR-FIN-002": {
      "product": "Finance",
      "version": "v1.9.1",
      "statusText": "Active",
      "statusBadge": "healthy",
      "lifecycle": "Certified",
      "owner": "Regulatory Data Office",
      "changeType": "Non-breaking",
      "expires": "2027-06-30",
      "accessPolicy": "ACP-CTR-FIN-002"
    },
    "CTR-FIN-003": {
      "product": "Finance",
      "version": "v1.6.4",
      "statusText": "Active",
      "statusBadge": "healthy",
      "lifecycle": "Certified",
      "owner": "Executive Reporting",
      "changeType": "Non-breaking",
      "expires": "2027-06-30",
      "accessPolicy": "ACP-CTR-FIN-003"
    },
    "CTR-FIN-004": {
      "product": "Finance",
      "version": "v1.2.0",
      "statusText": "Custom",
      "statusBadge": "custom",
      "lifecycle": "Custom",
      "owner": "Treasury Technology",
      "changeType": "Breaking",
      "expires": "2025-12-31",
      "accessPolicy": "ACP-CTR-FIN-004"
    },
    "CTR-FIN-005": {
      "product": "Finance",
      "version": "v2.1.0",
      "statusText": "Active",
      "statusBadge": "healthy",
      "lifecycle": "Certified",
      "owner": "Finance Analytics",
      "changeType": "Non-breaking",
      "expires": "2027-06-30",
      "accessPolicy": "ACP-CTR-FIN-005"
    },
    "CTR-FIN-006": {
      "product": "Finance",
      "version": "v2.0.5",
      "statusText": "Breached",
      "statusBadge": "breached",
      "lifecycle": "At Risk",
      "owner": "Ops Reconciliation",
      "changeType": "Breaking",
      "expires": "2027-06-30",
      "accessPolicy": "ACP-CTR-FIN-006"
    },
    "CTR-RSK-001": {
      "product": "Risk",
      "version": "v1.7.0",
      "statusText": "Active",
      "statusBadge": "healthy",
      "lifecycle": "Certified",
      "owner": "Market Risk Technology",
      "changeType": "Non-breaking",
      "expires": "2027-09-30",
      "accessPolicy": "ACP-CTR-RSK-001"
    },
    "CTR-RSK-002": {
      "product": "Risk",
      "version": "v1.5.2",
      "statusText": "Active",
      "statusBadge": "healthy",
      "lifecycle": "Certified",
      "owner": "Counterparty Risk Office",
      "changeType": "Non-breaking",
      "expires": "2027-09-30",
      "accessPolicy": "ACP-CTR-RSK-002"
    },
    "CTR-RSK-003": {
      "product": "Risk",
      "version": "v1.3.1",
      "statusText": "Custom",
      "statusBadge": "custom",
      "lifecycle": "Custom",
      "owner": "Treasury Risk Engineering",
      "changeType": "Breaking",
      "expires": "2026-12-31",
      "accessPolicy": "ACP-CTR-RSK-003"
    },
    "CTR-RSK-004": {
      "product": "Risk",
      "version": "v1.4.0",
      "statusText": "Active",
      "statusBadge": "healthy",
      "lifecycle": "Certified",
      "owner": "Credit Risk Platform",
      "changeType": "Non-breaking",
      "expires": "2027-09-30",
      "accessPolicy": "ACP-CTR-RSK-004"
    },
    "CTR-REG-001": {
      "product": "Regulatory",
      "version": "v2.0.0",
      "statusText": "Active",
      "statusBadge": "healthy",
      "lifecycle": "Certified",
      "owner": "Regulatory Reporting Tech",
      "changeType": "Non-breaking",
      "expires": "2027-12-31",
      "accessPolicy": "ACP-CTR-REG-001"
    },
    "CTR-REG-002": {
      "product": "Regulatory",
      "version": "v1.8.3",
      "statusText": "Active",
      "statusBadge": "healthy",
      "lifecycle": "Certified",
      "owner": "Financial Crime Technology",
      "changeType": "Non-breaking",
      "expires": "2027-12-31",
      "accessPolicy": "ACP-CTR-REG-002"
    }
  },
  "productCatalog": {
    "Finance": {
      "description": "Core financial data and analytics products",
      "avgQuality": "98.1%",
      "slaCompliance": "99.3%"
    },
    "Risk": {
      "description": "Risk assessment and exposure products",
      "avgQuality": "95.3%",
      "slaCompliance": "98.7%"
    },
    "Regulatory": {
      "description": "Regulatory reporting and compliance products",
      "avgQuality": "94.2%",
      "slaCompliance": "99.0%"
    }
  },
  "productModels": {
    "Finance": ["1", "2", "3", "4", "5", "6"],
    "Risk": ["7", "8", "9", "10"],
    "Regulatory": ["11", "12"]
  },
  "freezePolicy": {
    "title": "Interface Freeze Policy",
    "text": "Effective immediately: <strong>no new custom feeds</strong>. All new integrations must use declared product contracts through standard delivery adapters (SQL/API/Event/File). Breaking changes require version-gate approval and sunset timeline."
  },
  "interfaceIntegrations": [
    { "name": "REST API", "type": "api", "models": 4, "consumers": 28, "status": "Active", "statusBadge": "healthy", "violatesFreeze": false },
    { "name": "gRPC Streaming", "type": "api", "models": 2, "consumers": 8, "status": "Active", "statusBadge": "healthy", "violatesFreeze": false },
    { "name": "Nightly CSV Export", "type": "batch", "models": 3, "consumers": 12, "status": "Active", "statusBadge": "healthy", "violatesFreeze": false },
    { "name": "SFTP Feed", "type": "batch", "models": 1, "consumers": 1, "status": "Active", "statusBadge": "healthy", "violatesFreeze": false },
    { "name": "Kafka Topic", "type": "stream", "models": 2, "consumers": 6, "status": "Active", "statusBadge": "healthy", "violatesFreeze": false },
    { "name": "FTP (Legacy)", "type": "deprecated", "models": 1, "consumers": 2, "status": "Deprecated", "statusBadge": "custom", "violatesFreeze": true }
  ],
  "migrationBoard": [
    { "legacyPattern": "FTP (Legacy)", "targetPattern": "CTR-FIN-006 v2.x API envelope", "sunsetDate": "2026-09-30", "wave": "Wave 1", "owner": "Ops Reconciliation", "status": "In Migration", "statusBadge": "custom" },
    { "legacyPattern": "Manual Excel Extract", "targetPattern": "CTR-REG-001 regulated report API", "sunsetDate": "2026-10-31", "wave": "Wave 1", "owner": "Regulatory Reporting Tech", "status": "Planned", "statusBadge": "custom" },
    { "legacyPattern": "Ad-hoc SQL Pulls", "targetPattern": "CTR-RSK-001 and CTR-RSK-002 contract views", "sunsetDate": "2026-12-15", "wave": "Wave 2", "owner": "Risk Data Platform", "status": "Planned", "statusBadge": "custom" },
    { "legacyPattern": "Unmanaged CSV Export", "targetPattern": "CTR-FIN-005 governed batch adapter", "sunsetDate": "2027-01-31", "wave": "Wave 2", "owner": "Finance Analytics", "status": "Approved", "statusBadge": "healthy" }
  ],
  "onboardingPolicy": {
    "requireExceptionForCustomFeed": true,
    "forbiddenTerms": ["custom feed", "bespoke feed", "manual extract"],
    "exceptionIdRegex": "^EXC-[0-9]{4}-[0-9]{3}$",
    "requireSunsetDate": true
  }
}
