Skip to content
Daniele Penza edited this page Oct 27, 2026 · 5 revisions

๐Ÿ“ฅ Inputs

Section Params NettingSets Trades

๐Ÿ“Œ 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.


๐Ÿงญ General input rules

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)

โš™๏ธ Params

Run parameters

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.

Regulatory or what-if

Every run is classified against the built-in parameter set CRE52-CRR-2026-10-09 (#41):

  • REGULATORY when the Params values, every row of the factor table and every alpha override equal that set;
  • WHAT-IF otherwise, with one Checks warning per difference, starting What-if: (for example What-if: Alpha is 1.2 (regulatory 1.4). or What-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).

Supervisory-factor table (SF_Table, C28:K54)

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

Params sheet, supervisory-factor table: per SF_Key the asset class, category, supervisory factor, correlation, supervisory option volatility, commodity hedging set, the regimes it applies to and its CRE52 or CRR reference; the climatic commodity and other-risk rows apply under CRR only

FX table (FX_Table, C57:E62)

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.


๐Ÿงพ NettingSets

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.


๐Ÿ“ˆ Trades

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).

Dates and years

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.

Settled-to-market trades (from 1.0.2, #360)

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.

FX conventions

  • 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/USD is rejected โ€” enter USD/JPY with price and strike in that quote (CRE52.59 FAQ1).

Economic trades and legs (#38)

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).


๐Ÿ”— Related

๐Ÿฆ K-SACCR

โš–๏ธ Regulation

๐Ÿงฎ Workbook


๐Ÿ“Œ Guide, not policy: the repository documents govern.

Clone this wiki locally