Prime Capital Bank

Data Dictionary · Gold Schema

DIM_CUSTOMER

GOLD SCD Type 2 · Customer master dimension ~500,000 rows
ColumnTypeKeyNullableDescription
customer_idSTRINGPKNOT NULLSurrogate key: CUST-XXXXXXXX
id_numberSTRING(13)NOT NULLSA 13-digit identity document number (masked in Silver, visible in Gold with access)
first_nameSTRINGNOT NULLCustomer first name
last_nameSTRINGNOT NULLCustomer surname
date_of_birthDATENOT NULLDate of birth (derived from id_number digits 1–6)
genderSTRINGNOT NULLMale / Female / Non-Binary (derived from id_number digits 7–10)
provinceSTRINGNOT NULLOne of 9 SA provinces
citySTRINGNULLABLECity of primary residence
postal_codeSTRING(4)NULLABLESA 4-digit postal code
customer_segmentSTRINGNOT NULLRetail / Business / Private Banking / Youth / Student
employment_statusSTRINGNULLABLEEmployed / Self-Employed / Unemployed / Retired / Student
annual_income_zarDECIMAL(15,2)NULLABLESelf-declared gross annual income in ZAR
credit_scoreINTEGERNULLABLEPCB proprietary credit score 300–850 (updated monthly by ML model)
kyc_statusSTRINGNOT NULLVerified / Pending / Expired / Failed (FICA compliance)
onboarding_dateDATENOT NULLDate customer account was activated
is_activeBOOLEANNOT NULLTRUE if customer has at least one active product
scd_start_dateDATENOT NULLSCD2 validity start
scd_end_dateDATENULLABLESCD2 validity end (NULL = current record)
is_currentBOOLEANNOT NULLTRUE = current active SCD2 record

DIM_FINTECH

GOLD SCD Type 1 · SA fintech acquiring partners 5 rows
ColumnTypeKeyNullableDescription
fintech_idSTRINGPKNOT NULLSurrogate key: FT001–FT005
fintech_nameSTRINGNOT NULLPartner name: Yoco / SnapScan / PayFast / Peach Payments / PayGate
platform_typeSTRINGNOT NULLPOS Card Acquiring / QR Code Payments / E-commerce Gateway / API Payment Platform / Enterprise Payment Gateway
fee_rate_pctDECIMAL(5,4)NOT NULLMerchant Discount Rate percentage (e.g. 2.95 = 2.95%)
min_fee_zarDECIMAL(8,2)NOT NULLMinimum fee per transaction in ZAR (0.00 if no minimum)
avg_basket_zarDECIMAL(10,2)NULLABLEAverage transaction basket size in ZAR (from partner reporting)
active_merchants_estINTEGERNULLABLEEstimated active merchant count on the platform nationally
annual_volume_zar_bnDECIMAL(8,2)NULLABLEReported annual transaction volume in billions ZAR
settlement_daysINTEGERNOT NULLBusiness days to settlement (1 = next-day, 2 = T+2)
risk_ratingSTRINGNOT NULLPCB internal risk rating: Low / Medium / High
headquartersSTRINGNULLABLEHeadquarters city
founded_yearINTEGERNULLABLEYear company was founded
is_activeBOOLEANNOT NULLTRUE = partnership currently active

FACT_FINTECH_SETTLEMENT

GOLD Monthly grain · Partner settlement totals 60 rows (5 partners × 12 months)
ColumnTypeKeyNullableDescription
settlement_idSTRINGPKNOT NULLSurrogate key: SET-XXXXXXXX
fintech_idSTRINGFKNOT NULLReferences DIM_FINTECH.fintech_id
settlement_monthDATENOT NULLFirst day of settlement month (partition key)
gross_volume_zarDECIMAL(18,2)NOT NULLTotal merchant transaction volume processed through the partner
transaction_countBIGINTNOT NULLNumber of individual transactions in the settlement period
mdr_fees_zarDECIMAL(15,2)NOT NULLMerchant Discount Rate fees earned by PCB (gross_volume × fee_rate)
net_settlement_zarDECIMAL(18,2)NOT NULLAmount settled to merchants after deducting MDR fees
chargeback_countINTEGERNOT NULLNumber of chargeback disputes received
chargeback_value_zarDECIMAL(12,2)NOT NULLTotal ZAR value of chargeback disputes
dispute_countINTEGERNOT NULLTotal disputes (chargebacks + merchant queries)
settlement_statusSTRINGNOT NULLCompleted / Pending / Disputed
load_timestampTIMESTAMPNOT NULLDatabricks pipeline ingestion timestamp

