Funds transfer pricing engine¶
| ID | MOD-086 |
| System | SD06 |
| Repo | bank-risk-platform |
| Build status | Deployed |
| Deployed | Yes |
| Last commit | 54197c02fff0ca78a988e6140d31778e59f05b46 |
Purpose¶
MOD-086 implements the bank's funds transfer pricing (FTP) framework in Snowflake. It converts market swap and OIS curves into a daily internal rate grid that every product line uses as the cost or benefit of holding a funding position. Without FTP, product P&L is meaningless — a mortgage book cannot be assessed as profitable or loss-making unless it is charged a fair cost of the term funding it consumes.
What it does¶
Daily TP rate grid. After end-of-day curve publication by MOD-085, the FTP engine reads market.swap_curve and market.ois_curve. It applies a configurable liquidity premium overlay (set and maintained by the Treasury function) to produce a TP rate for each of nine standard tenor buckets: ON, 1M, 3M, 6M, 1Y, 2Y, 3Y, 5Y, and 10Y. The grid is written to the ftp.transfer_prices Snowflake Dynamic Table.
TP rate write-back. A write-back Lambda reads the computed TP grid from Snowflake and upserts it to the treasury.tp_rates table in the SD01 Postgres database. SD05 (credit decisioning) and SD01 (product rate configuration) read TP rates from Postgres — they are never inline on Snowflake during a customer interaction.
NIM attribution. The engine joins the TP grid to every active loan and deposit balance in the bank's Snowflake replica. For each balance it calculates the TP cost (for loans: the funding cost attributed to treasury) or TP benefit (for deposits: the funding credit passed to treasury). Net interest margin is then attributed by product code, business line, and jurisdiction. Results are published daily to ftp.nim_attribution. This is the primary source for management accounts and product profitability reporting.
Audit trail. Every version of the TP rate grid is retained in full with its effective date, the curve source version identifier from market.*, and the liquidity premium basis points applied. A minimum of seven years of history is maintained, enabling reconstruction of the TP rate that applied to any loan or deposit on any historical business day.
Relationship to product pricing¶
The TP grid does not set customer-facing interest rates. It sets the internal cost-of-funds baseline. Product managers in SD01 configure margin bands (LVR tier × credit tier → margin over TP) on top of the TP base rate to determine the published lending rate. Similarly, deposit rates are set as TP benefit less the margin retained by the bank. FTP makes the relationship between market rates, treasury cost, and product pricing explicit and auditable.
Liquidity premium¶
The liquidity premium overlay is the bank's assessment of the cost of holding a liquidity buffer appropriate to each tenor bucket. It is not derived from market data — it is a Treasury policy decision reviewed quarterly. The premium is stored in a configuration table in Snowflake and versioned; the FTP engine uses the premium version active on each business day.
Streamlit dashboard¶
MOD-086 ships a Streamlit page FTP.STREAMLIT_FTP_DASHBOARD providing:
- Current FTP rate table by product type and tenor (mortgage, personal loan, term deposit, at-call savings — each with NZD and AUD rates)
- FTP rate history over 90 days
- Marginal cost of funds vs. FTP rate spread by product
- NII contribution estimated from FTP rates
Consumed by MOD-171 (Risk Intelligence Dashboard) in the risk metrics overview section. Cross-schema SELECT on FTP.* published views required for RISK_INTELLIGENCE_ROLE.
Module dependencies¶
Depends on¶
| Module | Title | Required? | Contract | Reason |
|---|---|---|---|---|
| MOD-085 | Market rates ingestion & normalisation | Required | contract/dbt/ |
Swap and OIS curves are consumed via dbt source() on the market.* schema published by MOD-085 (market.swap_curve, market.ois_curve). Not via EventBridge subscription (ADR-046). |
| MOD-042 | CDC pipeline — Neon logical replication to S3 Iceberg | Required | — | Loan and deposit balance data from the CDC pipeline is required to compute NIM attribution by product segment. |
| 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 and governance provisioned by MOD-102 must exist before this module can read or write Snowflake. |
| MOD-103 | Neon database platform bootstrap | Required | — | Neon database provisioned by MOD-103 must exist before the write-back Lambda can read SD01 Postgres connection details from SSM. |
| MOD-161 | Transfer pricing | Required | — | treasury.tp_rates table provisioned by MOD-161 must exist before the write-back Lambda can write the daily TP rate grid to SD01 Postgres. |
| MOD-171 | Risk Intelligence Dashboard | Required | — | Risk Intelligence Dashboard displays the FTP rate table by product and tenor in its risk metrics overview section. |
Required by¶
| Module | Title | As | Contract |
|---|---|---|---|
| MOD-106 | ROTE engine | Hard dependency | — |
| MOD-171 | Risk Intelligence Dashboard | Hard dependency | — |
Policies satisfied¶
| Policy | Title | Mode | How |
|---|---|---|---|
| REP-001 | Regulatory Reporting Policy | CALC |
NIM attribution by business line is produced daily from TP-adjusted loan and deposit balances — management accounts reflect the true cost and benefit of funds for each product segment. |
| CLQ-003 | Capital Planning & Stress Testing Policy | CALC |
The TP rate grid encodes the liquidity premium charged to each tenor bucket — the FTP engine ensures every product price embeds the cost of holding that liquidity position. |
Capabilities satisfied¶
| Capability | Title | Mode | How |
|---|---|---|---|
| CAP-133 | CAP-133 | AUTO |
Reads market.swap_curve and market.ois_curve from Snowflake after end-of-day publication; applies Treasury-configured liquidity premium; writes daily TP rate grid across 9 tenor buckets to ftp.transfer_prices and to SD01 Postgres tp_rates via write-back Lambda; produces daily NIM attribution by product segment and business line in ftp.nim_attribution. |
Part of SD06 — Snowflake Analytics & Risk Platform
Compiled 2026-05-22 from source/entities/modules/MOD-086.yaml