Bite Apps › SafeDORA › Validation rules
DORA register of information — validation rules and error codes
Every check a DORA register of information has to pass before it is accepted: the file name and xBRL-CSV package checks, empty and duplicate keys (805, 806), the 22 references between templates behind check 807, date, number and closed-list formats, mandatory fields, and the LEI and consistency rules — what each one means and how to fix it.
Find these problems before your authority does. SafeDORA runs every check on this page on your Excel register or xBRL-CSV package — in your browser, nothing is uploaded.
Open SafeDORA — free, in your browser- How a register is checked
- File name and package checks
- Keys: checks 805 and 806
- References between templates: check 807, R1–R22
- Dates, numbers and closed lists
- Mandatory fields
- LEI and EUID checks
- Consistency rules
- SafeDORA’s own hints
- Test files
How a register is checked
A register of information goes through several layers of checks after you upload it to your competent authority. The first layer is technical and is applied on reception: if the file name, the package structure, a filing indicator, a column code, a key field or a reference between two templates is wrong, the whole file is rejected and nothing is loaded. Files that pass are then checked for data types and allowed values, against the EBA validation rules, and against LEI and EUID registers; those findings come back as data-quality feedback, and the authority can ask for a corrected file.
When the ESAs tested the process in their 2024 dry run with 1,039 financial entities, only 6.5% of the registers passed every data-quality check, and missing mandatory information made up 86% of the data errors (ESAs dry run summary report, December 2024). The dry run was a voluntary, best-effort exercise, but the same kinds of mistakes are still the usual reason for a resubmission.
The tables below list every check SafeDORA runs, with the level it reports: Blocking for problems that make the ESAs reject the file, Error for values that fail a technical data check, and Warning for validation rules and plausibility checks. Check numbers such as 805 and 807 follow the ESAs’ numbering of technical checks; v…, e…, VR_… and DOR_… are identifiers of EBA validation rules; SD-… are SafeDORA’s own hints.
File name and package checks
These 25 checks look at the ZIP file itself, before any register data is read. They only apply to the xBRL-CSV package, not to an Excel workbook.
| Check | Level | What it means | How to fix it |
|---|---|---|---|
| 101 | Blocking | The report is not a .zip file. | Submit the xBRL-CSV package as one ZIP archive; do not send the Excel workbook or loose CSV files. |
| 103 | Blocking | A file inside the ZIP is damaged (CRC mismatch). | Build the ZIP again; do not edit files inside an archive with a tool that leaves it half-written. |
| 104 | Blocking | The file name contains characters other than letters, digits, -, _ and . | Remove spaces, brackets and “(1)” suffixes that browsers add to downloaded copies. |
| 105 | Blocking | The file name does not follow ReportSubject.CON|IND_Country_DORA010100_DORA_ReferenceDate_CreationTimestamp.zip. | Use the LEI of the reporting entity, CON or IND, the two-letter country, the reference date as yyyy-mm-dd and a 17-digit timestamp, e.g. 529900T8BM49AURSDO55.CON_DE_DORA010100_DORA_2026-12-31_20270302101500000.zip. |
| 106 | Blocking | The module code in the file name is not DORA010100. | Registers of information use framework code and module version DORA010100 and module DORA. |
| 109 | Blocking | The reference date in the file name is not a valid date. | Write it as yyyy-mm-dd, for example 2026-12-31. |
| 111 | Warning | The reference date is in the future. | A register with reference date 31 December can only be submitted after that date. SafeDORA shows this as a warning so that you can prepare the file early. |
| 115 | Blocking | The ZIP contains no CSV files. | The template files belong in the reports/ folder: b_01.01.csv … b_99.01.csv. |
| 701 | Blocking | report.json, parameters.csv or FilingIndicators.csv is missing or empty. | All three must be present in reports/. |
| 505 | Blocking / Error | report.json is not valid JSON, has the wrong documentType, or does not extend the DORA entry point. | It must declare https://xbrl.org/2021/xbrl-csv and extend http://www.eba.europa.eu/eu/fr/xbrl/crr/fws/dora/4.0/mod/dora.json. |
| 723 | Blocking | The header row of parameters.csv is not exactly name,value. | Keep the two-column layout and the lower-case header. |
| 714 | Blocking | entityID is missing from parameters.csv or does not match the file name. | It must be rs:<LEI>.CON or rs:<LEI>.IND with the same LEI and level as the file name. |
| 514 | Error | entityID does not look like rs:<LEI>.CON or rs:<LEI>.IND. | Check the rs: prefix, the 20-character LEI and the level suffix. |
| 320 | Error | refPeriod is missing, is not a date, or differs from the reference date in the file name. | Use the same yyyy-mm-dd date in both places. |
| 702 | Blocking | FilingIndicators.csv has the wrong header or a line with the wrong number of columns. | The header is templateID,reported, followed by one line per template. |
| 703 | Blocking | A template is declared twice in FilingIndicators.csv. | List each of the 15 templates once. |
| 704 | Blocking | A filing indicator is not a boolean. | Write true. |
| 705 | Blocking | A template has no reported value. | Write true for every template. |
| 510 | Error | A template code in FilingIndicators.csv is not a DORA template. | Only B_01.01 … B_07.01 and B_99.01 exist in this module. |
| 808 | Blocking | A template is missing from FilingIndicators.csv or is declared false. | All 15 templates must be declared true. A template with no data is still sent: a CSV file that contains only the header row. |
| 720 | Blocking | A CSV file in reports/ is not named like a DORA table. | Valid names are b_01.01.csv … b_99.01.csv, in lower case. |
| 809 | Blocking | A CSV file is malformed: an unclosed quote, or a line with more or fewer values than the header. | Values that contain a comma, a quote or a line break must be enclosed in double quotes, with quotes doubled inside. |
| 801 | Blocking | A column code in a CSV header is not defined for that template. | Use the codes of the data model (c0010, c0020 …) — see the field list. |
| 802 | Blocking | The same column appears twice in a CSV header. | Remove the duplicate column. |
| 724 | Blocking | No template contains any data row. | At least B_01.01 and B_01.02 have to be filled. |
Keys: checks 805 and 806
| Check | Level | What it means | How to fix it |
|---|---|---|---|
| 805 | Blocking | A key field is empty. | Every column that is part of a template’s primary key must be filled in every row. Where there is genuinely no value — for example the branch code in B_04.01.0040 for an entity that is not a branch — report “Not applicable” instead of leaving the cell blank. |
| 806 | Error | Two rows of a template have the same key. | The combination of the key columns must be unique. In B_02.02 the key has eight columns, so the same contract may appear several times as long as entity, provider, function, service type or one of the three countries differs. |
| 807 | Blocking | A value refers to a row that does not exist in another template. | Add the missing row to the template that is referred to, or correct the value so that both sides match character for character. The 22 references are listed below. |
The key of each template, from the EBA data model:
| Template | Name | Key columns |
|---|---|---|
| B_01.01 | Entity maintaining the register of information | B_01.01.0010 LEI of the entity maintaining the register of information |
| B_01.02 | List of entities within the scope of the register of information | B_01.02.0010 LEI of the entity |
| B_01.03 | List of branches | B_01.03.0010 Identification code of the branch B_01.03.0020 LEI of the financial entity head office of the branch |
| B_02.01 | Contractual arrangements – General Information | B_02.01.0010 Contractual arrangement reference number |
| B_02.02 | Contractual arrangements – Specific information | B_02.02.0010 Contractual arrangement reference number B_02.02.0020 LEI of the entity making use of the ICT service(s) B_02.02.0030 Identification code of the ICT third-party service provider B_02.02.0050 Function identifier B_02.02.0060 Type of ICT services B_02.02.0130 Country of provision of the ICT services B_02.02.0150 Location of the data at rest (storage) B_02.02.0160 Location of management of the data (processing) |
| B_02.03 | List of intra-group contractual arrangements | B_02.03.0010 Contractual arrangement reference number B_02.03.0020 Contractual arrangement linked to the contractual arrangement referred in RT.02.03.0010 |
| B_03.01 | Entities signing the Contractual arrangements for receiving ICT service(s) or on behalf of the entities making use of the ICT service(s) | B_03.01.0010 Contractual arrangement reference number B_03.01.0020 LEI of the entity signing the contractual arrangement |
| B_03.02 | ICT third-party service providers signing the Contractual arrangements for providing ICT service(s) | B_03.02.0010 Contractual arrangement reference number B_03.02.0020 Identification code of ICT third-party service provider |
| B_03.03 | Entities signing the Contractual arrangements for providing ICT service(s) to other entity within the scope of consolidation | B_03.03.0010 Contractual arrangement reference number B_03.03.0020 LEI of the entity providing ICT services |
| B_04.01 | Entities making use of the ICT services | B_04.01.0010 Contractual arrangement reference number B_04.01.0020 LEI of the entity making use of the ICT service(s) B_04.01.0040 Identification code of the branch |
| B_05.01 | ICT third-party service providers | B_05.01.0010 Identification code of ICT third-party service provider |
| B_05.02 | ICT service supply chains | B_05.02.0010 Contractual arrangement reference number B_05.02.0020 Type of ICT services B_05.02.0030 Identification code of the ICT third-party service provider B_05.02.0050 Rank B_05.02.0060 Identification code of the recipient of sub-contracted ICT services |
| B_06.01 | Functions identification | B_06.01.0010 Function Identifier B_06.01.0040 LEI of the financial entity |
| B_07.01 | Assessment of the ICT services | B_07.01.0010 Contractual arrangement reference number B_07.01.0020 Identification code of the ICT third-party service provider B_07.01.0040 Type of ICT services |
| B_99.01 | Definitions from Entities making use of the ICT Services | — (no key) |
References between templates: check 807
The data model defines 22 references (R1–R22). For each of them, the value — or combination of values — in the left column must exist as a key in the template on the right. One mistyped LEI or contract reference number is enough to break every reference to it, which is why a single typo can produce many 807 findings.
| Rule | This value … | … must exist in |
|---|---|---|
| R1 | B_03.03.0020 LEI of the entity providing ICT services | B_01.02 — List of entities within the scope of the register of information key: B_01.02.0010 |
| R2 | B_03.01.0020 LEI of the entity signing the contractual arrangement | B_01.02 — List of entities within the scope of the register of information key: B_01.02.0010 |
| R3 | B_01.03.0020 LEI of the financial entity head office of the branch | B_01.02 — List of entities within the scope of the register of information key: B_01.02.0010 |
| R4 | B_04.01.0020 LEI of the entity making use of the ICT service(s) | B_01.02 — List of entities within the scope of the register of information key: B_01.02.0010 |
| R5 | B_06.01.0040 LEI of the financial entity | B_01.02 — List of entities within the scope of the register of information key: B_01.02.0010 |
| R6 | B_01.02.0060 LEI of the direct parent undertaking of the entity | B_01.02 — List of entities within the scope of the register of information key: B_01.02.0010 |
| R7 | B_02.02.0050 Function identifier B_02.02.0020 LEI of the entity making use of the ICT service(s) | B_06.01 — Functions identification key: B_06.01.0010 + B_06.01.0040 |
| R8 | B_03.03.0010 Contractual arrangement reference number | B_02.01 — Contractual arrangements – General Information key: B_02.01.0010 |
| R9 | B_03.02.0010 Contractual arrangement reference number | B_02.01 — Contractual arrangements – General Information key: B_02.01.0010 |
| R10 | B_03.01.0010 Contractual arrangement reference number | B_02.01 — Contractual arrangements – General Information key: B_02.01.0010 |
| R11 | B_02.03.0010 Contractual arrangement reference number | B_02.01 — Contractual arrangements – General Information key: B_02.01.0010 |
| R12 | B_02.03.0020 Contractual arrangement linked to the contractual arrangement referred in RT.02.03.0010 | B_02.01 — Contractual arrangements – General Information key: B_02.01.0010 |
| R13 | B_02.01.0030 Overarching contractual arrangement reference number | B_02.01 — Contractual arrangements – General Information key: B_02.01.0010 |
| R14 | B_05.02.0010 Contractual arrangement reference number | B_02.01 — Contractual arrangements – General Information key: B_02.01.0010 |
| R15 | B_07.01.0010 Contractual arrangement reference number | B_02.01 — Contractual arrangements – General Information key: B_02.01.0010 |
| R16 | B_04.01.0010 Contractual arrangement reference number | B_02.01 — Contractual arrangements – General Information key: B_02.01.0010 |
| R17 | B_02.02.0010 Contractual arrangement reference number B_02.02.0030 Identification code of the ICT third-party service provider | B_03.02 — ICT third-party service providers signing the Contractual arrangements for providing ICT service(s) key: B_03.02.0010 + B_03.02.0020 |
| R18 | B_05.01.0110 Identification code of the ICT third-party service provider’s ultimate parent undertaking | B_05.01 — ICT third-party service providers key: B_05.01.0010 |
| R19 | B_03.02.0020 Identification code of ICT third-party service provider | B_05.01 — ICT third-party service providers key: B_05.01.0010 |
| R20 | B_05.02.0030 Identification code of the ICT third-party service provider | B_05.01 — ICT third-party service providers key: B_05.01.0010 |
| R21 | B_05.02.0060 Identification code of the recipient of sub-contracted ICT services | B_05.01 — ICT third-party service providers key: B_05.01.0010 |
| R22 | B_07.01.0020 Identification code of the ICT third-party service provider | B_05.01 — ICT third-party service providers key: B_05.01.0010 |
The ones that fail most often in practice: a function identifier used in B_02.02 that is missing from B_06.01 for the same entity (R7); a contract and provider pair in B_02.02 without a row in B_03.02 (R17); an entity LEI that is not listed in B_01.02 (R1–R6); and the ultimate parent of a provider in B_05.01.0110 that is not itself a row of B_05.01 (R18) — if a provider has no parent, report its own code there.
Dates, numbers and closed lists
SafeDORA accepts the usual Excel spellings when it reads a workbook (a real date cell, 31.12.2026, the label “Germany”) and writes the correct form into the package. When it checks a finished package, the values must already be in the exact form below.
| Check | Level | What it means | How to fix it |
|---|---|---|---|
| 503 | Error | A closed-list field contains a value that is not in the list. | In the CSV files these fields hold EBA codes such as eba_CO:x1 or eba_GA:DE, not the labels. The allowed values of every field are on the templates page. |
| 330 | Error | A date is not written yyyy-mm-dd. | Excel often exports dates as 31/12/2026 or as a serial number. Use 2026-12-31; for an open-ended contract or an entity still in scope, 9999-12-31. |
| 305 | Error | A monetary amount is not a plain number. | Report amounts in units (not thousands), without currency symbols or thousands separators, with . as the decimal separator. |
| 331 | Error | An integer field holds text or a fraction. | Notice periods, recovery time and recovery point objectives and the rank in the supply chain are whole numbers. |
| 332 | Error | A boolean field is not true or false. | Write true or false. |
| 333 | Error | A technical “Link” column is not true. | The Link columns of B_02.03, B_03.01 and B_03.03 are always true. |
Mandatory fields
Besides the key columns, the EBA existence rules require these fields in every row of a template. An empty one is reported under the rule shown.
| Template | Rule | Fields that must be filled |
|---|---|---|
| B_01.01 | e23677_e | B_01.01.0010 LEI of the entity maintaining the register of information B_01.01.0020 Name of the entity B_01.01.0030 Country of the entity B_01.01.0040 Type of entity B_01.01.0050 Competent Authority B_01.01.0060 Date of the reporting |
| B_01.02 | e23676_e | B_01.02.0020 Name of the entity B_01.02.0030 Country of the entity B_01.02.0040 Type of entity B_01.02.0050 Hierarchy of the entity within the group (where applicable) B_01.02.0060 LEI of the direct parent undertaking of the entity B_01.02.0070 Date of last update B_01.02.0080 Date of integration in the Register of information B_01.02.0090 Date of deletion in the Register of information |
| B_01.03 | e23675_e | B_01.03.0030 Name of the branch B_01.03.0040 Country of the branch |
| B_02.01 | e23792_e | B_02.01.0020 Type of contractual arrangement B_02.01.0040 Currency of the amount reported in RT.02.01.0050 B_02.01.0050 Annual expense or estimated cost of the contractual arrangement for the past year |
| B_02.02 | e23680_e | B_02.02.0040 Type of code to identify the ICT third-party service provider B_02.02.0070 Start date of the contractual arrangement B_02.02.0080 End date of the contractual arrangement |
| B_04.01 | e23683_e | B_04.01.0030 Nature of the entity making use of the ICT service(s) |
| B_05.01 | e23674_e | B_05.01.0020 Type of code to identify the ICT third-party service provider B_05.01.0050 Legal name of the ICT third-party service provider B_05.01.0060 Name of the ICT third-party service provider in Latin alphabet B_05.01.0070 Type of person of the ICT third-party service provider B_05.01.0080 Country of the ICT third-party service provider’s headquarters B_05.01.0110 Identification code of the ICT third-party service provider’s ultimate parent undertaking |
| B_06.01 | e23682_e | B_06.01.0020 Licenced activity B_06.01.0030 Function name B_06.01.0050 Criticality or importance assessment B_06.01.0070 Date of the last assessment of criticality or importance B_06.01.0080 Recovery time objective of the function B_06.01.0090 Recovery point objective of the function B_06.01.0100 Impact of discontinuing the function |
| B_07.01 | v8884_m | B_07.01.0050 Substitutability of the ICT third-party service provider B_07.01.0070 Date of the last audit on the ICT third-party service provider B_07.01.0080 Existence of an exit plan B_07.01.0100 Impact of discontinuing the ICT services B_07.01.0110 Are there alternative ICT third-party service providers identified? |
Two conventions from the ESAs’ FAQ avoid most of these findings: report 9999-12-31 as the end date of an open-ended contract (B_02.02.0080) and as the date of deletion of an entity that is still in scope (B_01.02.0090); and for the ultimate parent undertaking, report the entity’s own LEI as its parent (B_01.02.0060).
LEI and EUID checks
An LEI is 18 letters or digits followed by two check digits (ISO 17442, the same mod-97 scheme as an IBAN). A wrong check digit means a typing mistake. An EUID starts with the two-letter country code, then the register code, a dot and the registration number. SafeDORA checks the form and the check digits; it does not look identifiers up in the GLEIF database, which the ESAs do.
| Field | Identifier type | Rule |
|---|---|---|
| B_01.01.0010 LEI of the entity maintaining the register of information | Always an LEI | VR_2 |
| B_01.02.0010 LEI of the entity | Always an LEI | VR_12 |
| B_01.02.0060 LEI of the direct parent undertaking of the entity | Always an LEI | VR_23 |
| B_01.03.0020 LEI of the financial entity head office of the branch | Always an LEI | DOR_0006 |
| B_02.02.0020 LEI of the entity making use of the ICT service(s) | Always an LEI | DOR_0007 |
| B_03.01.0020 LEI of the entity signing the contractual arrangement | Always an LEI | DOR_0008 |
| B_03.03.0020 LEI of the entity providing ICT services | Always an LEI | DOR_0009 |
| B_04.01.0020 LEI of the entity making use of the ICT service(s) | Always an LEI | DOR_0010 |
| B_06.01.0040 LEI of the financial entity | Always an LEI | DOR_0011 |
| B_02.02.0030 Identification code of the ICT third-party service provider | LEI or EUID, according to B_02.02.0040 | DOR_0012 |
| B_03.02.0020 Identification code of ICT third-party service provider | LEI or EUID, according to B_03.02.0030 | DOR_0013 |
| B_05.01.0010 Identification code of ICT third-party service provider | LEI or EUID, according to B_05.01.0020 | VR_71 / VR_72 |
| B_05.01.0030 Additional identification code of ICT third-party service provider | LEI or EUID, according to B_05.01.0040 | VR_77 / VR_78 |
| B_05.01.0110 Identification code of the ICT third-party service provider’s ultimate parent undertaking | LEI or EUID, according to B_05.01.0120 | DOR_0015 |
| B_05.02.0030 Identification code of the ICT third-party service provider | LEI or EUID, according to B_05.02.0040 | DOR_0016 |
| B_05.02.0060 Identification code of the recipient of sub-contracted ICT services | LEI or EUID, according to B_05.02.0070 | DOR_0017 |
| B_07.01.0020 Identification code of the ICT third-party service provider | LEI or EUID, according to B_07.01.0030 | DOR_0018 |
The LEI in the file name is checked the same way (VR_2). Legal persons are identified by LEI or EUID; the other code types of the closed list are meant for individuals acting in a business capacity.
Consistency rules
| Rule | What is wrong |
|---|---|
| DOR_0067 | Template B_01.01 is empty. The entity maintaining the register must be reported in one row. |
| DOR_0072 | Template B_01.02 is empty. List at least the entity maintaining the register. |
| DOR_0117 | A function is assessed as critical or important in B_06.01.0050, but the reasons in B_06.01.0060 are missing. |
| v8803_m | Total assets are reported in B_01.02.0110 without a currency in B_01.02.0100. |
| v8804_m | The value of total assets (B_01.02.0110) is missing for a financial entity. |
| v8805_m | A subsequent or associated arrangement in B_02.01 does not name its overarching arrangement in B_02.01.0030. |
| v8825_m | A provider is “not substitutable” or “highly complex to substitute” in B_07.01.0050, but no reason is given in B_07.01.0060. |
| v22913_s | Total assets (B_01.02.0110) are negative. |
| v23716_s | The annual expense of a contractual arrangement (B_02.01.0050) is negative. |
SafeDORA’s own hints
These are not ESA or EBA rules. They flag things that are usually a mistake, or that differ from the ESAs’ sample package.
| Hint | Level | What it means |
|---|---|---|
| SD-XL1 | Blocking | A sheet looks like a template, but no header row with column codes or column names was found. |
| SD-TPL | Note | The workbook has no sheet for a template. It will be reported as an empty template. |
| SD-0101 | Warning | B_01.01 has more than one row. A register is maintained by one entity. |
| SD-LEN | Warning | A text is longer than the 255 characters the data model allows. |
| SD-DATE | Warning | The end date of a contractual arrangement is before its start date. |
| SD-RANK | Warning | For a direct provider (rank 1 in B_05.02) the recipient of sub-contracted services should be the provider itself. |
| SD-BR | Warning | An entity marked “not a branch” in B_04.01 has a branch code, or a branch code is not listed in B_01.03. |
| SD-ID | Warning | A legal person is identified by something other than an LEI or EUID, or a provider outside the EU is identified by an EUID. |
| SD-CCY | Warning | A total annual expense in B_05.01.0100 has no currency in B_05.01.0090. |
| SD-PAR | Warning | baseCurrency, decimalsMonetary or decimalsInteger is missing from parameters.csv. |
| SD-PKG1 | Warning | The files are not inside a top-level folder with the same name as the ZIP, the layout of the ESAs’ sample package. |
| SD-PKG2 | Blocking / Warning | META-INF/reportPackage.json is missing, is not valid JSON or has an unexpected documentType. |
| SD-PKG3 | Warning | A template is declared in FilingIndicators.csv, but its CSV file is missing. |
Test files
A filled-in Excel register and an xBRL-CSV package, each in a clean version and a version with documented mistakes (empty and duplicate keys, a broken reference, a false filing indicator, a wrong date format), are free to download from github.com/ekiedev/fix-iso20022-samples. Or open SafeDORA with its built-in sample register.
FAQ
What does DORA error 807 mean?
Check 807 is a broken reference between two templates of the register of information: a value such as an LEI, a contract reference number, a provider code or a function identifier does not exist as a key in the template it points to. The ESAs reject the whole file. Add the missing row or correct the value so both sides match exactly.
What does DORA error 805 mean?
Check 805 is an empty key field. Every column that belongs to a template’s primary key must be filled in every row; where there is no value, report “Not applicable” rather than leaving the cell blank. The ESAs reject the whole file.
Why was my whole register rejected for one mistake?
The checks applied on reception — file name, package structure, filing indicators, column codes, key fields and references between templates — are all-or-nothing: one failure rejects the file and none of it is loaded.
Do all filing indicators have to be true?
Yes. All 15 templates are declared true in FilingIndicators.csv. A template with no data is sent as a CSV file that contains only its header row.
How are dates and drop-down values written in the xBRL-CSV files?
Dates as yyyy-mm-dd (9999-12-31 for open-ended), drop-down values as EBA codes such as eba_CO:x1 or eba_GA:DE, amounts as plain numbers in units with a dot as decimal separator.
Can I run these checks without uploading the register?
Yes. SafeDORA runs them in your browser on an Excel register or an xBRL-CSV package; the file is never uploaded. Validation is free.
Last updated 2026-11-10. Something wrong or missing? Email support@biteapps.cc.