ROTE engine¶
| ID | MOD-106 |
| System | SD06 |
| Repo | bank-risk-platform |
| Build status | Not started |
| Deployed | No |
What it does¶
MOD-106 computes daily ROTE (Return on Tangible Equity) at three levels: per product per customer (facility-level), per product across the portfolio (product-level), and per customer across all their holdings (customer-level). Results feed MOD-105 (eligibility — ROTE hurdle gate) and executive dashboards via Snowflake.
Why it exists¶
Governance. CON-006 requires that products persistently below the ROTE hurdle rate are flagged to the product governance board. Without a systematic calculation this obligation is manual, inconsistent, and difficult to evidence to the regulator.
Commercial. Return on tangible equity is the primary capital efficiency metric used by the board to evaluate product portfolio performance. Facility-level ROTE shows whether individual credit exposures are generating adequate return relative to the regulatory capital they consume. Customer-level ROTE tells the bank whether a given customer relationship is profitable in aggregate — informing product selection in MOD-107 (NBP engine) and pricing adjustments.
ROTE formula¶
Facility ROTE = (NIM Revenue − ECL Provision − Operating Cost Allocation)
─────────────────────────────────────────────────────────
Allocated Regulatory Capital (RWA × CET1 floor)
Where:
NIM Revenue = from MOD-086 FTP grid (product interest income minus transfer price cost)
ECL Provision = from MOD-031 (expected credit loss for this exposure)
Operating Cost Allocation = configurable cost coefficient per product class (bps of balance)
Allocated Regulatory Capital = product exposure × RWA risk weight (from MOD-033) × CET1 floor (config)
Tangible equity is approximated as RWA × CET1 minimum ratio, configured per jurisdiction: NZ uses 6% per RBNZ requirements; AU uses 4.5% plus applicable buffers per APRA requirements. This gives a consistent capital allocation across the portfolio without requiring a full internal capital adequacy model.
Data model¶
-- rote.facility_rote (Snowflake — written daily by MOD-106)
CREATE TABLE rote.facility_rote (
party_id VARCHAR NOT NULL,
product_id VARCHAR NOT NULL,
account_id VARCHAR NOT NULL,
jurisdiction VARCHAR NOT NULL,
nim_revenue NUMBER(18,6) NOT NULL,
ecl_provision NUMBER(18,6) NOT NULL,
operating_cost_allocation NUMBER(18,6) NOT NULL,
allocated_regulatory_capital NUMBER(18,6) NOT NULL,
rote_annualised NUMBER(8,6) NOT NULL, -- e.g. 0.1234 = 12.34%
hurdle_rate NUMBER(8,6) NOT NULL,
below_hurdle BOOLEAN NOT NULL,
calculation_date DATE NOT NULL,
model_version VARCHAR NOT NULL
);
-- rote.customer_rote (Snowflake — daily roll-up across all customer facilities)
CREATE TABLE rote.customer_rote (
party_id VARCHAR NOT NULL,
jurisdiction VARCHAR NOT NULL,
total_nim_revenue NUMBER(18,6) NOT NULL,
total_ecl_provision NUMBER(18,6) NOT NULL,
total_operating_cost NUMBER(18,6) NOT NULL,
total_allocated_capital NUMBER(18,6) NOT NULL,
customer_rote_annualised NUMBER(8,6) NOT NULL,
calculation_date DATE NOT NULL,
PRIMARY KEY (party_id, calculation_date)
);
Hurdle rate framework¶
Each product class has a configured ROTE hurdle rate stored in product_eligibility.eligibility_rules.rote_hurdle_rate and read by both MOD-105 and MOD-106 at calculation time. Representative hurdle rates: personal loan 15%, everyday account 8%, term deposit 10%. Rates are set by the product governance board and updated through a controlled configuration change process.
If a facility's annualised ROTE falls below the configured hurdle for 90 consecutive calendar days, the record is written with below_hurdle = true. MOD-105 reads this flag at eligibility evaluation time — products in a persistent below-hurdle state have their ROTE gate fail for new offers until the product is repriced or the hurdle rate is formally revised. An alert is sent to the product governance board via MOD-076 when a product first enters or exits a below-hurdle state.
Customer-level roll-up¶
Customer ROTE is computed as the sum of all facility-level net returns (NIM revenue minus ECL provision minus operating cost allocation) divided by total allocated regulatory capital across all the customer's holdings. This produces a single capital-efficiency figure for the entire customer relationship.
MOD-107 (NBP engine) consumes customer ROTE as an input to next best product scoring. Customers with low overall ROTE are prioritised for upsell opportunities in higher-returning product categories, subject to eligibility gating by MOD-105.
Events¶
MOD-106 publishes rote.facility_rote_calculated to the bank-risk-platform EventBridge bus after each daily batch run completes. The event carries summary statistics: below-hurdle count by product class, average annualised ROTE by product class, and calculation date. This event is consumed by MOD-105 to refresh the ROTE gate state for the following day's eligibility evaluations.
Module dependencies¶
Depends on¶
| Module | Title | Required? | Contract | Reason |
|---|---|---|---|---|
| MOD-031 | ECL calculation & GL posting | Required | — | ECL provision from MOD-031 is a required input to the ROTE numerator calculation. |
| MOD-033 | RWA & capital ratio engine | Required | — | RWA-based regulatory capital from MOD-033 is the denominator in the ROTE calculation (tangible equity = RWA × CET1 ratio). |
| MOD-086 | Funds transfer pricing engine | Required | — | NIM attribution by product from MOD-086 is the primary revenue input to the ROTE numerator. |
| MOD-104 | AWS shared infrastructure bootstrap | Required | — | MOD-104 provisions the S3 Iceberg bucket (Snowflake external tables), KMS key, and bank-risk-platform EventBridge bus ARN. Required before this module can be deployed. |
| MOD-102 | Snowflake account configuration & governance | Required | — | Snowflake account, BANK_{ENV}_RISK database, BANK_DBT_ROLE, and warehouse must exist before this module can create its schema or run dbt models. |
Required by¶
| Module | Title | As | Contract |
|---|---|---|---|
| MOD-107 | Next best product engine | Optional enhancement | — |
Policies satisfied¶
| Policy | Title | Mode | How |
|---|---|---|---|
| CON-006 | Product suitability and governance | CALC |
Computes product-level and customer-level ROTE as a governance input to product eligibility and pricing decisions — products persistently below hurdle are flagged for product governance board review. |
| CRE-001 | Credit Risk Management Policy | CALC |
Risk-adjusted return calculated using RWA-based regulatory capital, ECL provision, and NIM attribution — providing a capital-efficiency view of credit product performance. |
Capabilities satisfied¶
(No capabilities mapped)
Part of SD06 — Snowflake Analytics & Risk Platform
Compiled 2026-05-22 from source/entities/modules/MOD-106.yaml