Validation and data quality: consistency checks, EBA rules, GLEIF LEI check

Validation and data quality: consistency checks, EBA rules, GLEIF LEI check

Outcome: you understand the app’s three levels of checks, run the EBA rule validation, read findings and statuses correctly and fix them; you also check LEIs online against the GLEIF register.

Overview: three levels of checks

LayerWhenWhat is checkedEffect
1. Consistency checks on saveAutomatically on every save in the editor and for every imported row.Keys present and unique, references exist, data types, valid codes, field lengths, only one record in B_01.01.Blocks the save; red message in the editor or row error in the import result.
2. EBA rule validation (validation center)On clicking Run validation; the counters in the cockpit are recalculated every time the cockpit is opened.15 rules V-001 to V-015 across the whole register: mandatory fields, LEI check digits, ISO codes, code lists, orphaned references, business plausibility (table below).Technically blocks nothing – the export stays possible but warns. Errors must be fixed before submission.
3. GLEIF LEI checkManually per LEI field via the GLEIF button in the editor.First format and check digits (ISO 17442), then an online lookup in the GLEIF register: does the LEI exist, what is the legal name, is the registration active?Informational only: the result is not stored, blocks nothing and is not part of “Run validation”.

Understanding statuses and badges

WhereDisplayMeaning
CockpitValidationNo findings / n errors n warningsCurrent state of the rule check (calculated when the cockpit opens). The large number is the number of errors.
Validation centerErrorsblocks submission / none“blocks submission” means: fix before reporting. Technically the export is not prevented.
Validation centerWarningsplease review / nonePlausibility hints that should be reviewed but do not have to be changed.
Findings table → SeverityError / WarningErrors always precede warnings; within one severity findings are sorted by template code.
Validation center without findingsAll checks passedAll 15 rules without error or warning. App hint: “The register can be exported as an xBRL-CSV package under "Import & export".”
Import & export / Cockpit → export historyno errors / n errorsValidation state at the time the package was generated (warnings are not counted here).
CockpitCompleteness per templateempty / in progress / completeShare of filled mandatory fields per template – the same basis as rule V-001.

Consistency checks on save

These checks run on every save in the editor (red message at the top of the editor, the record is not saved) and for every row of an Excel import (row error in the import result). The placeholders ‹…› stand for the concrete field names and values.

SituationMessage (as displayed)What to do
Key field empty (e.g. contract reference, identification code, LEI in B_01.01)Missing required value: "‹Field›" (key field of ‹Template›)Fill in the key field.
A record with the same key already existsA record with this key already exists in ‹Template›: {…}Edit the existing record instead of creating a new one, or choose a different key.
Reference to a non-existent record (in practice only via import)Reference not found: "‹Field›" = "‹value›" does not exist in ‹Template› (B_xx.xx). Please create the referenced record first.Create the referenced record first or correct the value.
Second record in Entity maintaining the register (B_01.01)Entity maintaining the register (B_01.01) may only contain a single record. Please edit the existing entry.Edit the existing entry.
Date not in the format YYYY-MM-DD (e.g. via import)Invalid date "‹value›" for "‹Field›" (format YYYY-MM-DD)Enter the date as YYYY-MM-DD.
Not a whole number (notice period, RTO/RPO, rank)"‹Field›" must be a whole numberEnter digits only.
Not a number (costs, total assets)"‹Field›" must be a numberEnter a number with a dot as decimal separator.
Text too long (key/reference fields 100 characters, term 200)"‹Field›" is too long (max. ‹N› characters)Shorten it.
Invalid code (in practice only via import)Invalid value "‹value›" for field "‹Field›" (‹table.field›)Use a code from the code list (The 15 EBA templates at a glance).
Changing a key value that is referencedKey "‹technical name›" cannot be changed: the value "‹value›" is still referenced in ‹Template› (B_xx.xx).Remove the references first or create a new record.
Deleting a referenced recordDelete blocked: "‹value›" is still referenced in ‹Template› (B_xx.xx). Please remove the dependent records first.Delete dependent records first (reverse entry order).
Record was deleted in the meantimeRecord #‹id› not found in ‹Template›Reload the list (click the template again).

Run the EBA rule validation

  1. Click Validation center (area Reporting). Before the first run it reads: “No check has been run yet. "Run validation" checks the entire register against the built-in EBA rules (incl. LEI check digits and referential integrity).”
  2. Click Run validation at the top right. During the check the button reads “Checking…”.
  3. Expected result: two tiles Errors and Warnings with count and badge, plus a table of all findings with the columns Severity, Rule, Template (code, with column where applicable, e.g. B_05.01 · c0050), Record (key values of the record) and Message.
  4. Per finding: Go to record opens the list of the affected template (not the individual record) – search there for the value from the Record column and edit the record. Jira issue creates a Jira issue (see Jira workflow: annual-report epic, finding issues and the “RoI Record” issue panel).
  5. After corrections click Run validation again – the table is a snapshot and does not refresh by itself.
  6. Done when “All checks passed” appears. Then Generate and download the xBRL-CSV package.
Figure 1: The validation center before the first run.
Figure 2: Result with the demo data: 3 errors (V-007, V-010, V-001) and 1 warning (V-011); per finding the actions “Go to record” and “Jira issue”.
Figure 3: After fixing all findings: “All checks passed”.