FACT_FRAUD_ALERT

GOLD Transaction-level · ML-generated fraud signals ~48,000 rows
ColumnTypeKeyNullableDescription
alert_idSTRINGPKNOT NULLSurrogate key: ALT-XXXXXXXX
transaction_idSTRINGFKNULLABLEReferences FACT_TRANSACTION (null for proactive/non-tx alerts)
customer_idSTRINGFKNOT NULLReferences DIM_CUSTOMER.customer_id
account_idSTRINGFKNULLABLEReferences DIM_ACCOUNT
alert_dateDATENOT NULLDate alert was triggered (partition key)
alert_typeSTRINGNOT NULLReal-time / Batch / Manual Review
fraud_categorySTRINGNOT NULLCard Not Present / Account Takeover / Identity Fraud / ATM Skimming / Phishing / Merchant Fraud / Debit Order Abuse
risk_scoreDECIMAL(4,3)NOT NULLML model output: 0.000–1.000 (≥0.80 = Critical)
amount_zarDECIMAL(15,2)NULLABLETransaction amount at risk in ZAR
statusSTRINGNOT NULLOpen / Under Investigation / Resolved / False Positive
investigation_statusSTRINGNULLABLEAssigned / In Progress / Escalated / Closed
resolution_dateDATENULLABLEDate alert was resolved (null if still open)
ml_model_versionSTRINGNOT NULLModel version that generated the alert (e.g. fraud_v3.2.1)
ml_confidence_scoreDECIMAL(4,3)NULLABLEModel confidence in the prediction (separate from risk score)
feature_flagsSTRINGNULLABLEJSON: top contributing features (velocity, geo_mismatch, device_new)

DIM_ACCOUNT

GOLDSCD Type 1 · Account master~820,000 rows
ColumnTypeKeyNullableDescription
account_idSTRINGPKNOT NULLSurrogate key: ACC-XXXXXXXX
customer_idSTRINGFKNOT NULLReferences DIM_CUSTOMER
branch_idSTRINGFKNOT NULLReferences DIM_BRANCH
account_numberSTRING(12)NOT NULLPCB account number (masked: ****XXXX)
account_typeSTRINGNOT NULLSavings / Cheque / Investment / Fixed Deposit / Money Market
current_balance_zarDECIMAL(18,2)NOT NULLCurrent balance as of last statement date
available_balance_zarDECIMAL(18,2)NOT NULLAvailable balance (current minus holds)
interest_rate_pctDECIMAL(5,4)NULLABLEAnnual interest rate applied to the account
account_statusSTRINGNOT NULLActive / Dormant / Closed / Suspended / Frozen
open_dateDATENOT NULLDate account was opened
close_dateDATENULLABLEDate account was closed (null if open)

DIM_BRANCH

GOLDSCD Type 1 · Branch / ATM network200 rows
ColumnTypeKeyNullableDescription
branch_idSTRINGPKNOT NULLSurrogate key: BR001–BR200
branch_nameSTRINGNOT NULLBranch display name
branch_typeSTRINGNOT NULLFlagship / Full Service / Standard / Micro Branch / ATM Only
provinceSTRINGNOT NULLOne of 9 SA provinces
citySTRINGNOT NULLMunicipality city
regionSTRINGNULLABLEPCB internal sales region (matches SARB reporting regions)
latitudeDECIMAL(9,6)NULLABLEGPS latitude for mapping
longitudeDECIMAL(9,6)NULLABLEGPS longitude for mapping
opening_dateDATENOT NULLBranch opening date
is_activeBOOLEANNOT NULLTRUE = currently operational

DIM_MERCHANT

GOLDSCD Type 1 · Card acquiring merchant registry~45,000 rows
ColumnTypeKeyNullableDescription
merchant_idSTRINGPKNOT NULLSurrogate key: MERCH-XXXXXXXX
merchant_nameSTRINGNOT NULLRegistered merchant trading name
merchant_category_codeSTRING(4)NOT NULLISO 18245 MCC (e.g. 5411 = Grocery, 5541 = Service Stations)
merchant_categorySTRINGNOT NULLHuman-readable MCC group
provinceSTRINGNOT NULLProvince of primary business address
citySTRINGNULLABLECity
acquiring_bankSTRINGNOT NULLAcquiring institution (Prime Capital Bank)
risk_levelSTRINGNOT NULLLow / Medium / High / Blocked
is_activeBOOLEANNOT NULLActive merchant relationship

