Repository navigation
Inputs
๐ Guide, not policy. The support matrix of the methodology and the template govern; where this page differs, the repository wins.
The three input sheets, Params, NettingSets and Trades, column by
column as the template at v1.0.2 lays them out, with what the engine
does with each value. Yellow cells are inputs; every input column has data
validation with an input message, but the engine checks every value again,
because data validation does not stop pasted values.
| Rule | What happens |
|---|---|
Values are read with Range.Value2
|
Stored values are used, never the displayed text: a Currency or Accounting format does not round a price or rate, and dates arrive as serials (#196) |
| A run recalculates first |
Run SA-CCR and Validate inputs recalculate the workbook before reading; a recalculation that does not finish stops the operation with ERR_RECALC_PENDING
|
| Codes and references | Compared trimmed and in upper case, with no aliases (long reads as Long; a code not in the list is rejected) |
| Error values | An Excel error (#N/A, #VALUE!, โฆ) in an input is rejected, never read as blank |
| Dates | A date, a serial of the 1900 date system, or text yyyy-mm-dd. Any other text (30/09/2031, 09/30/2031, a serial typed as text) is not read, because its meaning depends on the Windows regional settings: in a trade it rejects the trade, as the reporting date it stops the run |
| 1904 date system | A workbook set to Use 1904 date system stops the run: The workbook uses the 1904 date system, which is not supported.
|
| Headers | The engine reads by column number and checks every header it reads (ignoring case, spaces and line breaks). A column inserted, deleted, moved or renamed stops the run with Header must be 'โฆ' (found โฆ)
|
| Workbook names | Every table is located through its name (NettingSets_Header, Trades_Header, Params_Code, SF_Table, โฆ). A missing or broken name stops the run and asks for a rebuild from the template |
| Row order | Results do not depend on the order of the rows (#37) |
Each parameter is a row with its Code in column C (Params_Code) and
Value in column E (Params_Value), and is read through the workbook name
equal to its code, so the rows can move. A code listed twice with the same
value gives a warning; with different values it stops the run.
| Code (workbook name) | Template value | Allowed | If missing | Reference |
|---|---|---|---|---|
AsOfDate |
2026-09-30 | A date (data validation 2000-01-01 to 2100-12-31) | Run stops | Reporting date; all dates are measured from it |
ReportingCcy |
EUR |
Three letters AโZ, case and surrounding spaces ignored (format only, not ISO membership) | Run stops | Every amount is converted into it |
Alpha |
1.4 | > 0 | Default 1.4, warning | CRE52.1; CRR Art. 274(2) |
MultiplierFloor |
0.05 | โฅ 0 and < 1 | Default 0.05, warning | CRE52.23 |
DaysPerYear |
365 | 360 to 366 | Default 365, warning | Day count for S, E, M, T (a convention) |
BusinessDaysPerYear |
250 | Whole number 200 to 366 | Default 250, warning | CRE52.49, 52.53; CRR Art. 279c(1) |
MinMaturityBD |
10 | Whole number 0 to 250 | Default 10, warning | Floor on M, unmargined MF (CRE52.48) |
SDFloorBD |
10 | Whole number 0 to 250 (0 = none) | Default 10, warning | Floor on the supervisory duration (CRE52.34; CRR Art. 279b) |
MPORFloorBilateral |
10 | Whole number 1 to 250 | Default 10, warning | CRE52.50 |
MPORFloorCleared |
5 | Whole number 1 to 250 | Default 5, warning | CRE54.12; CRR Art. 279c(1)(b) (client clearing) |
MPORFloorLarge |
20 | Whole number 1 to 250 | Default 20, warning | CRE52.51; CRR Art. 285(3) |
BasisFactor |
0.5 | 0 to 1 | Default 0.5, warning | CRE52.46 |
VolatilityFactor |
5 | 0 to 10 | Default 5, warning | CRE52.47 |
IRCorrBucket12 |
0.7 | 0 to 1, valid correlation matrix | Default 0.7, warning | CRE52.57 |
IRCorrBucket23 |
0.7 | 0 to 1, valid correlation matrix | Default 0.7, warning | CRE52.57 |
IRCorrBucket13 |
0.3 | 0 to 1, valid correlation matrix | Default 0.3, warning | CRE52.57 |
IRBucketOffset |
TRUE | TRUE (bucket formula with offsets) or FALSE (sum of absolute bucket values, Basel only) | โ | CRE52.57(5); CRR Art. 280a(3) allows TRUE only |
Regime |
CRR |
CRR or BCBS; default for every netting set without an override |
CRR assumed, warning | See Basel vs CRR |
LambdaThresholdIR |
0.001 (0.10%) | 0 to 0.1 | Default 0.001, warning | Del. Reg. (EU) 2021/931 Art. 5 |
LambdaThresholdCO |
0.1 | 0 to 1 | Default 0.1, warning | Del. Reg. (EU) 2021/931 Art. 5 |
A value outside its range stops the run (for example
MultiplierFloor must be at least 0 and below 1 (found โฆ)). With
IRBucketOffset = FALSE, every CRR netting set with interest-rate trades
becomes INVALID, because the CRR prints only the formula with offsets.
Every run is classified against the built-in parameter set
CRE52-CRR-2026-10-09 (#41):
-
REGULATORYwhen the Params values, every row of the factor table and every alpha override equal that set; -
WHAT-IFotherwise, with one Checks warning per difference, startingWhat-if:(for exampleWhat-if: Alpha is 1.2 (regulatory 1.4).orWhat-if: factor row CR_BBB differs from the regulatory set (โฆ)).
DaysPerYear and IRBucketOffset are conventions: changing them does
not change the class. The class is shown in the run message, in Results C4
and in the evidence CSV (RUN;run_summary).
| Column | Header | Content |
|---|---|---|
| C | SF_Key |
Unique key: IR, FX, OT, or asset class + _ + sub-class (CR_BBB, EQ_INDEX, CO_OIL_GAS) |
| D | Asset class |
IR, FX, CR, EQ, CO, OT
|
| E | Category | The sub-class (AAAโฆCCC, CQS1โฆCQS6, IG_INDEX, SG_INDEX, SINGLE, INDEX, ELECTRICITY, OIL_GAS, METALS, AGRICULTURAL, OTHER, CLIMATIC) |
| F | Supervisory factor | Decimal, 0 to 1 |
| G | Correlation | Credit, equity and commodity only; blank for IR, FX, OT |
| H | Supervisory option vol | Decimal, 0 to 5 |
| I | Commodity hedging set |
ENERGY, METALS, AGRICULTURAL, OTHER or CLIMATIC; commodity rows only |
| J | Regimes |
BOTH, CRR or BCBS: where the row applies (CO_CLIMATIC and OT are CRR) |
| K | Reference | Not read |
The template ships 26 rows. The table runs from its header down to the first
blank key: rows below a blank row are not read and stop the run. A key listed
twice with the same values gives a warning; with different values it stops
the run. A trade whose asset class and sub-class have no row is rejected
(no supervisory factor for 'โฆ' (check sub-class)).
Screenshot: the supervisory-factor table

| Column | Header | Content |
|---|---|---|
| C | FX_Ccy |
Three-letter code, unique |
| D | Currency | Description, not read |
| E | Units of reporting ccy per 1 unit | Rate > 0 |
The template rates (EUR 1, USD 0.86, GBP 1.16, JPY 0.0058, CHF 1.07) are
illustrative: K-SACCR sources no market data. Add currencies directly
below the last row, with no blank row. The rate of the reporting currency
must be 1, or the run stops (Rate of the reporting currency must be 1 (found โฆ)). A missing or non-positive rate drops that currency with a
warning; a currency listed twice with different rates stops the run.
One row per legally enforceable netting set; header in row 6
(NettingSets_Header = C6), data from row 7. Amounts are netting-set
totals in the reporting currency, after haircuts; positive = held,
negative = posted. The template holds 17 netting sets.
| Col | Header | Allowed | Blank means | Engine behaviour |
|---|---|---|---|---|
| C | NettingSetID |
Unique text | โ | A row with data but no ID is ignored with an error. A repeated ID: row ignored and the netting set INVALID. TOTAL, TOTAL CRR, TOTAL BCBS are reserved |
| D | Counterparty | Text | โ | Copied to Results |
| E | Margined (Y/N) |
Y, N
|
N |
Y when a margin agreement exchanges variation margin |
| F | Client clearing role (N / CM / CLIENT) |
N, CM, CLIENT, CCP, MULTI (the header keeps its 1.0.1 text) |
N |
CM: 5-day MPOR floor in both regimes. CLIENT: 5 days under CRR; under BCBS the 10-day floor, a conservative interpretation. CCP (from 1.0.2): the bank's trade exposure, as clearing member, to a CCP; 10-day floor in both regimes; R and S required. MULTI (from 1.0.2): a multi-level client structure, declared so that the set is rejected (INVALID: multi-level client structure, not supported). Every CM, CLIENT and CCP set gets an INFO line on Checks with its role, floor and rule |
| G | Remargin frequency N (BD) | Whole number 0 to 10,000 | 1 (daily) | MPOR adds N โ 1. Below 1 is read as daily, with a warning |
| H | >5,000 trades or illiquid collateral (Y/N) |
Y, N
|
N |
Y: 20-day MPOR floor. A margined set with more than 5,000 trades and N gives a warning only |
| I | Margin disputes (Y/N) |
Y, N
|
N |
Y doubles the MPOR: 2 ร (F + N โ 1) in both regimes |
| J | MPOR override (BD) | Whole number > 0 | None | Used only if not below the computed MPOR; otherwise the floor applies, with a warning |
| K | Net VM held (+) / posted (โ) | Number | 0 | VM held on an unmargined set is rejected. VM posted on an unmargined set: BCBS keeps it in C as a one-way agreement (information line); CRR rejects it โ enter the set as margined |
| L | NICA | Number | 0 | Net independent collateral amount; leave out posted collateral that is segregated and bankruptcy remote (CRE52.17); C of the cap |
| M | Threshold TH | โฅ 0 | 0 | Margined RC floor TH + MTA โ NICA |
| N | MTA | โฅ 0 | 0 | As above |
| O | Alpha override | > 0 | Params Alpha
|
Any value other than 1.4 makes the run WHAT-IF
|
| P | Regime override (blank = Params) |
CRR, BCBS
|
Params Regime
|
Every trade of the set takes this regime |
| Q | Margin agreements (blank / MIXED / SHARED) | blank, MIXED, SHARED
|
One agreement, or none, covering only this set |
MIXED (several agreements, or margined and unmargined trades) and SHARED (one agreement over several sets) are declared so that the set is rejected (CRE52.74โ.75; CRR Art. 274(4), 275(3)) |
| R | QCCP (Y/N) (from 1.0.2) |
Y, N; role CCP only |
Required for CCP; must be blank for every other role |
Y if the CCP qualifies under the set's regime: under CRR authorised or recognised under EMIR (CRR Art. 4(1)(88)); under BCBS a QCCP as defined in CRE50.3. Your attestation. It sets the risk-weight rule stated on Checks, not the EAD |
| S | CCP retains VM, collateral not protected (Y/N) (from 1.0.2) |
Y, N; role CCP only |
Required for CCP; must be blank for every other role |
Y if the CCP retains variation margin and the bank's collateral is not protected against the CCP's insolvency: each trade then takes its own horizon (CRE54.8(3); CRR Art. 304(3)(d)). Needs Margined = Y
|
Any invalid field makes the netting set INVALID with its EAD withheld
(EAD withheld: N invalid netting-set field(s).). For role CCP, R or S
blank or not Y/N, or S = Y on an unmargined set, is such a field; so is
R or S filled for any other role (QCCP applies only to Client clearing role CCP - leave it blank (found โฆ).). The MPOR (margined sets only) is the
floor + (N โ 1), doubled for disputes, or the override when it is not lower;
the floor is 10 business days for N and CCP, 5 for CM and for CLIENT
under CRR, 10 for CLIENT under BCBS, and 20 with the large or illiquid
flag.
Trade exposures to a CCP (from 1.0.2, #112). Enter the clearing member's
trade exposure to a CCP as its own netting set with role CCP: its own
trades, and client trades it must reimburse on the CCP's default. Client
trades it need not reimburse have an exposure value of zero and are not
entered. The EAD stays in the regime's total; Checks states the risk-weight
rule (2% for a QCCP; for a non-qualifying CCP the standardised weight, to be
determined outside K-SACCR) and does not apply it. A CCP entered with role
N is calculated as a bilateral counterparty and cannot be detected.
Default-fund contributions cannot be entered (#400).
The regulation behind each column is on Margining and MPOR and Replacement Cost and Collateral.
One row per trade leg; header in row 4 (Trades_Header = C4), data from
row 5. The template holds 65 trade rows. An empty row is skipped; a row with
data but no Trade ID is rejected and makes its netting set INCOMPLETE.
| Col | Header | Allowed | Notes |
|---|---|---|---|
| C | TradeID |
Unique text | A repeated ID rejects the later trade |
| D | NettingSetID |
An ID on NettingSets | Unknown netting set: trade rejected |
| E | Asset class |
IR, FX, CR, EQ, CO, OT
|
OT (other risks) exists under CRR only; under BCBS it is rejected |
| F | Sub-class | See below | Asset class + _ + sub-class must be a key of the factor table valid in the regime |
| G | Risk factor / reference | Text without | or #
|
IR: currency (EUR) or EUR-INFL for inflation. FX: pair (EUR/USD or EURUSD). CR/EQ: entity or index name. CO: commodity type. OT: primary risk driver |
| H | Instrument |
Linear, Option, CDO
|
CDO needs attachment and detachment |
| I | Direction |
Long, Short
|
Sign of the supervisory delta. IR: Long = pay fixed. FX: long the first currency. CR: Long = protection bought. Options: Long = bought |
| J | Option type |
Call, Put
|
Options only |
| K | Nature |
Standard, Basis, Volatility
|
Basis (factor ร BasisFactor) and Volatility (ร VolatilityFactor) form their own hedging sets |
| L | Basis / vol hedging-set label | Text without | or #
|
Required for Basis and Volatility trades |
| M | Notional | > 0 | Unsigned; Direction gives the sign. EQ/CO: market price ร units |
| N | Notional CCY | A code of the FX table | Blank = reporting currency |
| O | MtM | Number (signed, positive = asset) | Required: enter 0 if the trade has no value |
| P | MtM CCY | A code of the FX table | Blank = notional currency |
| Q | Start date (S) | Date | IR/CR: start of the referenced period; blank = already started. Required for IR and credit options (swaption exercise date, earliest if Bermudan; cap or floor: start of the first period) |
| R | End date (E) | Date after S | IR/CR: end of the period; also sets the IR maturity bucket. Blank = M |
| S | Maturity date (M) | Date | Latest date the contract may be active (the contractual maturity, also for a settled-to-market trade). Blank = E, then T |
| T | Option expiry (T) | Date | Options: latest exercise date |
| U | Underlying price P | Number | Options; may be negative before the lambda shift |
| V | Strike K | Number | Options; may be negative before the lambda shift |
| W | Lambda shift | โฅ 0 | Added to both P and K in the delta; enter it when P or K can be zero or negative (CRE52.40 FAQ2). Under CRR, IR and commodity options use the RTS lambda instead; a different value entered here is ignored with a warning |
| X | Attachment A | 0 to < 1 | CDO tranches |
| Y | Detachment D | > A, โค 1 | CDO tranches; nth-to-default as A = (n โ 1)/k, D = n/k |
| Z | Economic trade ID | Text without | or #
|
Legs of one economic trade share it; blank = the row is a whole trade |
| AA | MtM leg (Y/N) |
Y, N
|
Y on the one leg carrying the economic trade's MtM; every other leg N with MtM 0. Blank on a whole trade |
| AB | Settlement type (N/STM) (from 1.0.2) |
N, STM
|
Blank or N: ordinary treatment. STM: settled-to-market, see below |
| AC | Next reset date (from 1.0.2) | Date |
STM only, and then required: the first reset after the reporting date, not after M. Blank for an ordinary trade |
| AD | Comment | Text, up to 500 characters | Not read by the engine. In AB up to 1.0.1; moved two columns right in 1.0.2 |
Sub-classes: IR, FX, OT blank. CR: AAAโฆCCC (Basel ratings) or
CQS1โฆCQS6 (CRR credit quality steps), IG_INDEX, SG_INDEX; an unrated
single name is entered as CQS3, or CQS5 where CRR Art. 128 applies. EQ:
SINGLE, INDEX. CO: ELECTRICITY, OIL_GAS, METALS, AGRICULTURAL,
OTHER, CLIMATIC (CRR only).
S, E, M and T are years from AsOfDate on the DaysPerYear basis; S is
floored at 0. A trade is rejected when M is on or before the reporting date,
an option has expired or expires after M, or an IR/credit trade has E not
after S. Interest-rate maturity buckets by E: under CRR up to and
including 1 year, over 1 to 5, over 5; under BCBS under 1 year, 1 to 5,
over 5 โ an end date exactly 1 year away is bucket 1 under CRR and bucket 2
under BCBS (#191). For a settled-to-market trade, M in the maturity factor is
the time to the next reset date, floored at 10 business days; S, E and T keep
their meaning.
STM declares that the contract settles its outstanding exposure and resets
its value to zero on set dates. Daily variation margin alone is not
STM: a contract margined daily but not settled stays an ordinary trade in
a margined netting set. The qualification is yours.
| Rule | Consequence of breaking it |
|---|---|
| The next reset date is after the reporting date (the MtM is the value after that day's settlement) and not after the maturity as entered; a reset on the maturity date is accepted | Trade rejected (next reset date must be after the reporting date โฆ, next reset date is after the maturity date); netting set INCOMPLETE
|
STM has a reset date; blank or N has none; no other code |
Trade rejected (a settled-to-market trade (STM) needs its next reset date, a next reset date is given but the settlement type is not STM โฆ, settlement type must be N, STM or blank (found โฆ)) |
Legs of one economic trade share the settlement type (blank and N alike) and the reset date |
Every leg of the economic trade is rejected (its legs have different settlement types โฆ, its legs have different next reset dates) |
An STM trade needs the unmargined treatment |
In a margined netting set the set is INVALID: STM requires unmargined treatment; mixed margined/unmargined netting sets are not supported โ a limitation of the engine, not a regulatory prohibition |
M stays the contractual maturity, so a settled option can expire after its
reset date. A trade whose 1.0.1 Maturity date (M) held the next reset date
of a settled-to-market contract is now entered with its contractual maturity
in M, STM and the reset date. With AB and AC blank every trade keeps its
1.0.1 result.
- The notional is one leg, in that leg's currency, which must be one of the pair: the foreign-currency leg, or when both are foreign the larger in reporting currency. Choosing the leg is yours; the engine checks the currency only.
- Both currencies of the pair need an FX rate.
- The hedging set is the pair in alphabetical order; a pair entered the other way round has its delta sign reversed. Linear FX trades may use either order.
- An FX option must be entered in market quote order: the base is the
currency listed first in
EUR GBP AUD NZD USD CAD CHF JPY; an unlisted currency comes after the listed ones (USD/SEK), two unlisted ones alphabetically (NOK/SEK).JPY/USDis rejected โ enterUSD/JPYwith price and strike in that quote (CRE52.59 FAQ1).
| Rule | Consequence of breaking it |
|---|---|
| Legs of one transaction share an Economic trade ID and the same netting set | Every leg of the economic trade is rejected |
Exactly one leg has MtM leg = Y and carries the MtM; every other leg N with MtM 0 |
As above |
| Legs in different asset classes map one transaction to several risk categories (CRR Art. 277(3); CRE52.28) | โ |
| Legs in the same asset class must all be options: an option combination (CRR Art. 274(6); CRE52.42(4), .43) | As above; a swap may not be split |
A whole trade (blank Economic trade ID) has MtM leg Y or blank |
Trade rejected |
The engine counts economic trades and legs separately (economic trades used โฆ of โฆ, legs โฆ of โฆ). It checks the declared structure only: the mapping of
risk drivers is yours. Digital options are not supported; option legs are
calculated as an ordinary combination (#120).
- Workbook Guide โ where each sheet sits
- Outputs and Statuses โ what the run makes of these inputs
- Troubleshooting โ common Checks messages
- Regulation: Replacement Cost and Collateral ยท Margining and MPOR ยท Potential Future Exposure ยท Basel vs CRR
- Home
๐ฆ K-SACCR ยท โ๏ธ EU CRR ยท Basel CRE52 ยท ๐งช Published CRE99 checks T01โT14; CRR implemented, not numerically validated ยท ๐ฆ Release 1.0.2 published 2026-10-23 ยท ๐งฎ No real portfolio data ยท โก 500,000 synthetic trade legs in under two minutes ยท Repository ยท Validation Approach ยท Open Items
๐ฆ K-SACCR
โ๏ธ Regulation
- ๐ SA-CCR Overview
- ๐ Regulatory Sources
- ๐งญ Regulatory Basis
- ๐ก๏ธ Replacement Cost and Collateral
- โฑ๏ธ Margining and MPOR
- ๐ Potential Future Exposure
- โ๏ธ Basel vs CRR
- ๐งฎ Worked Examples
๐งฎ Workbook
- ๐ Getting Started
- ๐บ๏ธ Workbook Guide
- ๐ฅ Inputs
- ๐ค Outputs and Statuses
- ๐ Reconciliation and Evidence
- โ๏ธ How It Works
- ๐งพ Worksheet Functions
- ๐งช Test Catalogue
- โ Validation Approach
- ๐ ๏ธ Troubleshooting
- ๐ง Open Items and Limitations
๐ Guide, not policy: the repository documents govern.