The 15 rules

RuleSeverityTemplate(s)What is checkedMessageFix
V-001ErrorallMandatory fields per ITS (marked * in the editor) are filled.Mandatory field "‹Field›" is emptyOpen the record, fill in the field.
V-002Errorall LEI fieldsLEI has 20 characters and valid check digits (ISO 17442)."‹value›" is not a valid LEI (format/check digits)Correct the LEI; check it with the GLEIF button.
V-003Errorall country/currency fieldsCountry code = 2 upper-case letters (ISO 3166-1 alpha-2), currency = 3 upper-case letters (ISO 4217)."‹value›" is not a valid country code … / … currency code (ISO 4217)Enter e.g. DE, EUR.
V-004Errorall dropdown fieldsValue is a valid code of the code list (occurs in practice only after imports)."‹value›" is not a valid code for "‹Field›"Open the record, pick a value from the list.
V-005Errorall referencesEvery reference points to an existing record (no orphaned reference).Orphaned reference: "‹value›" does not exist in ‹table›Create the referenced record or correct the reference.
V-006ErrorB_01.01Exactly one entity maintaining the register is recorded.The entity maintaining the register (B_01.01) has not been entered yetCreate B_01.01.
V-007ErrorB_02.02B_06.01, B_07.01If a contract detail supports a critical/important function (checkbox Supports a critical or important function in B_02.02 or the function in B_06.01 classified as “Critical or important”), an assessment for the same contract reference and provider must exist in B_07.01.Contract "‹ref›" supports a critical/important function — assessment in B_07.01 for provider "‹id›" is missingCreate a record in B_07.01 with this contract reference and provider.
V-008ErrorB_06.01Functions classified as “Critical or important” have a Date of last assessment.Function "‹name›" is classified as critical/important — date of last assessment is missingEnter the date.
V-009ErrorB_02.02End date does not precede the start date.End date (‹date›) precedes the start date (‹date›)Correct the dates.
V-010ErrorB_02.02If Is data stored? = yes, Location of data storage (country) is filled.Contract "‹ref›": data is stored, but the storage location (country) is missingEnter the storage location (country code).
V-011WarningB_05.01Every provider is used in at least one contract detail (B_02.02), supply chain (B_05.02), as signing provider (B_03.02) or as parent of another provider.Provider "‹name›" is not referenced by any contract or supply chainAdd a contract or delete the provider.
V-012WarningB_05.02B_02.02The rank-1 provider of a supply chain is also a direct contract provider in B_02.02 for that contract reference.Supply chain for "‹ref›": rank-1 provider "‹id›" is not the direct contract providerCheck rank or provider.
V-013ErrorB_05.02Rank is at least 1.Invalid rank ‹n› — ranks start at 1 (direct provider)Correct the rank.
V-014ErrorB_02.01A “Subsequent arrangement under a master arrangement” has a Reference of the master arrangement, and it refers to a “Master (overarching) arrangement”.Subsequent arrangement "‹ref›" without a reference to its master arrangement / "‹ref›" is not a master arrangement (type ≠ 2)Add the reference or correct the type of arrangement.
V-015Warningall amount fieldsAmounts (costs, total assets) are not negative."‹Field›" is negative (‹value›)Check the value.

Check an LEI online against GLEIF

  1. Open the record in the editor (Edit or + New).
  2. Enter the LEI in the LEI field (20 characters; lower case is converted automatically) and click the GLEIF button to the right of the field.
  3. Expected result: after a moment a badge with the result appears below the field (table below). Green = the LEI exists and its registration is active; yellow = anything else.
  4. The result is not stored. Save the record as usual with Save – a yellow result does not prevent saving either.
Figure 4: Result for a demo LEI: formally valid but not registered with GLEIF.
Figure 5: Result for an LEI that is active at GLEIF (example with a public LEI): green badge with the registered name.

Results

BadgeMeaningWhat to do
LEI aktiv und gültig · ‹Name›The LEI is registered with GLEIF and its registration has status ISSUED (active). The legal name held at GLEIF is shown.Compare the name with your record.
Formal ungültiger LEI (Prüfziffern)Format or check digits are wrong – no online lookup was performed.Correct the typo (20 characters, last two digits = check digits).
LEI ist bei GLEIF nicht registriertFormally correct but unknown to GLEIF (the case for all demo LEIs).Ask the provider for the correct LEI.
LEI-Registrierungsstatus: ‹STATUS› · ‹Name›The LEI exists but its registration is not active (e.g. LAPSED = not renewed).Clarify with the provider; the app blocks nothing.
GLEIF-API antwortete mit Status ‹n›The GLEIF register answered with an error (e.g. 429 too many requests, 5xx outage).Try again later.
  • The result texts are in German in both UI languages (known limitation of the app).
  • The check is informational only: it is not part of Run validation (which checks only format/check digits, rule V-002), and there is no bulk check of all LEIs.
  • Only the 20-character LEI is sent to api.gleif.org; the site administrator must have consented to this connection at installation.
  • There is no EUID check (business register/BRIS).

Rendered from the app’s own interface with the built-in demo data (“Nordpay”, a fictitious payment institution); the Jira frame around it is not shown.

Documentation baseline: app version 2.0.0 · 2026-08-25