DIM_DATE

GOLDStatic · Calendar dimension 2020–20251,826 rows
ColumnTypeKeyNullableDescription
date_idINTEGERPKNOT NULLYYYYMMDD integer key (e.g. 20240315)
calendar_dateDATENOT NULLFull date
yearINTEGERNOT NULLCalendar year
quarterINTEGERNOT NULL1–4
monthINTEGERNOT NULL1–12
month_nameSTRINGNOT NULLJanuary … December
day_of_weekINTEGERNOT NULL1=Monday … 7=Sunday (ISO 8601)
day_nameSTRINGNOT NULLMonday … Sunday
is_weekendBOOLEANNOT NULLSaturday or Sunday
is_public_holidayBOOLEANNOT NULLSA public holiday flag
is_business_dayBOOLEANNOT NULLNot weekend and not public holiday

DIM_COUNTERPARTY

GOLDSCD Type 1 · Payment counterparties (other banks, individuals)~12,000 rows
ColumnTypeKeyNullableDescription
counterparty_idSTRINGPKNOT NULLSurrogate key: CP-XXXXXXXX
counterparty_nameSTRINGNOT NULLInstitution or individual name
counterparty_typeSTRINGNOT NULLRetail Bank / Corporate / Individual / Government / NBFI
bank_codeSTRING(6)NULLABLESARB universal branch code
countrySTRINGNOT NULLCountry of institution (ZA for domestic)
aml_risk_ratingSTRINGNOT NULLPCB AML risk: Low / Medium / High / Blocked

DIM_CURRENCY

GOLDStatic · ISO 4217 currencies8 rows
ColumnTypeKeyNullableDescription
currency_idSTRINGPKNOT NULLCUR001–CUR008
currency_codeSTRING(3)NOT NULLISO 4217 code (ZAR, USD, EUR, GBP, CNY, BWP, ZMW, MZN)
currency_nameSTRINGNOT NULLFull currency name
symbolSTRINGNOT NULLCurrency symbol (R, $, €, £, ¥, P, ZK, MT)
is_base_currencyBOOLEANNOT NULLTRUE = ZAR (base reporting currency)
countrySTRINGNOT NULLIssuing country

FACT_TRANSACTION

GOLDTransaction-level · Core banking ledger12M+ rows
ColumnTypeKeyNullableDescription
transaction_idSTRINGPKNOT NULLSurrogate key: TXN-XXXXXXXX
account_idSTRINGFKNOT NULLReferences DIM_ACCOUNT
customer_idSTRINGFKNOT NULLReferences DIM_CUSTOMER (denormalised for query performance)
transaction_dateDATENOT NULLTransaction date (partition key)
transaction_datetimeTIMESTAMPNOT NULLFull timestamp with time zone
transaction_typeSTRINGNOT NULLCredit / Debit / Transfer / Fee / Interest / Reversal
channelSTRINGNOT NULLBranch / ATM / Online / Mobile / USSD / POS
amount_zarDECIMAL(15,2)NOT NULLTransaction amount in ZAR (always positive; sign determined by debit_credit_flag)
debit_credit_flagSTRING(1)NOT NULLD = Debit, C = Credit
merchant_idSTRINGFKNULLABLEReferences DIM_MERCHANT (null for non-merchant transactions)
merchant_nameSTRINGNULLABLEMerchant name (denormalised from POS terminal data)
merchant_categorySTRINGNULLABLEMCC category description
balance_after_zarDECIMAL(18,2)NOT NULLAccount balance immediately after transaction
referenceSTRINGNULLABLECustomer reference or payment narrative
is_flaggedBOOLEANNOT NULLTRUE if transaction generated a fraud alert

FACT_LOAN

