K-Factor (MIFIDPRU)
FCA investment firm prudential capital requirements calculator with assessment storage, document uploads, and export.
Overview
The K-Factor module implements the MIFIDPRU capital requirements framework — the FCA's prudential regime for UK investment firms effective January 2022.
It provides:
- Multi-section assessment form covering all 9 K-factors across three risk categories
- SNI eligibility check — automatic Small and Non-Interconnected firm classification
- Pass/fail diagnostics — proportionality analysis flagging concentration risk
- Assessment persistence — save, list, and revisit past assessments
- Document uploads — attach supporting files (PDF, Excel, CSV) to assessments via Supabase
- Export — download assessments as styled Excel or PDF reports
Access the calculator at /kfactor.
The 9 K-Factors
MIFIDPRU 4 defines nine K-factors organized into three risk categories:
Risk to Customers (RtC)
| K-Factor | Regulation | Input | Coefficient |
|---|---|---|---|
| K-AUM | MIFIDPRU 4.7 | 15-month rolling average AUM | 0.02% |
| K-ASA | MIFIDPRU 4.8 | 15-month rolling average assets safeguarded | 0.02% |
| K-CMH | MIFIDPRU 4.9 | Client money held (segregated + non-segregated) | 0.45% (seg) / 0.50% (non-seg) |
| K-COH | MIFIDPRU 4.10 | Client orders handled (cash + derivatives) | 0.10% (cash) / 0.01% (deriv) |
Risk to Market (RtM)
| K-Factor | Regulation | Input | Coefficient |
|---|---|---|---|
| K-DTF | MIFIDPRU 4.11 | Daily trading flow (cash + derivatives) | 0.10% (cash) / 0.01% (deriv) |
| K-NPR | MIFIDPRU 4.12 | Net position risk (pre-calculated) | Direct input |
| K-CMG | MIFIDPRU 4.13 | Clearing margin given to CCPs | 2.00% |
Risk to Firm (RtF)
| K-Factor | Regulation | Input | Coefficient |
|---|---|---|---|
| K-TCD | MIFIDPRU 4.14 | Trading counterparty default (pre-calculated) | Direct input |
| K-CON | MIFIDPRU 4.15 | Concentration risk (pre-calculated) | Direct input |
The total K-factor requirement is the sum of all individual K-factor capital charges. The firm's Own Funds Requirement (OFR) is the maximum of the Permanent Minimum Requirement, Fixed Overheads Requirement, and the K-factor total.
SNI Classification
A firm qualifies as Small and Non-Interconnected (SNI) under MIFIDPRU 1.2 if it meets all of the following thresholds:
| K-Factor | Threshold |
|---|---|
| K-AUM | AUM < £1.2 billion |
| K-COH | Client orders handled < £100 million/day |
| K-ASA | Assets safeguarded < £900 million |
| K-CMH | No client money held (£0) |
SNI firms benefit from a simplified prudential regime with reduced reporting obligations.
The calculator automatically evaluates SNI eligibility based on the values entered and displays a pass/fail indicator for each threshold.
Pass/Fail Diagnostics
Each K-factor is evaluated against proportionality thresholds to flag concentration risk — where a single K-factor dominates the total requirement:
| K-Factor | Warning Threshold | Fail Threshold |
|---|---|---|
| K-AUM | 30% of total | 50% of total |
| K-ASA | 30% of total | 50% of total |
| K-CMH | 20% of total | 40% of total |
| K-COH | 20% of total | 40% of total |
| K-DTF | 25% of total | 45% of total |
| K-NPR | 30% of total | 50% of total |
| K-CMG | 20% of total | 40% of total |
| K-TCD | 20% of total | 40% of total |
| K-CON | 15% of total | 30% of total |
- PASS — K-factor is below warning threshold
- WARNING — K-factor exceeds warning threshold but below fail
- FAIL — K-factor exceeds fail threshold (concentration risk)
- N/A — K-factor is zero or not applicable
Assessment Form
The calculator is organized into four tabbed sections:
1. Firm Details
Basic identification fields:
- Firm Name — legal entity name
- FRN — FCA firm reference number
- Reporting Date — assessment period
- SNI Status — dropdown: SNI / Non-SNI / Unsure
2. Risk to Customers
Input fields for K-AUM, K-ASA, K-CMH, and K-COH. Each field shows its regulatory coefficient and computes the capital requirement in real time as values are entered.
3. Risk to Market
Input fields for K-DTF, K-CMG, and K-NPR. K-NPR is a direct input (pre-calculated by the firm).
4. Risk to Firm
Input fields for K-TCD and K-CON. Both are direct inputs (pre-calculated by the firm).
All currency inputs are formatted in GBP. Each field displays a description, the applicable MIFIDPRU regulation reference, and the computed K-factor contribution alongside the input.
Results View
After submission, the results view displays:
- Total K-Factor Requirement — sum of all K-factor capital charges (£)
- K-Factor Breakdown — each K-factor with its computed value, percentage of total, and pass/fail status
- SNI Eligibility — pass/fail against each SNI threshold
- Export Buttons — download as Excel or PDF
- Document Upload — attach supporting files to the saved assessment
Document Uploads
Assessments support file attachments stored in Supabase:
| Property | Value |
|---|---|
| Storage | Supabase bucket kfactor-documents |
| Max file size | 25 MB |
| Allowed types | PDF, PNG, JPEG, XLSX, XLS, CSV |
| Document types | Supporting, Audit, Compliance |
| Path pattern | kfactor/{userId}/{assessmentId}/{uploadId}_{filename} |
Export
Assessments can be exported in two formats:
Excel (.xlsx)
Three worksheets with Bloomberg Terminal styling:
- K-Factor Summary — K-factor, description, category, regulation, requirement, status
- Firm Details — firm name, FRN, reporting date, SNI status
- Input Data — all raw field values
Single-page report containing:
- Header with firm name, FRN, and reporting date
- SNI classification status
- Total K-factor requirement (highlighted)
- Component breakdown table with pass/fail indicators
- Regulatory disclaimer and generation timestamp
Export filename: kfactor_assessment_YYYYMMDDHHMM.{xlsx,pdf}
API Routes
POST /api/kfactor — Save Assessment
Saves a completed assessment to the database. Requires authentication.
Payload:
{
firmName: string
frn?: string
reportingDate?: string
sniStatus?: string
inputValues: Record<string, string> // raw form inputs
kfactorResults: Record<string, number> // computed K-factors
totalRequirement: number
passFailResults?: Record<string, PassFailResult>
}
GET /api/kfactor — List Assessments
Returns the authenticated user's saved assessments, ordered newest first.
POST /api/kfactor/upload — Upload Document
Multipart form upload. Fields: file, assessmentId, docType, notes (optional).
GET /api/kfactor/upload — List Documents
Returns documents for a given assessmentId query parameter.
POST /api/kfactor/export — Export Assessment
Generates and returns an Excel or PDF file. Accepts format: "xlsx" | "pdf" in the request body
alongside the full assessment data.
Architecture
Components
| Component | File | Description |
|---|---|---|
| KFactorSurvey | components/KFactorSurvey.tsx | Multi-section assessment form with results view |
| KTcdCalculator | components/kfactor/KTcdCalculator.tsx | K-TCD position calculator with 3 input modes |
Database Models
KFactorAssessment — stores completed assessments with input values, computed results, and pass/fail
diagnostics. Indexed on [userId, createdAt] and [firmName].
KFactorDocument — stores document metadata with Supabase storage path. Cascade-deletes when the parent assessment is removed.
Page Route
The K-Factor page at /kfactor renders the assessment form with a tab bar switching between the
K-Factor Survey and the K-TCD Calculator.
K-TCD Calculator
The K-TCD Calculator computes the trading counterparty default capital requirement under IFR Articles 25–32.
It accepts positions via CSV upload, manual entry, or the built-in sample portfolio, and produces per-netting-set
and total K-TCD figures. Access the calculator at /kfactor (K-TCD tab).
K-TCD Formula
The top-level formula is:
K-TCD = alpha × EV × RF × CVA
where each component is defined as follows:
| Component | Definition |
|---|---|
| alpha | 1.2 — fixed IFR multiplier (IFR Article 26) |
| EV | Exposure Value = max(0, RC + PFE − C), computed at the netting set level |
| RC | Replacement Cost — current market value (CMV) of the position; zero if not provided |
| PFE | Potential Future Exposure = |Notional × Duration × Delta| × Supervisory Factor |
| C | Collateral value after supervisory haircuts (IFR Article 31) |
| RF | Risk Factor — 1.6% for institutions and governments, 8% for other counterparties (IFR Article 30) |
| CVA | Credit Valuation Adjustment — 1.5 for standard derivatives, 1.0 for SFTs, intragroup, and long-settlement transactions (IFR Article 32) |
Duration sub-formula (IFR Article 29)
For interest-rate and credit asset classes, duration is a maturity-weighted discount factor:
Duration = (1 − exp(−0.05 × M)) / 0.05
where M is the residual maturity in years. For all other asset classes, Duration = 1.
Delta sub-formula
For option positions, delta is computed via the Black-Scholes cumulative normal distribution:
- Call: Φ(d₁) where d₁ = (ln(S/K) + 0.5 × σ² × T) / (σ × √T)
- Put: Φ(d₁) − 1
For non-option positions, Delta = 1.
IFR Table 3: Supervisory Factors
Supervisory factors scale PFE by asset class risk. Source: IFR Article 29.
| Asset Class | Supervisory Factor |
|---|---|
| Interest Rate | 0.5% |
| Foreign Exchange | 4.0% |
| Credit | 1.0% |
| Equity (Single Name) | 32.0% |
| Equity (Index) | 20.0% |
| Commodity | 18.0% |
| Other | 32.0% |
IFR Table 4: Collateral Haircuts
Supervisory haircuts reduce the collateral value (C) recognized in the EV calculation. Source: IFR Article 31.
| Collateral Type | Residual Maturity | Haircut |
|---|---|---|
| Cash | — | 0% |
| Government bonds | < 1 year | 1% |
| Government bonds | 1 to 5 years | 3% |
| Government bonds | > 5 years | 6% |
| Corporate bonds | < 1 year | 2% |
| Corporate bonds | 1 to 5 years | 6% |
| Corporate bonds | > 5 years | 12% |
| Equities (main index) | — | 20% |
| Gold | — | 15% |
Currency mismatch add-on: An additional 8% haircut applies when the collateral currency differs from the transaction currency (IFR Article 31). This add-on is applied on top of the base haircut above.
Netting Sets
Positions are grouped into netting sets by (Client ID, Netting Class). EV is computed at the netting set level — individual position exposures cannot be evaluated in isolation because offsetting positions within the same netting agreement reduce the total replacement cost and PFE.
Aggregation steps for each netting set:
- Sum all RC values across positions in the set
- Sum all PFE values across positions in the set
- Sum all collateral-adjusted values (C) across positions in the set
- Compute EV = max(0, total RC + total PFE − total C)
- Apply RF and CVA from the first position's counterparty type and transaction type
- K-TCD for the netting set = 1.2 × EV × RF × CVA
Total K-TCD is the sum of K-TCD across all netting sets.
CSV Upload Format
Upload positions as a CSV file with the following columns. The first row must be a header row matching these column names exactly (case-insensitive).
| Column Name | Required | Description |
|---|---|---|
| Client | Required | Counterparty or client identifier used for netting set grouping |
| Netting Class | Required | Netting agreement class (e.g. A, B, C); positions sharing Client + Netting Class are netted |
| Asset Class | Required | One of: interest-rate, foreign-exchange, credit, equity-single, equity-index, commodity, other |
| Description | Optional | Human-readable position description |
| Notional | Required | Notional amount in the position's base currency |
| Currency | Required | ISO 4217 currency code (e.g. USD, EUR, GBP) |
| Maturity Date | Required | ISO 8601 date (YYYY-MM-DD) |
| Trade Date | Optional | ISO 8601 date; defaults to today if omitted |
| Counterparty Type | Required | One of: institution, government, other |
| CMV | Optional | Current market value; used as replacement cost (RC). Defaults to 0 if omitted |
| Side | Required | buy or sell |
| Collateral Amount | Optional | Collateral posted by the counterparty before haircuts. Defaults to 0 if omitted |
| Collateral Type | Optional | One of: cash, govt-bond-lt1y, govt-bond-1to5y, govt-bond-gt5y, corp-bond-lt1y, corp-bond-1to5y, corp-bond-gt5y, equity, gold, none |
| Collateral Currency | Optional | ISO 4217 currency code of the collateral. Used for currency mismatch detection |
| Is Option | Optional | true or false. Defaults to false if omitted |
| Option Type | Optional | call or put. Required when Is Option = true |
| Strike | Optional | Strike price. Required when Is Option = true |
| Underlying Price | Optional | Current price of the underlying. Required when Is Option = true |
| IV | Optional | Implied volatility as a decimal (e.g. 0.25 for 25%). Required when Is Option = true |
| Option Expiry | Optional | ISO 8601 date. Falls back to Maturity Date if omitted |
Example rows:
Client,Netting Class,Asset Class,Description,Notional,Currency,Maturity Date,Trade Date,Counterparty Type,CMV,Side,Collateral Amount,Collateral Type,Collateral Currency,Is Option,Option Type,Strike,Underlying Price,IV,Option Expiry
Alpha Capital,A,interest-rate,US Treasury 10Y bond derivative,20000000,USD,2035-04-08,2026-04-08,institution,500000,buy,15000000,cash,USD,,,,,
Beta Trading,C,equity-single,AAPL equity total return swap,5000000,USD,2027-04-08,2026-04-08,other,200000,buy,1000000,equity,USD,,,,,
Alpha Capital,A,foreign-exchange,EUR/USD FX call option,10000000,EUR,2026-07-08,2026-04-08,institution,150000,buy,2000000,govt-bond-1to5y,USD,true,call,1.12,1.10,0.08,2026-07-08
The file must not exceed 500 rows. Rows with missing required fields are rejected with a per-row error message.
Sample Portfolio
The built-in sample portfolio contains 21 positions across 3 clients and all 7 IFR asset classes. It can be loaded with one click from the K-TCD Calculator tab — no file upload required.
Alpha Capital (institution, RF 1.6%) — 6 positions in netting classes A and B
| Netting Class | Description | Asset Class |
|---|---|---|
| A | US Treasury 10Y bond derivative | Interest Rate |
| A | EUR/USD FX forward | Foreign Exchange |
| A | EUR/USD FX call option | Foreign Exchange |
| A | JPY/USD FX forward | Foreign Exchange |
| B | Corporate bond (IG) credit derivative | Credit |
| B | US Treasury 2Y note derivative | Interest Rate |
Beta Trading (other, RF 8%) — 8 positions in netting classes C and D
| Netting Class | Description | Asset Class |
|---|---|---|
| C | AAPL equity total return swap | Equity (Single) |
| C | MSFT equity total return swap | Equity (Single) |
| C | NVDA equity total return swap | Equity (Single) |
| C | AAPL put option | Equity (Single) |
| C | NVDA call option | Equity (Single) |
| D | Crude oil futures | Commodity |
| D | Natural gas futures | Commodity |
| D | Gold futures | Commodity |
| D | Copper futures | Commodity |
Gamma Fund (mixed counterparty types) — 7 positions in netting classes E and F
| Netting Class | Description | Asset Class |
|---|---|---|
| E | S&P 500 index total return swap | Equity (Index) |
| E | EURO STOXX 50 index swap | Equity (Index) |
| E | Russell 2000 total return swap | Equity (Index) |
| E | Repo — government securities | Interest Rate |
| F | Exotic basket option (structured) | Other |
| F | CLO tranche swap | Other |
| F | Variance swap | Other |
Regulatory References
- MIFIDPRU — Investment Firms Prudential Regulation
- IFPR 2022 — Investment Firms Prudential Regime
- IFR Article 25–32 — K-TCD calculation methodology (supervisory factors, exposure value, collateral haircuts)
- Own Funds Requirement (OFR) — MAX(PMR, FOR, K-factor total)
- CASS — Client Assets Sourcebook (client money segregation rules)