Medallion Architecture — Data Flow
Source Systems
Core Banking
CRM · Cards
Treasury · GL
→
Bronze Layer
Raw Ingestion
Auto Loader
14 Tables
→
Silver Layer
Cleansed & Enriched
PII Masked
11 Tables
→
Gold Layer
Star Schema
22 Dims · 16 Facts
15 Views
→
ML Layer
MLflow Registry
PD · LGD · Fraud
AML Scoring
→
Consumption
Power BI
Azure SQL
SARB Reports
Entity Relationship Diagrams — by Domain
Core customer identity, account ownership, and daily transaction events. DIM_CUSTOMER is SCD Type 2 tracking historical segments and risk scores.
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#EBF4FF', 'primaryTextColor': '#1A2D4A', 'primaryBorderColor': '#1A5FA8', 'lineColor': '#0097A7', 'secondaryColor': '#FFF8E1', 'tertiaryColor': '#F0F5FB', 'background': '#F7FAFD', 'mainBkg': '#EBF4FF', 'nodeBorder': '#1A5FA8', 'clusterBkg': '#F0F5FB', 'titleColor': '#1A2D4A', 'edgeLabelBackground': '#FFFFFF', 'attributeBackgroundColorEven': '#F0F7FF', 'attributeBackgroundColorOdd': '#FFFFFF'}}}%%
erDiagram
DIM_CUSTOMER ||--o{ DIM_KYC_STATUS : "subject_to"
DIM_CUSTOMER ||--o{ DIM_ACCOUNT : "owns"
DIM_CUSTOMER ||--o{ FACT_TRANSACTION : "initiates"
DIM_CUSTOMER ||--o{ FACT_DAILY_BALANCE : "tracks"
DIM_ACCOUNT ||--o{ FACT_TRANSACTION : "records"
DIM_ACCOUNT ||--o{ FACT_DAILY_BALANCE : "snapshots"
DIM_GEOGRAPHY ||--o{ DIM_CUSTOMER : "resides_in"
DIM_DATE ||--o{ FACT_TRANSACTION : "when"
DIM_DATE ||--o{ FACT_DAILY_BALANCE : "date"
DIM_CUSTOMER {
bigint customer_sk PK
string customer_id UK
string full_name
string id_number
int age
string customer_segment
int credit_score
string risk_segment
string province
string kyc_status
date onboarding_date
boolean is_current "SCD2"
}
DIM_ACCOUNT {
bigint account_sk PK
string account_id UK
bigint customer_sk FK
string account_type
string product_code FK
string branch_code FK
string status
decimal credit_limit
date open_date
boolean is_current "SCD2"
}
DIM_KYC_STATUS {
int kyc_sk PK
bigint customer_sk FK
string fica_status
string pep_flag
string sanction_flag
date last_review_date
string reviewer_id
}
DIM_GEOGRAPHY {
int geography_sk PK
string province
string city
string suburb
string postal_code
string region
}
DIM_DATE {
int date_sk PK
date date_key
int month
int quarter
int year
int financial_year
boolean is_month_end
boolean is_public_holiday
}
FACT_TRANSACTION {
bigint tx_sk PK
string transaction_id UK
bigint account_sk FK
bigint customer_sk FK
int date_sk FK
decimal amount_zar
string tx_type
string channel_code
boolean is_reversal
boolean is_flagged
}
FACT_DAILY_BALANCE {
bigint bal_sk PK
bigint account_sk FK
bigint customer_sk FK
int date_sk FK
decimal closing_balance
decimal available_balance
decimal interest_accrued
string balance_band
}
Loan portfolio with IFRS 9 ECL staging, ML-driven PD/LGD scores, fraud detection events, and AML case management.
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#FFF0F0', 'primaryTextColor': '#1A2D4A', 'primaryBorderColor': '#D32F2F', 'lineColor': '#E67E00', 'secondaryColor': '#FFF8E1', 'tertiaryColor': '#F5F0FF', 'background': '#F7FAFD', 'mainBkg': '#FFF0F0', 'nodeBorder': '#D32F2F', 'clusterBkg': '#F7FAFD', 'titleColor': '#1A2D4A', 'edgeLabelBackground': '#FFFFFF', 'attributeBackgroundColorEven': '#FFF5F5', 'attributeBackgroundColorOdd': '#FFFFFF'}}}%%
erDiagram
DIM_CUSTOMER ||--o{ FACT_LOAN_PORTFOLIO : "holds"
DIM_RISK_CATEGORY ||--o{ FACT_LOAN_PORTFOLIO : "rated_as"
DIM_COLLATERAL ||--o{ FACT_LOAN_PORTFOLIO : "secures"
DIM_CREDIT_BUREAU ||--o{ FACT_LOAN_PORTFOLIO : "reports_to"
DIM_EMPLOYEE ||--o{ FACT_LOAN_PORTFOLIO : "originates"
DIM_CUSTOMER ||--o{ FACT_FRAUD_EVENT : "victim_of"
DIM_CUSTOMER ||--o{ FACT_AML_CASE : "investigated_in"
DIM_COMPLIANCE_RULE ||--o{ FACT_AML_CASE : "governs"
DIM_DATE ||--o{ FACT_LOAN_PORTFOLIO : "snapshot_date"
FACT_LOAN_PORTFOLIO {
bigint lp_sk PK
string loan_id UK
bigint customer_sk FK
int risk_sk FK
int collateral_sk FK
int date_sk FK
string loan_type
decimal outstanding_balance_zar
decimal pd_score "ML"
decimal lgd_score "ML"
decimal ecl_amount_zar "ECL"
int ifrs9_stage "Stage"
int days_past_due
boolean is_npl
}
DIM_RISK_CATEGORY {
int risk_sk PK
string risk_code
string risk_label
string risk_tier
decimal pd_floor
decimal pd_ceiling
decimal lgd_estimate
decimal provision_rate
}
DIM_COLLATERAL {
int collateral_sk PK
string collateral_type
decimal market_value
decimal forced_sale_value
string valuation_method
date last_valuation_date
}
DIM_CREDIT_BUREAU {
int bureau_sk PK
bigint customer_sk FK
string bureau_name
int credit_score
string credit_hist
int enquiry_count_12m
date report_date
}
DIM_EMPLOYEE {
int employee_sk PK
string employee_id UK
string employee_name
string role
string department
string branch_code FK
boolean is_current
}
FACT_FRAUD_EVENT {
bigint fe_sk PK
bigint customer_sk FK
int date_sk FK
decimal fraud_score "ML"
boolean fraud_alert
decimal amount_at_risk_zar
string fraud_type
string alert_status
boolean is_confirmed_fraud
}
FACT_AML_CASE {
bigint aml_sk PK
bigint customer_sk FK
int rule_sk FK
int date_sk FK
string case_type
decimal risk_score
boolean sar_candidate
int days_open
string case_notes
}
DIM_COMPLIANCE_RULE {
int rule_sk PK
string rule_code
string rule_name
string regulation
string threshold_type
decimal threshold_value
}
Three-tier product hierarchy (Category → Subcategory → Product) with channel, device, and date dimensions. Tracks cross-sell penetration per customer.
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#FFFBF0', 'primaryTextColor': '#1A2D4A', 'primaryBorderColor': '#C9A84C', 'lineColor': '#8A6A10', 'secondaryColor': '#F0F5FB', 'tertiaryColor': '#F7FAFD', 'background': '#F7FAFD', 'mainBkg': '#FFFBF0', 'nodeBorder': '#C9A84C', 'clusterBkg': '#F7FAFD', 'titleColor': '#1A2D4A', 'edgeLabelBackground': '#FFFFFF', 'attributeBackgroundColorEven': '#FFFDF0', 'attributeBackgroundColorOdd': '#FFFFFF'}}}%%
erDiagram
DIM_PRODUCT_CATEGORY ||--o{ DIM_PRODUCT_SUBCATEGORY : "contains"
DIM_PRODUCT_SUBCATEGORY ||--o{ DIM_PRODUCT : "classifies"
DIM_PRODUCT ||--o{ FACT_CUSTOMER_PRODUCTS : "purchased_as"
DIM_PRODUCT ||--o{ FACT_PRODUCT_METRICS : "measured_by"
DIM_CUSTOMER ||--o{ FACT_CUSTOMER_PRODUCTS : "holds"
DIM_CHANNEL ||--o{ FACT_TRANSACTION : "via"
DIM_DEVICE ||--o{ FACT_TRANSACTION : "on"
DIM_DATE ||--o{ FACT_PRODUCT_METRICS : "metric_date"
DIM_PRODUCT_CATEGORY {
int category_id PK
string category_name
string category_code
boolean is_revenue_driver
}
DIM_PRODUCT_SUBCATEGORY {
int subcategory_id PK
int category_id FK
string subcategory_name
string subcategory_code
}
DIM_PRODUCT {
int product_sk PK
string product_code UK
string product_name
int subcategory_id FK
string product_family
decimal base_interest_rate
string rate_type
decimal annual_fee
string risk_rating
int profitability_rank
boolean is_active
}
DIM_CHANNEL {
int channel_sk PK
string channel_code
string channel_name
string channel_type
boolean is_digital
}
DIM_DEVICE {
int device_sk PK
string device_type
string os_type
string browser
boolean is_mobile
}
FACT_CUSTOMER_PRODUCTS {
bigint cp_sk PK
bigint customer_sk FK
int product_sk FK
int date_sk FK
date adoption_date
decimal monthly_nii
decimal total_fees_paid
int tenure_months
boolean is_primary_product
}
FACT_PRODUCT_METRICS {
bigint metric_sk PK
int product_sk FK
int date_sk FK
int new_customers
int active_customers
int churned_customers
decimal total_aum
decimal total_fees_collected
decimal npl_rate
}
FACT_TRANSACTION {
bigint tx_sk PK
string transaction_id UK
bigint account_sk FK
int channel_sk FK
int device_sk FK
decimal amount_zar
string tx_type
boolean is_flagged
}
Card acquiring, SA fintech partner settlement (Yoco / SnapScan / PayFast / Peach Payments / PayGate), SWIFT/EFT payment flows. Monthly grain: 60 settlement rows across 5 partners × 12 months.
erDiagram
DIM_MERCHANT ||--o{ FACT_CARD_TRANSACTION : "processes"
DIM_FINTECH ||--o{ FACT_FINTECH_SETTLEMENT : "settles_via"
DIM_COUNTERPARTY ||--o{ FACT_PAYMENT : "receives"
DIM_CURRENCY ||--o{ FACT_PAYMENT : "denominated_in"
DIM_DATE ||--o{ FACT_CARD_TRANSACTION : "tx_date"
DIM_DATE ||--o{ FACT_FINTECH_SETTLEMENT : "settle_month"
DIM_MERCHANT {
int merchant_sk PK
string merchant_id
string merchant_name
string mcc_code
string merchant_category
string city
string province
boolean is_online
}
DIM_FINTECH {
int fintech_sk PK
string fintech_id
string fintech_name
string platform_type
decimal fee_rate_pct
int settlement_days
boolean is_active
}
DIM_COUNTERPARTY {
int counterparty_sk PK
string swift_code
string bank_name
string country
string settle_method
}
DIM_CURRENCY {
int currency_sk PK
string currency_code
string currency_name
decimal zar_rate
date rate_date
}
FACT_CARD_TRANSACTION {
bigint card_tx_sk PK
bigint customer_sk FK
int merchant_sk FK
int date_sk FK
decimal amount_zar
string card_brand
decimal fraud_score
boolean is_contactless
}
FACT_FINTECH_SETTLEMENT {
bigint ft_sk PK
int fintech_sk FK
int date_sk FK
bigint total_transactions
decimal gross_volume_zar
decimal merchant_fees_zar
decimal net_settlement_zar
decimal avg_transaction_zar
int chargebacks_count
}
FACT_PAYMENT {
bigint pay_sk PK
bigint account_sk FK
int counterparty_sk FK
int currency_sk FK
decimal amount_zar
string payment_type
string swift_ref
string status
}
General ledger double-entry, branch infrastructure, treasury positions (DV01/VaR), and account-level profitability (NII / ROE).
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#F5F0FF', 'primaryTextColor': '#1A2D4A', 'primaryBorderColor': '#5C35A5', 'lineColor': '#4A2A8A', 'secondaryColor': '#F0F5FB', 'tertiaryColor': '#F7FAFD', 'background': '#F7FAFD', 'mainBkg': '#F5F0FF', 'nodeBorder': '#5C35A5', 'clusterBkg': '#F7FAFD', 'titleColor': '#1A2D4A', 'edgeLabelBackground': '#FFFFFF', 'attributeBackgroundColorEven': '#F5F0FF', 'attributeBackgroundColorOdd': '#FFFFFF'}}}%%
erDiagram
DIM_GL_ACCOUNT ||--o{ FACT_GL_JOURNAL : "posts_to"
DIM_COST_CENTRE ||--o{ FACT_GL_JOURNAL : "allocated_to"
DIM_DATE ||--o{ FACT_GL_JOURNAL : "posting_date"
DIM_BRANCH ||--o{ DIM_ATM : "operates"
DIM_BRANCH ||--o{ DIM_EMPLOYEE : "employs"
DIM_GEOGRAPHY ||--o{ DIM_BRANCH : "located_in"
DIM_PRODUCT ||--o{ FACT_TREASURY_POSITION : "instrument"
DIM_COUNTERPARTY ||--o{ FACT_TREASURY_POSITION : "counterparty"
DIM_ACCOUNT ||--o{ FACT_ACCOUNT_PROFITABILITY : "profitability"
DIM_GL_ACCOUNT {
int gl_sk PK
string gl_code
string gl_name
string account_type
string ifrs_class
string regulatory_class
int hierarchy_level
string parent_gl_code
}
DIM_COST_CENTRE {
int cc_sk PK
string cc_code
string cc_name
string legal_entity
string division
string business_unit
}
DIM_BRANCH {
int branch_sk PK
string branch_code UK
string branch_name
string province
string city
string branch_type
int atm_count
boolean is_active
}
DIM_ATM {
int atm_sk PK
string atm_id
int branch_sk FK
string location_type
decimal latitude
decimal longitude
boolean is_active
}
FACT_GL_JOURNAL {
bigint journal_sk PK
string journal_id UK
int gl_account_sk FK
int cost_centre_sk FK
int date_sk FK
decimal debit_amount
decimal credit_amount
string journal_type
string period
string legal_entity
}
FACT_TREASURY_POSITION {
bigint position_sk PK
int product_sk FK
int counterparty_sk FK
int currency_sk FK
int date_sk FK
string instrument_type
decimal market_value
decimal mtm_pnl
decimal duration
decimal yield
decimal dv01
}
FACT_ACCOUNT_PROFITABILITY {
bigint ap_sk PK
bigint account_sk FK
bigint customer_sk FK
int date_sk FK
decimal net_interest_income
decimal fee_income
decimal cost_of_funds
decimal provision_charge
decimal net_profit
decimal return_on_equity
}
DIM_PRODUCT {
int product_sk PK
string product_code
string product_name
}
DIM_COUNTERPARTY {
int counterparty_sk PK
string swift_code
string bank_name
}
Life, disability, short-term and credit-life insurance with claim workflow. Unit trust, bond, and FX investment positions with unrealised P&L.
%%{init: {'theme': 'base', 'themeVariables': {'primaryColor': '#F0FFF4', 'primaryTextColor': '#1A2D4A', 'primaryBorderColor': '#2E7D32', 'lineColor': '#1B5E20', 'secondaryColor': '#FFFBF0', 'tertiaryColor': '#F7FAFD', 'background': '#F7FAFD', 'mainBkg': '#F0FFF4', 'nodeBorder': '#2E7D32', 'clusterBkg': '#F7FAFD', 'titleColor': '#1A2D4A', 'edgeLabelBackground': '#FFFFFF', 'attributeBackgroundColorEven': '#F0FFF4', 'attributeBackgroundColorOdd': '#FFFFFF'}}}%%
erDiagram
DIM_CUSTOMER ||--o{ FACT_INSURANCE : "covered_by"
DIM_PRODUCT ||--o{ FACT_INSURANCE : "defines_policy"
FACT_INSURANCE ||--o{ FACT_CLAIM : "generates"
FACT_CLAIM ||--o{ FACT_CLAIM_PAYMENT : "settled_by"
DIM_CUSTOMER ||--o{ FACT_INVESTMENT : "invests"
DIM_PRODUCT ||--o{ FACT_INVESTMENT : "defines_instrument"
DIM_DATE ||--o{ FACT_INSURANCE : "issue_date"
DIM_DATE ||--o{ FACT_CLAIM : "claim_date"
DIM_DATE ||--o{ FACT_INVESTMENT : "position_date"
FACT_INSURANCE {
bigint ins_sk PK
string policy_id UK
bigint customer_sk FK
int product_sk FK
int date_sk FK
string policy_status
decimal coverage_amount
decimal annual_premium
decimal monthly_premium
int tenure_months
date issue_date
date expiry_date
}
FACT_CLAIM {
bigint claim_sk PK
bigint ins_sk FK
bigint customer_sk FK
int date_sk FK
string claim_type
decimal claim_amount
decimal approved_amount
boolean is_settled
date claim_date
int days_to_settle
}
FACT_CLAIM_PAYMENT {
bigint cp_sk PK
bigint claim_sk FK
int date_sk FK
decimal amount_paid
string payment_method
string payment_status
date payment_date
}
FACT_INVESTMENT {
bigint inv_sk PK
string investment_id UK
bigint customer_sk FK
int product_sk FK
int date_sk FK
decimal quantity_units
decimal nav_per_unit
decimal current_value
decimal cost_basis
decimal unrealised_pnl
decimal realised_pnl
string investment_status
}
DIM_CUSTOMER {
bigint customer_sk PK
string customer_id
string full_name
}
DIM_PRODUCT {
int product_sk PK
string product_code
string product_name
}
DIM_DATE {
int date_sk PK
date date_key
int year
int month
}
Dimension Tables 22 Total · SCD Type 2
Customer & Identity
- DIM_CUSTOMER (SCD2) — 500K records
- DIM_KYC_STATUS — FICA compliance tracking
- DIM_RISK_CATEGORY — PD/LGD bands
- DIM_CREDIT_BUREAU — TransUnion/Experian/Compuscan
Account & Product
- DIM_ACCOUNT (SCD2) — 1.2M accounts
- DIM_PRODUCT — 60+ SKUs, SCD1
- DIM_PRODUCT_SUBCATEGORY — 18 subcategories
- DIM_PRODUCT_CATEGORY — 6 categories
Branch & Infrastructure
- DIM_BRANCH — 200 SA branches + provinces
- DIM_EMPLOYEE (SCD2) — 12K staff
- DIM_ATM — 800 ATMs with geo-coords
- DIM_GEOGRAPHY — SA provinces, cities, suburbs
Time & Channel
- DIM_DATE — SA public holidays, fin. year
- DIM_CHANNEL — Branch/ATM/Online/Mobile/USSD
- DIM_DEVICE — iOS/Android/Desktop/POS
- DIM_CURRENCY — ZAR/USD/EUR/GBP/CNY/AED
Fintech & Merchant
- DIM_FINTECH — Yoco, PayFast, SnapScan, etc.
- DIM_MERCHANT — SME partners with MCC codes
- DIM_LOYALTY_PROGRAM — eBucks-style programmes
- DIM_COUNTERPARTY — Correspondent banks
Governance & Finance
- DIM_GL_ACCOUNT — 5-level COA hierarchy
- DIM_COST_CENTRE — Legal entity allocation
- DIM_COLLATERAL — Property/Vehicle/Cession
- DIM_COMPLIANCE_RULE — SARB/POPIA/FICA rules
Fact Tables 16 Total · Delta Lake Partitioned
Transaction & Payments
- FACT_TRANSACTION — 10M+ rows, partitioned by date
- FACT_PAYMENT — EFT/RTGS/SWIFT/Internal
- FACT_CARD_TRANSACTION — 2M card POS/online
- FACT_DAILY_BALANCE — daily account snapshot
Lending & Risk
- FACT_LOAN_PORTFOLIO — IFRS9 Stage 1/2/3, ECL
- FACT_FRAUD_EVENT — ML-scored fraud alerts
- FACT_AML_CASE — SAR pipeline, graph analytics
- FACT_TREASURY_POSITION — MTM, DV01, VaR
Customer & Product
- FACT_CUSTOMER_PRODUCTS — cross-sell, tenure, NII
- FACT_ACCOUNT_PROFITABILITY — ROE per account
- FACT_PRODUCT_METRICS — daily product KPIs
- FACT_GL_JOURNAL — P&L, Balance Sheet
Fintech, Insurance & Investment
- FACT_FINTECH_TRANSACTION — merchant settlement
- FACT_LOYALTY_POINTS — earn/redeem/expire
- FACT_MERCHANT_DAILY_SUMMARY — basket analytics
- FACT_INSURANCE + FACT_CLAIM + FACT_CLAIM_PAYMENT
- FACT_INVESTMENT — NAV, unrealised P&L
Product Taxonomy 60+ Products · 6 Categories
DEPOSITS ├── Transaction Accounts │ ├── PCB Cheque Account ├── PCB Gold Cheque ├── PCB Platinum Cheque │ └── PCB Business Cheque ├── Savings Accounts │ ├── PCB MySave Account ├── PCB Target Save ├── PCB Notice Deposit │ └── PCB Money Market └── Fixed Deposits ├── PCB Fixed Deposit (32/60/90/182/365 day) └── PCB Offshore Fixed Deposit LENDING ├── Home Loans │ ├── PCB Home Loan (variable) ├── PCB Home Loan (fixed) └── PCB Building Loan ├── Personal Finance │ ├── PCB Personal Loan ├── PCB Salary Advance └── PCB Revolving Credit ├── Vehicle Finance │ ├── PCB Vehicle Loan (new) ├── PCB Vehicle Loan (used) └── PCB Fleet Finance └── Business Lending ├── PCB Business Term Loan ├── PCB Invoice Finance └── PCB Commercial Mortgage CARDS ├── Credit Cards │ ├── PCB Classic Credit ├── PCB Gold Credit ├── PCB Platinum Credit │ └── PCB Business Credit └── Debit & Prepaid ├── PCB Debit Card ├── PCB Prepaid Visa └── PCB Virtual Card INVESTMENTS ├── Unit Trusts │ ├── PCB Equity Fund ├── PCB Balanced Fund └── PCB Money Market Fund ├── Bonds & Securities │ ├── SA Government Bonds ├── PCB Corporate Bonds └── Eurobonds └── FX/Treasury ├── Spot FX ├── Forward Contracts └── Currency Swaps INSURANCE ├── Life & Disability │ ├── PCB Life Cover ├── PCB Disability Cover └── PCB Critical Illness ├── Short-Term │ ├── PCB Home Insurance ├── PCB Vehicle Insurance └── PCB Business Insurance └── Credit Life ├── PCB Loan Protection └── PCB Credit Card Protection DIGITAL / FINTECH ├── Digital Banking │ ├── PCB Online Banking ├── PCB Mobile App └── PCB USSD (*120*PCB#) ├── Payment Solutions │ ├── PCB Instant Pay (RTC) ├── PCB QR Pay └── PCB PayToYou └── API Banking ├── PCB Open Banking API └── PCB Embedded Finance SDK
Full Table Catalogue
| Table Name | Layer | Domain | Est. Rows | Partition | Refresh |
|---|---|---|---|---|---|
| bronze_customers | Bronze | Customer | 500K | onboarding_date | Daily |
| bronze_accounts | Bronze | Accounts | 1.2M | open_date | Daily |
| bronze_transactions | Bronze | Transactions | 10M+ | transaction_date | Hourly |
| bronze_loans | Bronze | Lending | 300K | origination_date | Daily |
| bronze_payments | Bronze | Payments | 500K | payment_date | Daily |
| bronze_credit_cards | Bronze | Cards | 144K | issued_date | Daily |
| bronze_card_transactions | Bronze | Cards | 2M | tx_date | Hourly |
| bronze_fraud_alerts | Bronze | Risk | 50K | alert_date | Real-time |
| bronze_treasury_trades | Bronze | Treasury | 250K | trade_date | Daily |
| bronze_gl_entries | Bronze | Finance | 5M | posting_date | Daily |
| bronze_aml_alerts | Bronze | Compliance | 30K | alert_date | Daily |
| bronze_branches | Bronze | Infrastructure | 200 | — | Monthly |
| bronze_employees | Bronze | HR | 12K | — | Daily |
| bronze_insurance_policies | Bronze | Insurance | 180K | issue_date | Daily |
| silver_customers | Silver | Customer | 500K | province | Daily |
| silver_accounts | Silver | Accounts | 1.2M | account_type | Daily |
| silver_transactions | Silver | Transactions | 10M+ | transaction_date | Hourly |
| silver_loans | Silver | Lending | 300K | loan_type | Daily |
| silver_payments | Silver | Payments | 500K | payment_date | Daily |
| silver_card_transactions | Silver | Cards | 2M | tx_date | Hourly |
| silver_fraud_alerts | Silver | Risk | 50K | alert_date | Daily |
| silver_aml_cases | Silver | Compliance | 30K | case_status | Daily |
| dim_customer | Gold | Customer | 500K | province | Daily SCD2 |
| dim_account | Gold | Accounts | 1.2M | account_type | Daily SCD2 |
| dim_product | Gold | Products | 60+ | — | Weekly SCD1 |
| dim_date | Gold | Time | 7.3K | — | Static |
| dim_branch | Gold | Infrastructure | 200 | province | Monthly |
| dim_merchant | Gold | Fintech | 50K | — | Daily |
| fact_transaction | Gold | Transactions | 10M+ | tx_date, tx_type | Hourly |
| fact_loan_portfolio | Gold | Lending | 300K/day | snapshot_date | Daily |
| fact_fraud_event | Gold | Risk | 50K | alert_date | Real-time |
| fact_aml_case | Gold | Compliance | 30K | case_date | Daily |
| fact_treasury_position | Gold | Treasury | 250K | position_date | Daily |
| fact_gl_journal | Gold | Finance | 5M | period, entity | Daily |
| fact_insurance | Gold | Insurance | 180K | issue_date | Daily |
| fact_loyalty_points | Gold | Fintech | 2M | tx_date | Daily |
Legend
Bronze — Raw ingestion, schema-on-read, Auto Loader
Silver — Cleansed, deduplicated, PII-masked, enriched
Gold — Star schema, SCD2, analytics-ready
Dimension — Descriptive context, surrogate keys
Fact — Measurable events, partitioned, Z-ordered
Fintech — Third-party integration layer
Regulatory — Compliance & governance tables
PK = Primary Key · FK = Foreign Key · SCD2 = Slowly Changing Dimension Type 2 · UK = Unique Key