GOLDLoan-level · Credit portfolio snapshot~280,000 rows
ColumnTypeKeyNullableDescription
loan_idSTRINGPKNOT NULLSurrogate key: LN-XXXXXXXX
customer_idSTRINGFKNOT NULLReferences DIM_CUSTOMER
account_idSTRINGFKNOT NULLReferences DIM_ACCOUNT (linked lending account)
loan_typeSTRINGNOT NULLHome Loan / Personal Loan / Vehicle Finance / Revolving Credit / Business Loan
approved_amount_zarDECIMAL(15,2)NOT NULLOriginal approved loan amount
outstanding_balance_zarDECIMAL(15,2)NOT NULLCurrent outstanding balance
interest_rate_pctDECIMAL(5,4)NOT NULLAnnual interest rate (Prime ± spread)
loan_term_monthsINTEGERNOT NULLLoan term in months
months_in_arrearsINTEGERNOT NULLNumber of months payment is overdue (0 = current)
loan_statusSTRINGNOT NULLCurrent / Non-Performing / Default / Restructured / Closed / Written Off
provision_zarDECIMAL(15,2)NOT NULLIFRS 9 expected credit loss provision
risk_weight_pctDECIMAL(5,2)NOT NULLBasel III risk weight applied (35% home loan, 75% retail, 100% corporate)
origination_dateDATENOT NULLDate loan was disbursed
maturity_dateDATENOT NULLScheduled loan end date
pd_scoreDECIMAL(5,4)NULLABLEProbability of Default from credit scoring ML model (0–1)
lgd_pctDECIMAL(5,4)NULLABLELoss Given Default estimate

FACT_CARD_TRANSACTION

GOLDCard-level · POS and online card transactions~3.2M rows
ColumnTypeKeyNullableDescription
card_tx_idSTRINGPKNOT NULLSurrogate key: CTX-XXXXXXXX
merchant_idSTRINGFKNOT NULLReferences DIM_MERCHANT
customer_idSTRINGFKNOT NULLReferences DIM_CUSTOMER
tx_dateDATEFKNOT NULLReferences DIM_DATE (partition key)
card_typeSTRINGNOT NULLVisa Debit / Visa Credit / Mastercard Debit / Mastercard Credit
entry_modeSTRINGNOT NULLChip / Tap / Swipe / Online / Manual Key Entry
amount_zarDECIMAL(12,2)NOT NULLTransaction amount in ZAR
authorization_codeSTRING(6)NULLABLEIssuer authorization code
response_codeSTRING(2)NOT NULL00=Approved, 05=Declined, 51=Insufficient Funds, 57=Not Permitted
is_internationalBOOLEANNOT NULLTRUE if merchant country ≠ ZA
is_contactlessBOOLEANNOT NULLTRUE if NFC/tap payment
fraud_flagBOOLEANNOT NULLTRUE if transaction linked to confirmed fraud

FACT_PAYMENT

GOLDPayment-level · EFT, SWIFT, PayShap transfers~1.8M rows
ColumnTypeKeyNullableDescription
payment_idSTRINGPKNOT NULLSurrogate key: PAY-XXXXXXXX
account_idSTRINGFKNOT NULLReferences DIM_ACCOUNT (originating account)
counterparty_idSTRINGFKNOT NULLReferences DIM_COUNTERPARTY
currency_idSTRINGFKNOT NULLReferences DIM_CURRENCY
payment_typeSTRINGNOT NULLEFT / SWIFT / PayShap / RTC / Debit Order / SARB RTGS
amount_originalDECIMAL(18,2)NOT NULLAmount in originating currency
amount_zarDECIMAL(18,2)NOT NULLZAR equivalent (using exchange rate at payment datetime)
zar_rateDECIMAL(12,6)NOT NULLExchange rate applied (ZAR per foreign currency unit)
payment_statusSTRINGNOT NULLProcessed / Pending / Returned / Recalled / Rejected
value_dateDATENOT NULLDate funds become available to beneficiary
aml_screenedBOOLEANNOT NULLTRUE = payment passed AML screening
aml_risk_scoreDECIMAL(4,3)NULLABLEAML model risk score 0–1

FACT_AML_CASE

GOLDCase-level · FIC Act suspicious activity reports~8,200 rows
ColumnTypeKeyNullableDescription
case_idSTRINGPKNOT NULLSurrogate key: AML-XXXXXXXX
customer_idSTRINGFKNOT NULLReferences DIM_CUSTOMER
case_typeSTRINGNOT NULLSTR / CTR / SAR / Enhanced Due Diligence / PEP Screening
trigger_ruleSTRINGNOT NULLRule or ML model that triggered the case
risk_scoreDECIMAL(4,3)NOT NULLAML model risk score 0–1
total_exposure_zarDECIMAL(18,2)NULLABLECumulative suspicious transaction value
fic_report_filedBOOLEANNOT NULLTRUE = SAR/STR filed with Financial Intelligence Centre
case_statusSTRINGNOT NULLOpen / Investigating / Escalated / Closed — Suspicious / Closed — Cleared
opened_dateDATENOT NULLDate case was opened (partition key)
closed_dateDATENULLABLEDate case was resolved