arelle-release 2.37.46__py3-none-any.whl → 2.38.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- arelle/BetaFeatures.py +0 -21
- arelle/Cntlr.py +15 -8
- arelle/CntlrCmdLine.py +121 -56
- arelle/CntlrWinMain.py +143 -70
- arelle/DialogFind.py +1 -1
- arelle/DialogPluginManager.py +6 -4
- arelle/DisclosureSystem.py +7 -0
- arelle/ErrorManager.py +21 -6
- arelle/FileSource.py +11 -4
- arelle/FunctionIxt.py +16 -11
- arelle/HtmlUtil.py +5 -4
- arelle/LeiUtil.py +63 -43
- arelle/ModelDocument.py +20 -15
- arelle/ModelDtsObject.py +8 -0
- arelle/ModelInstanceObject.py +1 -1
- arelle/ModelObject.py +16 -18
- arelle/ModelObjectFactory.py +35 -17
- arelle/ModelXbrl.py +28 -11
- arelle/PluginManager.py +130 -105
- arelle/RuntimeOptions.py +1 -0
- arelle/UrlUtil.py +14 -0
- arelle/Validate.py +17 -12
- arelle/ValidateDuplicateFacts.py +3 -1
- arelle/ValidateFileSource.py +38 -0
- arelle/ValidateFilingText.py +3 -3
- arelle/ValidateXbrl.py +5 -2
- arelle/ValidateXbrlCalcs.py +210 -186
- arelle/ValidateXbrlDTS.py +1 -1
- arelle/ViewFile.py +1 -0
- arelle/ViewFileFactTable.py +2 -2
- arelle/ViewWinDTS.py +4 -1
- arelle/WebCache.py +28 -24
- arelle/XbrlConst.py +22 -0
- arelle/XmlUtil.py +16 -21
- arelle/XmlValidate.py +6 -9
- arelle/_version.py +16 -3
- arelle/api/Session.py +11 -2
- arelle/config/disclosuresystems.xsd +2 -0
- arelle/config/rosettaEntitlements.plist +8 -0
- arelle/conformance/CSVTestcaseLoader.py +1 -1
- arelle/formula/XPathContext.py +3 -3
- arelle/logging/formatters/LogFormatter.py +3 -1
- arelle/packages/report/ReportPackage.py +26 -13
- arelle/packages/report/ReportPackageConst.py +0 -1
- arelle/plugin/inlineXbrlDocumentSet.py +19 -5
- arelle/plugin/validate/DBA/DisclosureSystems.py +19 -1
- arelle/plugin/validate/DBA/PluginValidationDataExtension.py +2 -4
- arelle/plugin/validate/DBA/ValidationPluginExtension.py +2 -1
- arelle/plugin/validate/DBA/resources/config.xml +5 -0
- arelle/plugin/validate/DBA/rules/__init__.py +2 -2
- arelle/plugin/validate/DBA/rules/fr.py +19 -2
- arelle/plugin/validate/DBA/rules/tc.py +2 -0
- arelle/plugin/validate/DBA/rules/th.py +6 -0
- arelle/plugin/validate/DBA/rules/tm.py +18 -5
- arelle/plugin/validate/DBA/rules/tr.py +11 -5
- arelle/plugin/validate/EDINET/Constants.py +193 -9
- arelle/plugin/validate/EDINET/ContextRequirement.py +58 -0
- arelle/plugin/validate/EDINET/ControllerPluginData.py +220 -1
- arelle/plugin/validate/EDINET/CoverItemRequirements.py +42 -0
- arelle/plugin/validate/EDINET/DeiRequirements.py +118 -0
- arelle/plugin/validate/EDINET/FilingFormat.py +275 -0
- arelle/plugin/validate/EDINET/FormType.py +134 -0
- arelle/plugin/validate/EDINET/ManifestInstance.py +72 -5
- arelle/plugin/validate/EDINET/NamespaceConfig.py +50 -0
- arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +493 -132
- arelle/plugin/validate/EDINET/{InstanceType.py → ReportFolderType.py} +72 -15
- arelle/plugin/validate/EDINET/Statement.py +139 -0
- arelle/plugin/validate/EDINET/TableOfContentsBuilder.py +595 -0
- arelle/plugin/validate/EDINET/UploadContents.py +48 -0
- arelle/plugin/validate/EDINET/ValidationPluginExtension.py +20 -2
- arelle/plugin/validate/EDINET/__init__.py +31 -6
- arelle/plugin/validate/EDINET/resources/config.xml +8 -1
- arelle/plugin/validate/EDINET/resources/cover-item-requirements.json +793 -0
- arelle/plugin/validate/EDINET/resources/dei-requirements.csv +27 -0
- arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml +2 -0
- arelle/plugin/validate/EDINET/rules/contexts.py +375 -14
- arelle/plugin/validate/EDINET/rules/edinet.py +1934 -45
- arelle/plugin/validate/EDINET/rules/frta.py +122 -3
- arelle/plugin/validate/EDINET/rules/gfm.py +1907 -11
- arelle/plugin/validate/EDINET/rules/upload.py +989 -141
- arelle/plugin/validate/ESEF/Const.py +3 -1
- arelle/plugin/validate/ESEF/ESEF_2021/DTS.py +5 -0
- arelle/plugin/validate/ESEF/ESEF_2021/Image.py +2 -2
- arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +23 -20
- arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +47 -14
- arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +100 -25
- arelle/plugin/validate/ESEF/__init__.py +20 -6
- arelle/plugin/validate/ESEF/resources/authority-validations.json +76 -9
- arelle/plugin/validate/ESEF/resources/config.xml +20 -0
- arelle/plugin/validate/NL/DisclosureSystems.py +22 -0
- arelle/plugin/validate/NL/PluginValidationDataExtension.py +27 -9
- arelle/plugin/validate/NL/ValidationPluginExtension.py +51 -7
- arelle/plugin/validate/NL/resources/config.xml +18 -0
- arelle/plugin/validate/NL/rules/br_kvk.py +17 -61
- arelle/plugin/validate/NL/rules/fg_nl.py +7 -38
- arelle/plugin/validate/NL/rules/fr_kvk.py +7 -42
- arelle/plugin/validate/NL/rules/fr_nl.py +31 -147
- arelle/plugin/validate/NL/rules/nl_kvk.py +142 -28
- arelle/plugin/validate/ROS/PluginValidationDataExtension.py +2 -0
- arelle/plugin/validate/ROS/ValidationPluginExtension.py +4 -1
- arelle/plugin/validate/ROS/rules/ros.py +41 -9
- arelle/plugin/validate/UK/ValidateUK.py +130 -66
- arelle/plugin/validate/UK/__init__.py +89 -103
- arelle/utils/EntryPointDetection.py +79 -13
- arelle/utils/PluginHooks.py +125 -0
- arelle/utils/validate/ESEFImage.py +6 -6
- arelle/utils/validate/Validation.py +18 -0
- arelle/utils/validate/ValidationPlugin.py +76 -11
- arelle/utils/validate/ValidationUtil.py +35 -3
- {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/METADATA +30 -20
- {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/RECORD +115 -191
- {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/licenses/LICENSE.md +0 -3
- arelle/archive/CustomLogger.py +0 -43
- arelle/archive/LoadEFMvalidate.py +0 -32
- arelle/archive/LoadSavePreLbCsv.py +0 -26
- arelle/archive/LoadValidate.cs +0 -31
- arelle/archive/LoadValidate.py +0 -36
- arelle/archive/LoadValidateCmdLine.java +0 -69
- arelle/archive/LoadValidatePostedZip.java +0 -57
- arelle/archive/LoadValidateWebService.java +0 -34
- arelle/archive/SaveTableToExelle.py +0 -140
- arelle/archive/TR3toTR4.py +0 -88
- arelle/archive/plugin/ESEF_2022/__init__.py +0 -47
- arelle/archive/plugin/bigInstance.py +0 -394
- arelle/archive/plugin/cmdWebServerExtension.py +0 -43
- arelle/archive/plugin/crashTest.py +0 -38
- arelle/archive/plugin/functionsXmlCreation.py +0 -106
- arelle/archive/plugin/hello_i18n.pot +0 -26
- arelle/archive/plugin/hello_i18n.py +0 -32
- arelle/archive/plugin/importTestChild1.py +0 -21
- arelle/archive/plugin/importTestChild2.py +0 -22
- arelle/archive/plugin/importTestGrandchild1.py +0 -21
- arelle/archive/plugin/importTestGrandchild2.py +0 -21
- arelle/archive/plugin/importTestImported1.py +0 -23
- arelle/archive/plugin/importTestImported11.py +0 -22
- arelle/archive/plugin/importTestParent.py +0 -48
- arelle/archive/plugin/instanceInfo.py +0 -306
- arelle/archive/plugin/loadFromOIM-2018.py +0 -1282
- arelle/archive/plugin/locale/fr/LC_MESSAGES/hello_i18n.po +0 -25
- arelle/archive/plugin/objectmaker.py +0 -285
- arelle/archive/plugin/packagedImportTest/__init__.py +0 -47
- arelle/archive/plugin/packagedImportTest/importTestChild1.py +0 -21
- arelle/archive/plugin/packagedImportTest/importTestChild2.py +0 -22
- arelle/archive/plugin/packagedImportTest/importTestGrandchild1.py +0 -21
- arelle/archive/plugin/packagedImportTest/importTestGrandchild2.py +0 -21
- arelle/archive/plugin/packagedImportTest/importTestImported1.py +0 -24
- arelle/archive/plugin/packagedImportTest/importTestImported11.py +0 -21
- arelle/archive/plugin/packagedImportTest/subdir/importTestImported111.py +0 -21
- arelle/archive/plugin/packagedImportTest/subdir/subsubdir/importTestImported1111.py +0 -21
- arelle/archive/plugin/sakaCalendar.py +0 -215
- arelle/archive/plugin/saveInstanceInfoset.py +0 -121
- arelle/archive/plugin/sphinx/FormulaGenerator.py +0 -823
- arelle/archive/plugin/sphinx/SphinxContext.py +0 -404
- arelle/archive/plugin/sphinx/SphinxEvaluator.py +0 -783
- arelle/archive/plugin/sphinx/SphinxMethods.py +0 -1287
- arelle/archive/plugin/sphinx/SphinxParser.py +0 -1093
- arelle/archive/plugin/sphinx/SphinxValidator.py +0 -163
- arelle/archive/plugin/sphinx/US-GAAP Ratios Example.xsr +0 -52
- arelle/archive/plugin/sphinx/__init__.py +0 -285
- arelle/archive/plugin/streamingExtensions.py +0 -335
- arelle/archive/plugin/updateTableLB.py +0 -242
- arelle/archive/plugin/validate/SBRnl/CustomLoader.py +0 -19
- arelle/archive/plugin/validate/SBRnl/DTS.py +0 -305
- arelle/archive/plugin/validate/SBRnl/Dimensions.py +0 -357
- arelle/archive/plugin/validate/SBRnl/Document.py +0 -799
- arelle/archive/plugin/validate/SBRnl/Filing.py +0 -467
- arelle/archive/plugin/validate/SBRnl/__init__.py +0 -75
- arelle/archive/plugin/validate/SBRnl/config.xml +0 -26
- arelle/archive/plugin/validate/SBRnl/sbr-nl-taxonomies.xml +0 -754
- arelle/archive/plugin/validate/USBestPractices.py +0 -570
- arelle/archive/plugin/validate/USCorpAction.py +0 -557
- arelle/archive/plugin/validate/USSecTagging.py +0 -337
- arelle/archive/plugin/validate/XDC/__init__.py +0 -77
- arelle/archive/plugin/validate/XDC/config.xml +0 -20
- arelle/archive/plugin/validate/XFsyntax/__init__.py +0 -64
- arelle/archive/plugin/validate/XFsyntax/xf.py +0 -2227
- arelle/archive/plugin/validate/calc2.py +0 -536
- arelle/archive/plugin/validateSchemaLxml.py +0 -156
- arelle/archive/plugin/validateTableInfoset.py +0 -52
- arelle/archive/us-gaap-dei-docType-extraction-frm.xml +0 -90
- arelle/archive/us-gaap-dei-ratio-cash-frm.xml +0 -150
- arelle/examples/plugin/formulaSuiteConverter.py +0 -212
- arelle/examples/plugin/functionsCustom.py +0 -59
- arelle/examples/plugin/hello_dolly.py +0 -64
- arelle/examples/plugin/multi.py +0 -58
- arelle/examples/plugin/rssSaveOim.py +0 -96
- arelle/examples/plugin/validate/XYZ/DisclosureSystems.py +0 -2
- arelle/examples/plugin/validate/XYZ/PluginValidationDataExtension.py +0 -10
- arelle/examples/plugin/validate/XYZ/ValidationPluginExtension.py +0 -49
- arelle/examples/plugin/validate/XYZ/__init__.py +0 -75
- arelle/examples/plugin/validate/XYZ/resources/config.xml +0 -16
- arelle/examples/plugin/validate/XYZ/rules/__init__.py +0 -0
- arelle/examples/plugin/validate/XYZ/rules/rules01.py +0 -110
- arelle/examples/plugin/validate/XYZ/rules/rules02.py +0 -59
- arelle/model/CommentBase.py +0 -9
- arelle/model/ElementBase.py +0 -11
- arelle/model/PIBase.py +0 -10
- arelle/model/__init__.py +0 -15
- arelle/scripts-macOS/startWebServer.command +0 -3
- arelle/scripts-unix/startWebServer.sh +0 -1
- arelle/scripts-windows/startWebServer.bat +0 -5
- {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/top_level.txt +0 -0
|
@@ -92,14 +92,21 @@
|
|
|
92
92
|
"http://www.esma.europa.eu/taxonomy/2017-03-31/esef_cor.xsd",
|
|
93
93
|
"https://www.esma.europa.eu/taxonomy/2017-03-31/esef_cor.xsd",
|
|
94
94
|
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
95
|
-
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd"
|
|
95
|
+
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
96
|
+
"http://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
97
|
+
"https://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
98
|
+
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
99
|
+
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd"
|
|
96
100
|
],
|
|
97
101
|
"effectiveTaxonomyURLs": [
|
|
98
102
|
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
99
103
|
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
100
104
|
"http://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
101
105
|
"https://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd"
|
|
102
|
-
]
|
|
106
|
+
],
|
|
107
|
+
"earliestTransformationRegistryVersion": 4,
|
|
108
|
+
"styleIxHiddenProperty": "-esef-ix-hidden",
|
|
109
|
+
"disallowedHiddenStyle": "-ix-hidden"
|
|
103
110
|
},
|
|
104
111
|
"ESEF-2022": {
|
|
105
112
|
"outdatedTaxonomyURLs": [
|
|
@@ -108,14 +115,23 @@
|
|
|
108
115
|
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
109
116
|
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
110
117
|
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
111
|
-
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd"
|
|
118
|
+
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
119
|
+
"http://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
120
|
+
"https://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
121
|
+
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
122
|
+
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
123
|
+
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_all.xsd",
|
|
124
|
+
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_all.xsd"
|
|
112
125
|
],
|
|
113
126
|
"effectiveTaxonomyURLs": [
|
|
114
127
|
"http://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
115
128
|
"https://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
116
129
|
"http://www.esma.europa.eu/taxonomy/2022-03-24/esef_cor.xsd",
|
|
117
130
|
"https://www.esma.europa.eu/taxonomy/2022-03-24/esef_cor.xsd"
|
|
118
|
-
|
|
131
|
+
],
|
|
132
|
+
"earliestTransformationRegistryVersion": 4,
|
|
133
|
+
"styleIxHiddenProperty": "-esef-ix-hidden",
|
|
134
|
+
"disallowedHiddenStyle": "-ix-hidden"
|
|
119
135
|
},
|
|
120
136
|
"ESEF-2023": {
|
|
121
137
|
"outdatedTaxonomyURLs": [
|
|
@@ -124,14 +140,23 @@
|
|
|
124
140
|
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
125
141
|
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
126
142
|
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
127
|
-
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd"
|
|
143
|
+
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
144
|
+
"http://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
145
|
+
"https://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
146
|
+
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
147
|
+
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
148
|
+
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_all.xsd",
|
|
149
|
+
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_all.xsd"
|
|
128
150
|
],
|
|
129
151
|
"effectiveTaxonomyURLs": [
|
|
130
152
|
"http://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
131
153
|
"https://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
132
154
|
"http://www.esma.europa.eu/taxonomy/2022-03-24/esef_cor.xsd",
|
|
133
155
|
"https://www.esma.europa.eu/taxonomy/2022-03-24/esef_cor.xsd"
|
|
134
|
-
|
|
156
|
+
],
|
|
157
|
+
"earliestTransformationRegistryVersion": 4,
|
|
158
|
+
"styleIxHiddenProperty": "-esef-ix-hidden",
|
|
159
|
+
"disallowedHiddenStyle": "-ix-hidden"
|
|
135
160
|
},
|
|
136
161
|
"ESEF-2024": {
|
|
137
162
|
"outdatedTaxonomyURLs": [
|
|
@@ -142,15 +167,57 @@
|
|
|
142
167
|
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
143
168
|
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
144
169
|
"http://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
145
|
-
"https://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd"
|
|
170
|
+
"https://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
171
|
+
"http://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
172
|
+
"https://www.esma.europa.eu/taxonomy/2017-03-31/esef_all.xsd",
|
|
173
|
+
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
174
|
+
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_all.xsd",
|
|
175
|
+
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_all.xsd",
|
|
176
|
+
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_all.xsd",
|
|
177
|
+
"http://www.esma.europa.eu/taxonomy/2021-03-24/esef_all.xsd",
|
|
178
|
+
"https://www.esma.europa.eu/taxonomy/2021-03-24/esef_all.xsd"
|
|
146
179
|
],
|
|
147
180
|
"effectiveTaxonomyURLs": [
|
|
148
181
|
"http://www.esma.europa.eu/taxonomy/2022-03-24/esef_cor.xsd",
|
|
149
182
|
"https://www.esma.europa.eu/taxonomy/2022-03-24/esef_cor.xsd",
|
|
150
183
|
"http://www.esma.europa.eu/taxonomy/2024-03-27/esef_cor.xsd",
|
|
151
184
|
"https://www.esma.europa.eu/taxonomy/2024-03-27/esef_cor.xsd"
|
|
152
|
-
|
|
153
|
-
|
|
185
|
+
],
|
|
186
|
+
"earliestTransformationRegistryVersion": 4,
|
|
187
|
+
"styleIxHiddenProperty": "-esef-ix-hidden",
|
|
188
|
+
"disallowedHiddenStyle": "-ix-hidden"
|
|
189
|
+
},
|
|
190
|
+
"ESEF-2025-DRAFT": {
|
|
191
|
+
"outdatedTaxonomyURLs": [
|
|
192
|
+
"http://www.esma.europa.eu/taxonomy/2017-03-31/esef_cor.xsd",
|
|
193
|
+
"https://www.esma.europa.eu/taxonomy/2017-03-31/esef_cor.xsd",
|
|
194
|
+
"http://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
195
|
+
"https://www.esma.europa.eu/taxonomy/2019-03-27/esef_cor.xsd",
|
|
196
|
+
"http://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
197
|
+
"https://www.esma.europa.eu/taxonomy/2020-03-16/esef_cor.xsd",
|
|
198
|
+
"http://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
199
|
+
"https://www.esma.europa.eu/taxonomy/2021-03-24/esef_cor.xsd",
|
|
200
|
+
"http://www.esma.europa.eu/taxonomy/2022-03-24/esef_cor.xsd",
|
|
201
|
+
"https://www.esma.europa.eu/taxonomy/2022-03-24/esef_cor.xsd"
|
|
202
|
+
],
|
|
203
|
+
"effectiveTaxonomyURLs": [
|
|
204
|
+
"http://www.esma.europa.eu/taxonomy/2025-03-27/esef_cor.xsd",
|
|
205
|
+
"https://www.esma.europa.eu/taxonomy/2025-03-27/esef_cor.xsd",
|
|
206
|
+
"http://www.esma.europa.eu/taxonomy/2024-03-27/esef_cor.xsd",
|
|
207
|
+
"https://www.esma.europa.eu/taxonomy/2024-03-27/esef_cor.xsd"
|
|
208
|
+
],
|
|
209
|
+
"expiringTaxonomyURLs": [
|
|
210
|
+
{"lastReportableDate": "2025-12-31",
|
|
211
|
+
"URLs": [
|
|
212
|
+
"http://www.esma.europa.eu/taxonomy/2024-03-27/esef_cor.xsd",
|
|
213
|
+
"https://www.esma.europa.eu/taxonomy/2024-03-27/esef_cor.xsd"
|
|
214
|
+
]
|
|
215
|
+
}
|
|
216
|
+
],
|
|
217
|
+
"earliestTransformationRegistryVersion": 5,
|
|
218
|
+
"styleIxHiddenProperty": "-ix-hidden",
|
|
219
|
+
"disallowedHiddenStyle": "-esef-ix-hidden"
|
|
220
|
+
},
|
|
154
221
|
"AT": {
|
|
155
222
|
"name": "Austria",
|
|
156
223
|
"reportPackageMaxMB": "100",
|
|
@@ -4,6 +4,26 @@
|
|
|
4
4
|
xsi:noNamespaceSchemaLocation="../../../../config/disclosuresystems.xsd">
|
|
5
5
|
<!-- see ../../../../config/disclosuresystem.xml for full comments -->
|
|
6
6
|
|
|
7
|
+
<DisclosureSystem
|
|
8
|
+
names="Draft ESMA RTS on ESEF-2025|ESEF-2025-DRAFT|esef-2025-draft"
|
|
9
|
+
description="ESMA RTS on ESEF-2025 Validation Checks for Consolidated Financial Statements (DRAFT)"
|
|
10
|
+
validationType="ESEF"
|
|
11
|
+
exclusiveTypesPattern="EFM|GFM|FERC|HMRC|SBR.NL|EBA|EIOPA|ESEF"
|
|
12
|
+
blockDisallowedReferences="false"
|
|
13
|
+
validateFileText="false"
|
|
14
|
+
contextElement="scenario"
|
|
15
|
+
/>
|
|
16
|
+
|
|
17
|
+
<DisclosureSystem
|
|
18
|
+
names="Draft ESMA RTS on ESEF-2025 Unconsolidated|ESEF-Unconsolidated-2025-DRAFT|esef-unconsolidated-2025-draft"
|
|
19
|
+
description="ESMA RTS on ESEF-2025 Validation Checks for Unconsolidated Financial Statements (DRAFT)"
|
|
20
|
+
validationType="ESEF"
|
|
21
|
+
exclusiveTypesPattern="EFM|GFM|FERC|HMRC|SBR.NL|EBA|EIOPA|ESEF"
|
|
22
|
+
blockDisallowedReferences="false"
|
|
23
|
+
validateFileText="false"
|
|
24
|
+
contextElement="scenario"
|
|
25
|
+
/>
|
|
26
|
+
|
|
7
27
|
<DisclosureSystem
|
|
8
28
|
names="ESMA RTS on ESEF-2024|ESEF-2024-DRAFT|esef-2024-draft|ESEF-2024|esef-2024|ESEF|esef"
|
|
9
29
|
description="ESMA RTS on ESEF-2024 Validation Checks for Consolidated Financial Statements"
|
|
@@ -2,18 +2,40 @@ DISCLOSURE_SYSTEM_NT16 = 'NT16'
|
|
|
2
2
|
DISCLOSURE_SYSTEM_NT17 = 'NT17'
|
|
3
3
|
DISCLOSURE_SYSTEM_NT18 = 'NT18'
|
|
4
4
|
DISCLOSURE_SYSTEM_NT19 = 'NT19'
|
|
5
|
+
DISCLOSURE_SYSTEM_NT20 = 'NT20'
|
|
5
6
|
DISCLOSURE_SYSTEM_NL_INLINE_2024 = 'NL-INLINE-2024'
|
|
7
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2025 = 'NL-INLINE-2025'
|
|
6
8
|
DISCLOSURE_SYSTEM_NL_INLINE_2024_GAAP_OTHER = 'NL-INLINE-2024-GAAP-OTHER'
|
|
9
|
+
DISCLOSURE_SYSTEM_NL_INLINE_MULTI_TARGET = 'NL-INLINE-MULTI-TARGET'
|
|
7
10
|
|
|
8
11
|
ALL_NL_INLINE_DISCLOSURE_SYSTEMS = [
|
|
9
12
|
DISCLOSURE_SYSTEM_NL_INLINE_2024,
|
|
13
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2025,
|
|
10
14
|
DISCLOSURE_SYSTEM_NL_INLINE_2024_GAAP_OTHER,
|
|
11
15
|
]
|
|
12
16
|
|
|
13
17
|
NL_INLINE_GAAP_IFRS_DISCLOSURE_SYSTEMS = [
|
|
14
18
|
DISCLOSURE_SYSTEM_NL_INLINE_2024,
|
|
19
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2025
|
|
15
20
|
]
|
|
16
21
|
|
|
17
22
|
NL_INLINE_GAAP_OTHER_DISCLOSURE_SYSTEMS = [
|
|
18
23
|
DISCLOSURE_SYSTEM_NL_INLINE_2024_GAAP_OTHER,
|
|
19
24
|
]
|
|
25
|
+
|
|
26
|
+
NL_INLINE_MULTI_TARGET_DISCLOSURE_SYSTEMS = [
|
|
27
|
+
DISCLOSURE_SYSTEM_NL_INLINE_MULTI_TARGET,
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
NL_INLINE_OTHER_DISCLOSURE_SYSTEMS = [
|
|
31
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024_GAAP_OTHER,
|
|
32
|
+
DISCLOSURE_SYSTEM_NL_INLINE_MULTI_TARGET,
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
NT_DISCLOSURE_SYSTEMS = [
|
|
36
|
+
DISCLOSURE_SYSTEM_NT16,
|
|
37
|
+
DISCLOSURE_SYSTEM_NT17,
|
|
38
|
+
DISCLOSURE_SYSTEM_NT18,
|
|
39
|
+
DISCLOSURE_SYSTEM_NT19,
|
|
40
|
+
DISCLOSURE_SYSTEM_NT20,
|
|
41
|
+
]
|
|
@@ -63,10 +63,13 @@ ALLOWABLE_LANGUAGES = frozenset((
|
|
|
63
63
|
EFFECTIVE_KVK_GAAP_IFRS_ENTRYPOINT_FILES = frozenset((
|
|
64
64
|
'https://www.nltaxonomie.nl/kvk/2024-12-31/kvk-annual-report-nlgaap-ext.xsd',
|
|
65
65
|
'https://www.nltaxonomie.nl/kvk/2024-12-31/kvk-annual-report-ifrs-ext.xsd',
|
|
66
|
+
'https://www.nltaxonomie.nl/kvk/2025-12-31/kvk-annual-report-nlgaap-ext.xsd',
|
|
67
|
+
'https://www.nltaxonomie.nl/kvk/2025-12-31/kvk-annual-report-ifrs-ext.xsd',
|
|
66
68
|
))
|
|
67
69
|
|
|
68
70
|
EFFECTIVE_KVK_GAAP_OTHER_ENTRYPOINT_FILES = frozenset((
|
|
69
71
|
'https://www.nltaxonomie.nl/kvk/2024-12-31/kvk-annual-report-other-gaap.xsd',
|
|
72
|
+
'https://www.nltaxonomie.nl/kvk/2025-12-31/kvk-annual-report-other.xsd'
|
|
70
73
|
))
|
|
71
74
|
|
|
72
75
|
NON_DIMENSIONALIZED_LINE_ITEM_LINKROLES = frozenset((
|
|
@@ -78,6 +81,11 @@ TAXONOMY_URLS_BY_YEAR = {
|
|
|
78
81
|
'https://www.nltaxonomie.nl/kvk/2024-12-31/kvk-annual-report-nlgaap-ext.xsd',
|
|
79
82
|
'https://www.nltaxonomie.nl/kvk/2024-12-31/kvk-annual-report-ifrs-ext.xsd',
|
|
80
83
|
'https://www.nltaxonomie.nl/kvk/2024-12-31/kvk-annual-report-other-gaap.xsd',
|
|
84
|
+
},
|
|
85
|
+
'2025': {
|
|
86
|
+
'https://www.nltaxonomie.nl/kvk/2025-12-31/kvk-annual-report-nlgaap-ext.xsd',
|
|
87
|
+
'https://www.nltaxonomie.nl/kvk/2025-12-31/kvk-annual-report-ifrs-ext.xsd',
|
|
88
|
+
'https://www.nltaxonomie.nl/kvk/2025-12-31/kvk-annual-report-other.xsd',
|
|
81
89
|
}
|
|
82
90
|
}
|
|
83
91
|
|
|
@@ -106,6 +114,7 @@ STANDARD_TAXONOMY_URLS = frozenset((
|
|
|
106
114
|
|
|
107
115
|
QN_DOMAIN_ITEM_TYPES = frozenset((
|
|
108
116
|
qname("{http://www.xbrl.org/dtr/type/2022-03-31}nonnum:domainItemType"),
|
|
117
|
+
qname("{http://www.xbrl.org/dtr/type/2024-01-31}nonnum:domainItemType")
|
|
109
118
|
))
|
|
110
119
|
|
|
111
120
|
SUPPORTED_IMAGE_TYPES_BY_IS_FILE = {
|
|
@@ -122,6 +131,7 @@ class AnchorData:
|
|
|
122
131
|
anchorsWithDomainItem: frozenset[ModelRelationship]
|
|
123
132
|
extLineItemsNotAnchored: frozenset[ModelConcept]
|
|
124
133
|
extLineItemsWronglyAnchored: frozenset[ModelConcept]
|
|
134
|
+
extConceptsNotAnchoredToSameDerivedType: frozenset[ModelConcept]
|
|
125
135
|
|
|
126
136
|
|
|
127
137
|
@dataclass(frozen=True)
|
|
@@ -214,6 +224,8 @@ class LinkbaseData:
|
|
|
214
224
|
|
|
215
225
|
@dataclass
|
|
216
226
|
class PluginValidationDataExtension(PluginData):
|
|
227
|
+
AnnualReportOfForeignGroupHeadForExemptionUnderArticle403Qn: QName
|
|
228
|
+
AnnualReportOfForeignGroupHeadForExemptionUnderArticle408Qn: QName
|
|
217
229
|
chamberOfCommerceRegistrationNumberQn: QName
|
|
218
230
|
documentAdoptionDateQn: QName
|
|
219
231
|
documentAdoptionStatusQn: QName
|
|
@@ -265,7 +277,7 @@ class PluginValidationDataExtension(PluginData):
|
|
|
265
277
|
contextsWithPeriodTimeZone.append(context)
|
|
266
278
|
if context.hasSegment:
|
|
267
279
|
contextsWithSegments.append(context)
|
|
268
|
-
if context.nonDimValues("scenario"):
|
|
280
|
+
if context.nonDimValues("scenario"):
|
|
269
281
|
contextsWithImproperContent.append(context)
|
|
270
282
|
return ContextData(
|
|
271
283
|
contextsWithImproperContent=contextsWithImproperContent,
|
|
@@ -372,7 +384,7 @@ class PluginValidationDataExtension(PluginData):
|
|
|
372
384
|
tupleElements.add(elt)
|
|
373
385
|
if elt.tag == ixFractionTag:
|
|
374
386
|
fractionElements.add(elt)
|
|
375
|
-
for elt
|
|
387
|
+
for elt in ixdsHtmlRootElt.iter():
|
|
376
388
|
if elt.get(xmlBaseIdentifier) is not None:
|
|
377
389
|
baseElements.add(elt)
|
|
378
390
|
if elt.tag == xhtmlBaseIdentifier:
|
|
@@ -433,6 +445,7 @@ class PluginValidationDataExtension(PluginData):
|
|
|
433
445
|
anchorsWithDomainItem = set()
|
|
434
446
|
anchorsWithDimensionItem = set()
|
|
435
447
|
anchorsInDimensionalElrs = defaultdict(set)
|
|
448
|
+
extConceptsNotAnchoredToSameDerivedType = set()
|
|
436
449
|
for anchoringRel in widerNarrowerRelSet.modelRelationships:
|
|
437
450
|
elr = anchoringRel.linkrole
|
|
438
451
|
fromObj = anchoringRel.fromModelObject
|
|
@@ -440,6 +453,7 @@ class PluginValidationDataExtension(PluginData):
|
|
|
440
453
|
if fromObj is not None and toObj is not None and fromObj.type is not None and toObj.type is not None:
|
|
441
454
|
if not ((not self.isExtensionUri(fromObj.modelDocument.uri, modelXbrl)) ^ (not self.isExtensionUri(toObj.modelDocument.uri, modelXbrl))):
|
|
442
455
|
anchorsNotInBase.add(anchoringRel)
|
|
456
|
+
|
|
443
457
|
if fromObj.type.isDomainItemType or toObj.type.isDomainItemType:
|
|
444
458
|
anchorsWithDomainItem.add(anchoringRel)
|
|
445
459
|
elif fromObj.isDimensionItem or toObj.isDimensionItem:
|
|
@@ -447,6 +461,11 @@ class PluginValidationDataExtension(PluginData):
|
|
|
447
461
|
else:
|
|
448
462
|
if elr in elrsContainingDimensionalRelationships:
|
|
449
463
|
anchorsInDimensionalElrs[elr].add(anchoringRel)
|
|
464
|
+
|
|
465
|
+
if (fromObj.type != toObj.type and
|
|
466
|
+
(not fromObj.type.isDerivedFrom(toObj.type.qname) or
|
|
467
|
+
not toObj.type.isDerivedFrom(fromObj.type.qname))):
|
|
468
|
+
extConceptsNotAnchoredToSameDerivedType.add(toObj)
|
|
450
469
|
return AnchorData(
|
|
451
470
|
anchorsInDimensionalElrs={x: frozenset(y) for x, y in anchorsInDimensionalElrs.items()},
|
|
452
471
|
anchorsNotInBase=frozenset(anchorsNotInBase),
|
|
@@ -454,6 +473,7 @@ class PluginValidationDataExtension(PluginData):
|
|
|
454
473
|
anchorsWithDomainItem=frozenset(anchorsWithDomainItem),
|
|
455
474
|
extLineItemsNotAnchored=frozenset(extLineItemsNotAnchored),
|
|
456
475
|
extLineItemsWronglyAnchored=frozenset(extLineItemsWronglyAnchored),
|
|
476
|
+
extConceptsNotAnchoredToSameDerivedType=frozenset(extConceptsNotAnchoredToSameDerivedType),
|
|
457
477
|
)
|
|
458
478
|
|
|
459
479
|
|
|
@@ -696,22 +716,20 @@ class PluginValidationDataExtension(PluginData):
|
|
|
696
716
|
return reportXmlLang
|
|
697
717
|
|
|
698
718
|
@lru_cache(1)
|
|
699
|
-
def getTargetElements(self, modelXbrl: ModelXbrl) -> list[
|
|
719
|
+
def getTargetElements(self, modelXbrl: ModelXbrl) -> list[ModelObject]:
|
|
700
720
|
targetElements = []
|
|
701
721
|
for ixdsHtmlRootElt in modelXbrl.ixdsHtmlElements:
|
|
702
722
|
ixNStag = str(getattr(ixdsHtmlRootElt.modelDocument, "ixNStag", ixbrl11))
|
|
703
|
-
ixTags =
|
|
704
|
-
for elt
|
|
705
|
-
if elt.
|
|
723
|
+
ixTags = (ixNStag + ln for ln in ("nonNumeric", "nonFraction", "references", "relationship"))
|
|
724
|
+
for elt in ixdsHtmlRootElt.iter(*ixTags):
|
|
725
|
+
if elt.get("target"):
|
|
706
726
|
targetElements.append(elt)
|
|
707
727
|
return targetElements
|
|
708
728
|
|
|
709
729
|
def isExtensionUri(self, uri: str, modelXbrl: ModelXbrl) -> bool:
|
|
710
730
|
if uri.startswith(modelXbrl.uriDir):
|
|
711
731
|
return True
|
|
712
|
-
|
|
713
|
-
return True
|
|
714
|
-
return False
|
|
732
|
+
return not any(uri.startswith(taxonomyUri) for taxonomyUri in STANDARD_TAXONOMY_URLS)
|
|
715
733
|
|
|
716
734
|
@lru_cache(1)
|
|
717
735
|
def isFilenameValidCharacters(self, filename: str) -> bool:
|
|
@@ -4,22 +4,31 @@ See COPYRIGHT.md for copyright information.
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
from typing import Any
|
|
6
6
|
|
|
7
|
+
from arelle.Cntlr import Cntlr
|
|
7
8
|
from arelle.ModelDocument import LoadingException, ModelDocument
|
|
8
9
|
from arelle.ModelValue import qname
|
|
9
10
|
from arelle.ModelXbrl import ModelXbrl
|
|
10
11
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
11
12
|
from arelle.typing import TypeGetText
|
|
12
13
|
from arelle.utils.validate.ValidationPlugin import ValidationPlugin
|
|
13
|
-
from .DisclosureSystems import (
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
from .DisclosureSystems import (
|
|
15
|
+
DISCLOSURE_SYSTEM_NT16,
|
|
16
|
+
DISCLOSURE_SYSTEM_NT17,
|
|
17
|
+
DISCLOSURE_SYSTEM_NT18,
|
|
18
|
+
DISCLOSURE_SYSTEM_NT19,
|
|
19
|
+
DISCLOSURE_SYSTEM_NT20,
|
|
20
|
+
|
|
21
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024,
|
|
22
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024_GAAP_OTHER,
|
|
23
|
+
)
|
|
16
24
|
from .PluginValidationDataExtension import PluginValidationDataExtension
|
|
17
25
|
|
|
18
26
|
_: TypeGetText
|
|
19
27
|
|
|
20
28
|
|
|
21
29
|
class ValidationPluginExtension(ValidationPlugin):
|
|
22
|
-
def newPluginData(self, validateXbrl: ValidateXbrl) -> PluginValidationDataExtension:
|
|
30
|
+
def newPluginData(self, cntlr: Cntlr, validateXbrl: ValidateXbrl | None) -> PluginValidationDataExtension:
|
|
31
|
+
assert validateXbrl is not None
|
|
23
32
|
disclosureSystem = validateXbrl.disclosureSystem.name
|
|
24
33
|
if disclosureSystem == DISCLOSURE_SYSTEM_NT16:
|
|
25
34
|
ifrsNamespace = None
|
|
@@ -145,9 +154,6 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
145
154
|
rjNamespace = None
|
|
146
155
|
entrypointRoot = 'http://www.nltaxonomie.nl/nt19/kvk/20241211/entrypoints/'
|
|
147
156
|
entrypoints = {entrypointRoot + e for e in [
|
|
148
|
-
'kvk-rpt-jaarverantwoording-2024-ifrs-full.xsd',
|
|
149
|
-
'kvk-rpt-jaarverantwoording-2024-ifrs-geconsolideerd-nlgaap-enkelvoudig.xsd',
|
|
150
|
-
'kvk-rpt-jaarverantwoording-2024-ifrs-smes.xsd',
|
|
151
157
|
'kvk-rpt-jaarverantwoording-2024-nlgaap-banken.xsd',
|
|
152
158
|
'kvk-rpt-jaarverantwoording-2024-nlgaap-beleggingsentiteiten.xsd',
|
|
153
159
|
'kvk-rpt-jaarverantwoording-2024-nlgaap-cooperaties.xsd',
|
|
@@ -176,6 +182,42 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
176
182
|
'kvk-rpt-jaarverantwoording-2024-nlgaap-verzekeringsmaatschappijen.xsd',
|
|
177
183
|
'kvk-rpt-jaarverantwoording-2024-nlgaap-zorginstellingen.xsd',
|
|
178
184
|
]}
|
|
185
|
+
elif disclosureSystem == DISCLOSURE_SYSTEM_NT20:
|
|
186
|
+
ifrsNamespace = None
|
|
187
|
+
jenvNamespace = 'http://www.nltaxonomie.nl/nt20/jenv/20251210/dictionary/jenv-bw2-data'
|
|
188
|
+
kvkINamespace = 'http://www.nltaxonomie.nl/nt20/kvk/20251210/dictionary/kvk-data'
|
|
189
|
+
nlTypesNamespace = 'http://www.nltaxonomie.nl/nt20/sbr/20250301/dictionary/nl-types'
|
|
190
|
+
rjNamespace = None
|
|
191
|
+
entrypointRoot = 'http://www.nltaxonomie.nl/nt20/kvk/20251210/entrypoints/'
|
|
192
|
+
entrypoints = {entrypointRoot + e for e in [
|
|
193
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-banken.xsd',
|
|
194
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-beleggingsentiteiten.xsd',
|
|
195
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-cooperaties.xsd',
|
|
196
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-cv-vof.xsd',
|
|
197
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-fondsenwervende-organisaties-klein.xsd',
|
|
198
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-fondsenwervende-organisaties.xsd',
|
|
199
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-groot-verticaal.xsd',
|
|
200
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-groot.xsd',
|
|
201
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-klein-publicatiestukken.xsd',
|
|
202
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-klein-verticaal-publicatiestukken.xsd',
|
|
203
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-klein-verticaal.xsd',
|
|
204
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-klein.xsd',
|
|
205
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-micro-publicatiestukken.xsd',
|
|
206
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-micro.xsd',
|
|
207
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-middelgroot-plus.xsd',
|
|
208
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-middelgroot-publicatiestukken.xsd',
|
|
209
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-middelgroot-verticaal-publicatiestukken.xsd',
|
|
210
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-middelgroot-verticaal.xsd',
|
|
211
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-middelgroot.xsd',
|
|
212
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-organisaties-zonder-winststreven-klein.xsd',
|
|
213
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-organisaties-zonder-winststreven.xsd',
|
|
214
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-pensioenfondsen.xsd',
|
|
215
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-premiepensioeninstellingen.xsd',
|
|
216
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-stichtingen.xsd',
|
|
217
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-toegelaten-instellingen-volkshuisvesting.xsd',
|
|
218
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-verzekeringsmaatschappijen.xsd',
|
|
219
|
+
'kvk-rpt-jaarverantwoording-2025-nlgaap-zorginstellingen.xsd',
|
|
220
|
+
]}
|
|
179
221
|
elif disclosureSystem == DISCLOSURE_SYSTEM_NL_INLINE_2024:
|
|
180
222
|
ifrsNamespace = 'https://xbrl.ifrs.org/taxonomy/2024-03-27/ifrs-full'
|
|
181
223
|
jenvNamespace = 'https://www.nltaxonomie.nl/bw2-titel9/2024-12-31/bw2-titel9-cor'
|
|
@@ -204,6 +246,8 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
204
246
|
]) if kvkINamespace else frozenset()
|
|
205
247
|
return PluginValidationDataExtension(
|
|
206
248
|
self.name,
|
|
249
|
+
AnnualReportOfForeignGroupHeadForExemptionUnderArticle403Qn=qname(kvkINamespace, 'AnnualReportOfForeignGroupHeadForExemptionUnderArticle403'),
|
|
250
|
+
AnnualReportOfForeignGroupHeadForExemptionUnderArticle408Qn=qname(kvkINamespace, 'AnnualReportOfForeignGroupHeadForExemptionUnderArticle408'),
|
|
207
251
|
chamberOfCommerceRegistrationNumberQn=qname(jenvNamespace, 'ChamberOfCommerceRegistrationNumber'),
|
|
208
252
|
documentAdoptionDateQn=qname(jenvNamespace, 'DocumentAdoptionDate'),
|
|
209
253
|
documentAdoptionStatusQn=qname(jenvNamespace, 'DocumentAdoptionStatus'),
|
|
@@ -3,6 +3,12 @@
|
|
|
3
3
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
|
4
4
|
xsi:noNamespaceSchemaLocation="../../../../config/disclosuresystems.xsd">
|
|
5
5
|
<!-- see arelle/config/disclosuresystems.xml for full comments -->
|
|
6
|
+
<DisclosureSystem
|
|
7
|
+
names="NL-INLINE-2025|nl-inline-2025|kvk-inline-2025-preview"
|
|
8
|
+
description="Checks for NL INLINE 2025. For use with NL GAAP and NL IFRS"
|
|
9
|
+
validationType="NL"
|
|
10
|
+
exclusiveTypesPattern="EFM|GFM|FERC|HMRC|SBR.NL|EBA|EIOPA|ESEF"
|
|
11
|
+
/>
|
|
6
12
|
<DisclosureSystem
|
|
7
13
|
names="NL-INLINE-2024|nl-inline-2024|kvk-inline-2024-preview"
|
|
8
14
|
description="Checks for NL INLINE 2024. For use with NL GAAP and NL IFRS"
|
|
@@ -15,6 +21,18 @@
|
|
|
15
21
|
validationType="NL"
|
|
16
22
|
exclusiveTypesPattern="EFM|GFM|FERC|HMRC|SBR.NL|EBA|EIOPA|ESEF"
|
|
17
23
|
/>
|
|
24
|
+
<DisclosureSystem
|
|
25
|
+
names="NL-INLINE-MULTI-TARGET|nl-inline-multi-target|kvk-inline-multi-target-preview"
|
|
26
|
+
description="Checks for NL INLINE. For use with other GAAP."
|
|
27
|
+
validationType="NL"
|
|
28
|
+
exclusiveTypesPattern="EFM|GFM|FERC|HMRC|SBR.NL|EBA|EIOPA|ESEF"
|
|
29
|
+
/>
|
|
30
|
+
<DisclosureSystem
|
|
31
|
+
names="NT20|nt20|NT20-preview|nt20-preview"
|
|
32
|
+
description="Checks for NT20"
|
|
33
|
+
validationType="NL"
|
|
34
|
+
exclusiveTypesPattern="EFM|GFM|FERC|HMRC|SBR.NL|EBA|EIOPA|ESEF"
|
|
35
|
+
/>
|
|
18
36
|
<DisclosureSystem
|
|
19
37
|
names="NT19|nt19|NT19-preview|nt19-preview"
|
|
20
38
|
description="Checks for NT19"
|
|
@@ -3,27 +3,23 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
from datetime import date, timedelta
|
|
7
|
-
from dateutil import relativedelta
|
|
8
6
|
from collections.abc import Iterable
|
|
9
|
-
from
|
|
7
|
+
from datetime import date, timedelta
|
|
8
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
import regex
|
|
11
|
+
from dateutil import relativedelta
|
|
12
12
|
|
|
13
|
-
from arelle import
|
|
13
|
+
from arelle import XbrlConst, XmlUtil
|
|
14
14
|
from arelle.ModelObject import ModelObject
|
|
15
|
-
from arelle.ValidateXbrl import ValidateXbrl
|
|
16
|
-
from arelle.XmlValidate import INVALID
|
|
17
15
|
from arelle.typing import TypeGetText
|
|
18
16
|
from arelle.utils.PluginHooks import ValidationHook
|
|
19
17
|
from arelle.utils.validate.Decorator import validation
|
|
20
18
|
from arelle.utils.validate.Validation import Validation
|
|
21
|
-
from
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
26
|
-
)
|
|
19
|
+
from arelle.ValidateXbrl import ValidateXbrl
|
|
20
|
+
from arelle.XmlValidate import INVALID
|
|
21
|
+
|
|
22
|
+
from ..DisclosureSystems import NT_DISCLOSURE_SYSTEMS
|
|
27
23
|
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
28
24
|
|
|
29
25
|
if TYPE_CHECKING:
|
|
@@ -44,12 +40,7 @@ def _getReportingPeriodDateValue(modelXbrl: ModelXbrl, qname: QName) -> date | N
|
|
|
44
40
|
|
|
45
41
|
@validation(
|
|
46
42
|
hook=ValidationHook.XBRL_FINALLY,
|
|
47
|
-
disclosureSystems=
|
|
48
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
49
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
50
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
51
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
52
|
-
],
|
|
43
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
53
44
|
)
|
|
54
45
|
def rule_br_kvk_2_04(
|
|
55
46
|
pluginData: PluginValidationDataExtension,
|
|
@@ -122,12 +113,7 @@ def rule_br_kvk_2_04(
|
|
|
122
113
|
|
|
123
114
|
@validation(
|
|
124
115
|
hook=ValidationHook.XBRL_FINALLY,
|
|
125
|
-
disclosureSystems=
|
|
126
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
127
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
128
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
129
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
130
|
-
],
|
|
116
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
131
117
|
)
|
|
132
118
|
def rule_br_kvk_3_01(
|
|
133
119
|
pluginData: PluginValidationDataExtension,
|
|
@@ -163,12 +149,7 @@ def rule_br_kvk_3_01(
|
|
|
163
149
|
|
|
164
150
|
@validation(
|
|
165
151
|
hook=ValidationHook.XBRL_FINALLY,
|
|
166
|
-
disclosureSystems=
|
|
167
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
168
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
169
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
170
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
171
|
-
],
|
|
152
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
172
153
|
)
|
|
173
154
|
def rule_br_kvk_4_07(
|
|
174
155
|
pluginData: PluginValidationDataExtension,
|
|
@@ -196,12 +177,7 @@ def rule_br_kvk_4_07(
|
|
|
196
177
|
|
|
197
178
|
@validation(
|
|
198
179
|
hook=ValidationHook.XBRL_FINALLY,
|
|
199
|
-
disclosureSystems=
|
|
200
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
201
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
202
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
203
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
204
|
-
],
|
|
180
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
205
181
|
)
|
|
206
182
|
def rule_br_kvk_4_10(
|
|
207
183
|
pluginData: PluginValidationDataExtension,
|
|
@@ -229,12 +205,7 @@ def rule_br_kvk_4_10(
|
|
|
229
205
|
|
|
230
206
|
@validation(
|
|
231
207
|
hook=ValidationHook.XBRL_FINALLY,
|
|
232
|
-
disclosureSystems=
|
|
233
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
234
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
235
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
236
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
237
|
-
],
|
|
208
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
238
209
|
)
|
|
239
210
|
def rule_br_kvk_4_12(
|
|
240
211
|
pluginData: PluginValidationDataExtension,
|
|
@@ -267,12 +238,7 @@ def rule_br_kvk_4_12(
|
|
|
267
238
|
|
|
268
239
|
@validation(
|
|
269
240
|
hook=ValidationHook.XBRL_FINALLY,
|
|
270
|
-
disclosureSystems=
|
|
271
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
272
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
273
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
274
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
275
|
-
],
|
|
241
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
276
242
|
)
|
|
277
243
|
def rule_br_kvk_4_16(
|
|
278
244
|
pluginData: PluginValidationDataExtension,
|
|
@@ -309,12 +275,7 @@ def rule_br_kvk_4_16(
|
|
|
309
275
|
|
|
310
276
|
@validation(
|
|
311
277
|
hook=ValidationHook.XBRL_FINALLY,
|
|
312
|
-
disclosureSystems=
|
|
313
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
314
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
315
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
316
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
317
|
-
],
|
|
278
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
318
279
|
)
|
|
319
280
|
def rule_br_kvk_4_17(
|
|
320
281
|
pluginData: PluginValidationDataExtension,
|
|
@@ -342,12 +303,7 @@ def rule_br_kvk_4_17(
|
|
|
342
303
|
|
|
343
304
|
@validation(
|
|
344
305
|
hook=ValidationHook.XBRL_FINALLY,
|
|
345
|
-
disclosureSystems=
|
|
346
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
347
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
348
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
349
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
350
|
-
],
|
|
306
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
351
307
|
)
|
|
352
308
|
def rule_br_kvk_4_20(
|
|
353
309
|
pluginData: PluginValidationDataExtension,
|