v1.0.0 to v2.0.0

171 added, 27 removed. Audit A to A.

---
name: eu-benchmark-regulation-for-strategies-referencing-indices
- description: Quantitative European regulatory compliance engine for auditing EU Benchmark
- Regulation (EU BMR - Regulation 2016/1011) authorization, ESMA register status,
- and Article 28(2) robust written fallback provisions.
+ description: Scope-first EU Benchmarks Regulation engine for strategies referencing
+ indices, deciding whether Regulation (EU) 2016/1011 as amended by Regulation (EU)
+ 2025/914 binds at all before testing Article 29 register and public-notice
+ prohibitions and the Article 28(2) written-plan limbs.
domain: Regulatory Compliance & Governance
subdomain: European Index & Benchmark Regulation (EU BMR)
tags:
- eu-bmr
- esma-register
- benchmark-regulation
- article-28-2-fallback
+ - article-29-use-restriction
+ - significant-benchmark
- index-referencing
- - euribor-estren
- - mifid-ii
brokers_frameworks:
- - ESMA BMR Register
- Regulation (EU) 2016/1011
+ - Regulation (EU) 2025/914
+ - ESMA BMR Register
+ - Commission Implementing Regulation (EU) 2016/1368
- Python Dataclasses
- version: "1.0.0"
+ version: "2.0.0"
author: algo-trading-skills-contributors
license: Apache-2.0
---
## When to Use
- Use this skill in European quantitative fund operations, index-referencing trading strategies, structured product desks, and algorithmic execution engines. Under **EU Benchmark Regulation (EU BMR - Regulation (EU) 2016/1011)**, EU supervised entities may only use financial benchmarks (indices, interest rate benchmarks, commodity indices) if the administrator is listed on the official **ESMA BMR Register**. Furthermore, **BMR Article 28(2)** mandates that firms maintain robust written plans detailing alternative fallback benchmarks in case of benchmark material change or cessation.
+ Use this skill when an EU **supervised entity** — a UCITS, an AIFM, an investment
+ firm, a credit institution, a market operator — references an index in a way the
+ EU Benchmarks Regulation (Regulation (EU) 2016/1011, "BMR") actually regulates:
+ issuing an index-linked instrument, determining an amount payable by reference to
+ an index, or tracking an index to measure a fund's performance, define its asset
+ allocation, or compute performance fees.
+ Its first job is to decide whether the BMR binds at all, because since
+ **1 January 2026** it usually does not. Regulation (EU) 2025/914 cut Article 2(1)
+ scope down to critical benchmarks, significant benchmarks, EU Climate Transition
+ and Paris-aligned Benchmarks, and commodity benchmarks subject to Annex II.
+ Everything else — every non-significant index, every third-country index outside
+ those categories — is out of scope, and its administrator's absence from the ESMA
+ register is no longer a reason not to use it. A tool that still tests "is this on
+ the register?" first will block references an EU fund is entitled to make.
+
+ Once the engine concludes the obligations do bind, it applies Article 29 (may this
+ reference be added, and must an existing one be replaced?) and each limb of
+ Article 28(2) (written plan, nominated alternative, contractual fallbacks).
+
+ ## When NOT to Use
+
+ - **As a scope determination.** The engine consumes your classification of a
+ benchmark as critical / significant / climate / Annex II commodity; it does not
+ derive it. Critical benchmarks come from the Commission implementing act and
+ CTB/PAB labelling from the benchmark statement, but there is **no public list of
+ significant benchmarks** that are not the object of a warning notice. That gap
+ is real and unresolved — see `references/standards.md`.
+ - **As a register client.** It never contacts ESMA. `administrator_on_esma_register`
+ and `register_status_verified_on` are assertions about a check a human made.
+ - **For proprietary trading that is not Article 3(1)(7) "use".** Trading an index
+ future, swap or ETF on your own book, or using an index as a research, hedging or
+ risk input, is not "use of a benchmark". Modelling it as use manufactures
+ obligations that do not exist.
+ - **For non-supervised entities.** An unregulated proprietary trading firm or a
+ family office is outside Article 3(1)(17) and has no Article 28(2) or 29
+ obligation, whatever indices it trades.
+ - **For UK BMR.** The UK onshored regime diverged after Brexit and did not take the
+ 2025/914 scope cut. A UK supervised entity's Article 29 test is against the FCA's
+ UK Benchmarks Register, not ESMA's. This skill models the EU regime only.
+ - **As spread-adjustment maths.** The engine records that a statutory replacement
+ exists under Articles 23b/23c; it computes no spread. Only one EU statutory
+ spread is fixed in law (EONIA to €STR, 8.5 bps). Contractual EURIBOR fallbacks
+ use industry-published spread adjustments that this skill does not reproduce.
+
## Prerequisites
- - Referenced benchmark details (`benchmark_name`, `administrator_name`, `is_esma_registered`: True/False, `category`: `'CRITICAL'`, `'SIGNIFICANT'`).
- - Strategy fallback provisions (`fallback_benchmark_name`, `has_written_fallback_plan`: True/False).
+ - The entity's Article 3(1)(17) classification (`entity_type`), and the Article
+ 3(1)(7) characterisation of the activity (`use_type`). Get these wrong and every
+ downstream answer is wrong in one direction or the other.
+ - Per benchmark: `category` against the amended Article 2(1), `administrator_name`,
+ `administrator_on_esma_register`, and `register_status_verified_on` — the date
+ the register was actually consulted, not the date the file was written.
+ - Any Article 2(2) exemption you have concluded applies (central bank, CCP
+ settlement price, single reference price, designated spot FX, …).
+ - For a significant benchmark: the publication date of any Article 24a(6) public
+ notice, and the end date of any derogation granted against it.
+ - Per usage: whether this is a **new** reference (Article 29(1) prohibition) or an
+ **existing** one (Article 29(1b) replacement duty), plus the three Article 28(2)
+ booleans — plan exists, alternative nominated, plan reflected in contractual
+ fallback provisions.
## Workflow
- 1. **ESMA BMR Register Authorization Verification**:
- - Audit whether `administrator_name` is listed on the ESMA Public Register of Administrators.
- - If `is_esma_registered` is False $\implies$ Flag `UNAUTHORIZED_BENCHMARK_VIOLATION`.
- 2. **Article 28(2) Fallback Provision Audit**:
- - Audit presence of documented fallback benchmark and written plan (`has_written_fallback_plan`).
- - If False $\implies$ Flag `MISSING_FALLBACK_PLAN_VIOLATION`.
- 3. **Cessation Trigger & Rate Switch Simulation**:
- - Simulate benchmark cessation event and verify fallback rate substitution (e.g. EURIBOR $\to$ €STR + Spread Adjustment).
- 4. **Audit Report Generation**: Output structured `EuBmrAuditReport`.
+ 1. **Gate on the Entity Before Anything Else**: If `entity_type` is
+ `NON_SUPERVISED`, stop. The engine returns `OUT_OF_SCOPE_NOT_SUPERVISED_ENTITY`
+ with no findings. Articles 28(2) and 29 create obligations for supervised
+ entities; they do not regulate indices in the abstract.
+ 2. **Gate on the Use**: If the activity is not one of the five Article 3(1)(7)
+ uses, pass `USE_NOT_A_BMR_USE` and stop. An index-arbitrage book trading listed
+ futures is the common case here, and the honest answer is that BMR does not
+ reach it.
+ 3. **Gate on Article 2(2) Exemptions**: An exempt benchmark leaves BMR scope
+ entirely. €STR is the one to get right: the ECB is an exempt central bank, so
+ €STR carries no register requirement at all. The engine still raises an
+ **advisory** when no written plan exists, because ESMA's Q&A expects supervised
+ entities to maintain Article 28(2) plans for central-bank benchmarks anyway.
+ 4. **Gate on Article 2(1) Scope, Against the Assessment Date**: On or after
+ 1 January 2026 an `OUT_OF_SCOPE` benchmark returns
+ `OUT_OF_SCOPE_BENCHMARK`. Before that date the engine applies the wider
+ pre-amendment scope, so a 2024 record is judged by 2024's rules. Always pass
+ `assessment_date` explicitly; the default of today silently re-dates history.
+ 5. **Apply Article 29 — and Distinguish Adding From Holding**: A new reference to a
+ critical, CTB/PAB or Annex II commodity benchmark requires the administrator on
+ the ESMA register. A significant benchmark does **not** carry that register
+ gate: new references to it are barred only while it is the object of an Article
+ 24a(6) public notice. Continuing to hold an existing reference is not itself
+ prohibited by Article 29(1).
+ 6. **Run the Article 29(1b) Clock on Existing References**: When a public notice
+ lands on a benchmark already in use, the entity has six months from publication
+ to replace it, or must publish a reasoned statement on its website explaining
+ why it cannot. The engine returns `ACTION_REQUIRED` with the deadline until it
+ passes, then `VIOLATION`. A derogation granted to avoid market disruption
+ suspends both branches while it runs.
+ 7. **Audit All Three Article 28(2) Limbs, Not Just the First**: A missing plan and
+ a plan that never reached the contractual fallback provisions are separate
+ violations. A plan that nominates no alternative is an **advisory**, not a
+ violation — Article 28(2) requires an alternative only "where feasible and
+ appropriate", so record why it is not rather than fabricating one.
+ 8. **Retain the Report**: Persist each `EuBmrAuditReport` with its
+ `assessment_date`, `scope_basis` and full `findings` list. The scope conclusion
+ is the part a competent authority will question, and it is only defensible if
+ the date and basis are on the record.
> Full procedure: see `references/workflows.md`.
> Standards reference: see `references/standards.md`.
> Printable pre-flight checklist: see `assets/checklist.md`.
## Common Pitfalls
- - **Referencing Un-Authorized Third-Country Indices**: Using custom or third-country index benchmarks not endorsed or recognized on the ESMA BMR register.
- - **Omitting Article 28(2) Fallback Provisions**: Referencing major benchmarks (e.g. STOXX 50, EURIBOR) without documented written plans for benchmark cessation.
- - **Failing to Account for Spread Adjustments**: Switching to fallback risk-free rates (€STR, SOFR) during benchmark cessation without calculating ISDA-style credit spread adjustments.
+ - **Applying the Pre-2026 "Everything Must Be On The Register" Rule**: This is the
+ defect this version exists to fix. Before 2025/914 applied, Article 29(1) barred
+ a supervised entity from using any benchmark whose administrator was not
+ registered. Since 1 January 2026 that test only bites on four categories, so
+ running it unconditionally blocks perfectly lawful references to non-significant
+ and third-country indices.
+ - **Treating a Register Miss as a Scope Answer**: Administrators on the register at
+ end-2025 keep their status until 30 September 2026 and out-of-scope ones are
+ removed from 1 October 2026. During that window the register is mid-re-cut:
+ presence proves little about scope, and coming absence proves nothing about
+ legality. Re-verify rather than caching a 2025 check.
+ - **Calling Index Trading "Use of a Benchmark"**: Article 3(1)(7) is a closed list.
+ Issuance, determining amounts payable, being a party to a *financial contract*
+ (which the BMR defines narrowly as a consumer or mortgage credit agreement),
+ providing a borrowing rate, and measuring fund performance. Executing an
+ index-future hedge is none of them.
+ - **Treating €STR as a Critical Benchmark Needing Registration**: It is neither.
+ The critical-benchmark implementing act lists EURIBOR, EONIA, STIBOR, WIBOR and
+ NIBOR; €STR has never been on it, and its administrator — the ECB — is exempt
+ under Article 2(2)(a) whatever the list says.
+ - **Blocking an Existing Position Because Article 29 Blocks New References**:
+ Article 29(1) prohibits *adding* a reference. Forcing an immediate unwind of an
+ existing one confuses the addition prohibition with the Article 29(1b)
+ replacement duty, which has a six-month window and an explain-instead escape.
+ - **Reporting the First Violation and Stopping**: A benchmark can fail the register
+ gate *and* have no contractual fallback provisions. An audit that short-circuits
+ understates the remediation and gets re-opened on the second pass.
+ - **Letting a Typo Become a Regulatory Finding**: A benchmark id that is not in the
+ registry is a data error. The engine raises `BmrConfigurationError` rather than
+ reporting a violation, because "unauthorised benchmark" against a misspelled id
+ is a false positive that costs real remediation effort.
+ - **Assuming the UK Register Mirrors ESMA's**: A dual-regulated group needs both
+ tests. The UK did not adopt the 2025/914 scope cut, so an index that dropped out
+ of EU scope on 1 January 2026 can still be fully in scope for a UK entity.
## Verification
- - Instantiate `EuBmrComplianceEngine`. Register `EURO STOXX 50` (Administrator = STOXX Ltd, ESMA Registered = True, Fallback = `STOXX 600`, Fallback Plan = True). Audit strategy referencing EURO STOXX 50. Verify engine returns `BMR_COMPLIANT`. Submit strategy referencing `CUSTOM_INDEX` (ESMA Registered = False). Verify engine flags `UNAUTHORIZED_BENCHMARK_VIOLATION`.
- - Run `python scripts/test_eu_benchmark_regulation_for_strategies_referencing_indices.py`.
+ - Audit a UCITS tracking `EURO STOXX 50` (significant, STOXX Ltd on the register,
+ all three Article 28(2) limbs satisfied) on 2026-08-24 and confirm
+ `BMR_COMPLIANT` with an empty `findings` list.
+ - Audit the same UCITS against an unregistered non-significant proprietary index
+ and confirm `OUT_OF_SCOPE_BENCHMARK`, `in_scope is False`, and no violation — the
+ pre-2.0 engine returned `UNAUTHORIZED_BENCHMARK_VIOLATION` here.
+ - Re-run that audit with `assessment_date=date(2025, 6, 30)` and confirm it *is* in
+ scope and *does* return the register prohibition; check the boundary flips
+ between 2025-12-31 and 2026-01-01.
+ - Confirm an unregistered administrator blocks a new CTB reference but not an
+ existing one, and that a significant benchmark with an unregistered administrator
+ and no public notice is compliant.
+ - Publish a notice on 2026-03-15 for a benchmark already in use: confirm
+ `ACTION_REQUIRED` with `replacement_deadline == date(2026, 9, 15)`, still
+ `ACTION_REQUIRED` on that date, and `VIOLATION` one day later.
+ - Set `has_written_fallback_plan=True` but
+ `fallback_reflected_in_contractual_terms=False` and confirm a violation; drop
+ only `designates_alternative_benchmark` and confirm an advisory instead.
+ - Reference a benchmark id that is not registered, an entity type of
+ `"HEDGE_FUND"`, a category of `"Significant"`, or a duplicate benchmark id, and
+ confirm each raises `BmrConfigurationError`.
+ - Run `python -m unittest discover -s skills/eu-benchmark-regulation-for-strategies-referencing-indices/scripts`
+ and confirm a 100% pass rate.
## Related Skills
- - `regulatory-custody-requirements-by-jurisdiction`
- - `best-execution-record-keeping-global`
- ---
+ - `mifid-ii-algo-trading-compliance-eu`
+ - `eu-market-abuse-regulation-mar-surveillance`
+ - `esma-double-volume-cap-mechanism`
+ - `benchmark-selection-for-strategy-evaluation`
+ - `point-in-time-index-constituent-tracking`
+ - `regulatory-change-monitoring-service-integration`
+ - `cross-jurisdiction-regulatory-conflict-resolution`