arelle-release 2.37.71__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 +7 -1
- arelle/CntlrCmdLine.py +95 -19
- arelle/CntlrWinMain.py +4 -1
- arelle/DialogFind.py +1 -1
- arelle/ModelDtsObject.py +2 -0
- arelle/ModelObject.py +16 -18
- arelle/ModelObjectFactory.py +17 -15
- arelle/ModelXbrl.py +7 -1
- arelle/PluginManager.py +1 -5
- arelle/RuntimeOptions.py +1 -0
- arelle/UrlUtil.py +11 -0
- arelle/Validate.py +3 -3
- arelle/ValidateXbrl.py +2 -1
- arelle/ValidateXbrlCalcs.py +210 -186
- arelle/WebCache.py +2 -8
- arelle/XbrlConst.py +2 -0
- arelle/XmlUtil.py +16 -21
- arelle/XmlValidate.py +4 -6
- arelle/_version.py +2 -2
- 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 +9 -1
- arelle/plugin/inlineXbrlDocumentSet.py +1 -3
- arelle/plugin/validate/DBA/DisclosureSystems.py +19 -1
- arelle/plugin/validate/DBA/resources/config.xml +5 -0
- 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/ControllerPluginData.py +2 -1
- arelle/plugin/validate/EDINET/NamespaceConfig.py +50 -0
- arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +33 -78
- arelle/plugin/validate/EDINET/TableOfContentsBuilder.py +153 -51
- arelle/plugin/validate/EDINET/rules/contexts.py +1 -1
- arelle/plugin/validate/EDINET/rules/edinet.py +163 -20
- arelle/plugin/validate/EDINET/rules/gfm.py +88 -1
- arelle/plugin/validate/EDINET/rules/upload.py +1 -1
- arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +3 -3
- arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +42 -14
- arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +14 -3
- arelle/plugin/validate/ESEF/__init__.py +10 -5
- arelle/plugin/validate/ESEF/resources/authority-validations.json +10 -5
- arelle/plugin/validate/NL/DisclosureSystems.py +22 -0
- arelle/plugin/validate/NL/PluginValidationDataExtension.py +20 -0
- arelle/plugin/validate/NL/ValidationPluginExtension.py +48 -3
- arelle/plugin/validate/NL/resources/config.xml +18 -0
- arelle/plugin/validate/NL/rules/br_kvk.py +9 -54
- 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 +25 -140
- arelle/plugin/validate/NL/rules/nl_kvk.py +125 -12
- arelle/plugin/validate/ROS/rules/ros.py +3 -1
- arelle/plugin/validate/UK/__init__.py +70 -14
- arelle/utils/EntryPointDetection.py +17 -11
- arelle/utils/validate/ESEFImage.py +3 -3
- arelle/utils/validate/Validation.py +9 -0
- arelle/utils/validate/ValidationPlugin.py +14 -12
- {arelle_release-2.37.71.dist-info → arelle_release-2.38.0.dist-info}/METADATA +10 -5
- {arelle_release-2.37.71.dist-info → arelle_release-2.38.0.dist-info}/RECORD +67 -69
- {arelle_release-2.37.71.dist-info → arelle_release-2.38.0.dist-info}/licenses/LICENSE.md +0 -3
- 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_release-2.37.71.dist-info → arelle_release-2.38.0.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.71.dist-info → arelle_release-2.38.0.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.71.dist-info → arelle_release-2.38.0.dist-info}/top_level.txt +0 -0
|
@@ -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
|
|
@@ -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
|
|
|
@@ -11,9 +11,16 @@ from arelle.ModelXbrl import ModelXbrl
|
|
|
11
11
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
12
12
|
from arelle.typing import TypeGetText
|
|
13
13
|
from arelle.utils.validate.ValidationPlugin import ValidationPlugin
|
|
14
|
-
from .DisclosureSystems import (
|
|
15
|
-
|
|
16
|
-
|
|
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
|
+
)
|
|
17
24
|
from .PluginValidationDataExtension import PluginValidationDataExtension
|
|
18
25
|
|
|
19
26
|
_: TypeGetText
|
|
@@ -175,6 +182,42 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
175
182
|
'kvk-rpt-jaarverantwoording-2024-nlgaap-verzekeringsmaatschappijen.xsd',
|
|
176
183
|
'kvk-rpt-jaarverantwoording-2024-nlgaap-zorginstellingen.xsd',
|
|
177
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
|
+
]}
|
|
178
221
|
elif disclosureSystem == DISCLOSURE_SYSTEM_NL_INLINE_2024:
|
|
179
222
|
ifrsNamespace = 'https://xbrl.ifrs.org/taxonomy/2024-03-27/ifrs-full'
|
|
180
223
|
jenvNamespace = 'https://www.nltaxonomie.nl/bw2-titel9/2024-12-31/bw2-titel9-cor'
|
|
@@ -203,6 +246,8 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
203
246
|
]) if kvkINamespace else frozenset()
|
|
204
247
|
return PluginValidationDataExtension(
|
|
205
248
|
self.name,
|
|
249
|
+
AnnualReportOfForeignGroupHeadForExemptionUnderArticle403Qn=qname(kvkINamespace, 'AnnualReportOfForeignGroupHeadForExemptionUnderArticle403'),
|
|
250
|
+
AnnualReportOfForeignGroupHeadForExemptionUnderArticle408Qn=qname(kvkINamespace, 'AnnualReportOfForeignGroupHeadForExemptionUnderArticle408'),
|
|
206
251
|
chamberOfCommerceRegistrationNumberQn=qname(jenvNamespace, 'ChamberOfCommerceRegistrationNumber'),
|
|
207
252
|
documentAdoptionDateQn=qname(jenvNamespace, 'DocumentAdoptionDate'),
|
|
208
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"
|
|
@@ -19,12 +19,7 @@ from arelle.utils.validate.Validation import Validation
|
|
|
19
19
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
20
20
|
from arelle.XmlValidate import INVALID
|
|
21
21
|
|
|
22
|
-
from ..DisclosureSystems import
|
|
23
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
24
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
25
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
26
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
27
|
-
)
|
|
22
|
+
from ..DisclosureSystems import NT_DISCLOSURE_SYSTEMS
|
|
28
23
|
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
29
24
|
|
|
30
25
|
if TYPE_CHECKING:
|
|
@@ -45,12 +40,7 @@ def _getReportingPeriodDateValue(modelXbrl: ModelXbrl, qname: QName) -> date | N
|
|
|
45
40
|
|
|
46
41
|
@validation(
|
|
47
42
|
hook=ValidationHook.XBRL_FINALLY,
|
|
48
|
-
disclosureSystems=
|
|
49
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
50
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
51
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
52
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
53
|
-
],
|
|
43
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
54
44
|
)
|
|
55
45
|
def rule_br_kvk_2_04(
|
|
56
46
|
pluginData: PluginValidationDataExtension,
|
|
@@ -123,12 +113,7 @@ def rule_br_kvk_2_04(
|
|
|
123
113
|
|
|
124
114
|
@validation(
|
|
125
115
|
hook=ValidationHook.XBRL_FINALLY,
|
|
126
|
-
disclosureSystems=
|
|
127
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
128
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
129
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
130
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
131
|
-
],
|
|
116
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
132
117
|
)
|
|
133
118
|
def rule_br_kvk_3_01(
|
|
134
119
|
pluginData: PluginValidationDataExtension,
|
|
@@ -164,12 +149,7 @@ def rule_br_kvk_3_01(
|
|
|
164
149
|
|
|
165
150
|
@validation(
|
|
166
151
|
hook=ValidationHook.XBRL_FINALLY,
|
|
167
|
-
disclosureSystems=
|
|
168
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
169
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
170
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
171
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
172
|
-
],
|
|
152
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
173
153
|
)
|
|
174
154
|
def rule_br_kvk_4_07(
|
|
175
155
|
pluginData: PluginValidationDataExtension,
|
|
@@ -197,12 +177,7 @@ def rule_br_kvk_4_07(
|
|
|
197
177
|
|
|
198
178
|
@validation(
|
|
199
179
|
hook=ValidationHook.XBRL_FINALLY,
|
|
200
|
-
disclosureSystems=
|
|
201
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
202
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
203
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
204
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
205
|
-
],
|
|
180
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
206
181
|
)
|
|
207
182
|
def rule_br_kvk_4_10(
|
|
208
183
|
pluginData: PluginValidationDataExtension,
|
|
@@ -230,12 +205,7 @@ def rule_br_kvk_4_10(
|
|
|
230
205
|
|
|
231
206
|
@validation(
|
|
232
207
|
hook=ValidationHook.XBRL_FINALLY,
|
|
233
|
-
disclosureSystems=
|
|
234
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
235
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
236
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
237
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
238
|
-
],
|
|
208
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
239
209
|
)
|
|
240
210
|
def rule_br_kvk_4_12(
|
|
241
211
|
pluginData: PluginValidationDataExtension,
|
|
@@ -268,12 +238,7 @@ def rule_br_kvk_4_12(
|
|
|
268
238
|
|
|
269
239
|
@validation(
|
|
270
240
|
hook=ValidationHook.XBRL_FINALLY,
|
|
271
|
-
disclosureSystems=
|
|
272
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
273
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
274
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
275
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
276
|
-
],
|
|
241
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
277
242
|
)
|
|
278
243
|
def rule_br_kvk_4_16(
|
|
279
244
|
pluginData: PluginValidationDataExtension,
|
|
@@ -310,12 +275,7 @@ def rule_br_kvk_4_16(
|
|
|
310
275
|
|
|
311
276
|
@validation(
|
|
312
277
|
hook=ValidationHook.XBRL_FINALLY,
|
|
313
|
-
disclosureSystems=
|
|
314
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
315
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
316
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
317
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
318
|
-
],
|
|
278
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
319
279
|
)
|
|
320
280
|
def rule_br_kvk_4_17(
|
|
321
281
|
pluginData: PluginValidationDataExtension,
|
|
@@ -343,12 +303,7 @@ def rule_br_kvk_4_17(
|
|
|
343
303
|
|
|
344
304
|
@validation(
|
|
345
305
|
hook=ValidationHook.XBRL_FINALLY,
|
|
346
|
-
disclosureSystems=
|
|
347
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
348
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
349
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
350
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
351
|
-
],
|
|
306
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
352
307
|
)
|
|
353
308
|
def rule_br_kvk_4_20(
|
|
354
309
|
pluginData: PluginValidationDataExtension,
|
|
@@ -5,7 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
|
|
6
6
|
from collections import defaultdict
|
|
7
7
|
from collections.abc import Iterable
|
|
8
|
-
from typing import Any
|
|
8
|
+
from typing import Any
|
|
9
9
|
|
|
10
10
|
from lxml.etree import _Element
|
|
11
11
|
|
|
@@ -21,12 +21,7 @@ from arelle.typing import TypeGetText
|
|
|
21
21
|
from arelle.utils.PluginHooks import ValidationHook
|
|
22
22
|
from arelle.utils.validate.Decorator import validation
|
|
23
23
|
from arelle.utils.validate.Validation import Validation
|
|
24
|
-
from ..DisclosureSystems import
|
|
25
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
26
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
27
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
28
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
29
|
-
)
|
|
24
|
+
from ..DisclosureSystems import NT_DISCLOSURE_SYSTEMS
|
|
30
25
|
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
31
26
|
|
|
32
27
|
_: TypeGetText
|
|
@@ -44,12 +39,7 @@ INSTANCE_ELEMENT_ORDER = {
|
|
|
44
39
|
|
|
45
40
|
@validation(
|
|
46
41
|
hook=ValidationHook.XBRL_FINALLY,
|
|
47
|
-
disclosureSystems=
|
|
48
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
49
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
50
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
51
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
52
|
-
],
|
|
42
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
53
43
|
)
|
|
54
44
|
def rule_fg_nl_03(
|
|
55
45
|
pluginData: PluginValidationDataExtension,
|
|
@@ -96,12 +86,7 @@ def rule_fg_nl_03(
|
|
|
96
86
|
|
|
97
87
|
@validation(
|
|
98
88
|
hook=ValidationHook.XBRL_FINALLY,
|
|
99
|
-
disclosureSystems=
|
|
100
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
101
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
102
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
103
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
104
|
-
],
|
|
89
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
105
90
|
)
|
|
106
91
|
def rule_fg_nl_04(
|
|
107
92
|
pluginData: PluginValidationDataExtension,
|
|
@@ -160,12 +145,7 @@ def rule_fg_nl_04(
|
|
|
160
145
|
|
|
161
146
|
@validation(
|
|
162
147
|
hook=ValidationHook.XBRL_FINALLY,
|
|
163
|
-
disclosureSystems=
|
|
164
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
165
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
166
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
167
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
168
|
-
],
|
|
148
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
169
149
|
)
|
|
170
150
|
def rule_fg_nl_05(
|
|
171
151
|
pluginData: PluginValidationDataExtension,
|
|
@@ -193,7 +173,6 @@ def rule_fg_nl_05(
|
|
|
193
173
|
continue
|
|
194
174
|
usedPrefixes.add(elt.qname.prefix)
|
|
195
175
|
for attrTag in elt.keys():
|
|
196
|
-
attrTag = cast(str, attrTag)
|
|
197
176
|
if attrTag.startswith("{"):
|
|
198
177
|
prefix = XmlUtil.clarkNotationToPrefixNsLocalname(elt, attrTag, isAttribute=True)[0]
|
|
199
178
|
if prefix:
|
|
@@ -230,12 +209,7 @@ def rule_fg_nl_05(
|
|
|
230
209
|
|
|
231
210
|
@validation(
|
|
232
211
|
hook=ValidationHook.XBRL_FINALLY,
|
|
233
|
-
disclosureSystems=
|
|
234
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
235
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
236
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
237
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
238
|
-
],
|
|
212
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
239
213
|
)
|
|
240
214
|
def rule_fg_nl_09(
|
|
241
215
|
pluginData: PluginValidationDataExtension,
|
|
@@ -257,12 +231,7 @@ def rule_fg_nl_09(
|
|
|
257
231
|
|
|
258
232
|
@validation(
|
|
259
233
|
hook=ValidationHook.XBRL_FINALLY,
|
|
260
|
-
disclosureSystems=
|
|
261
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
262
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
263
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
264
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
265
|
-
],
|
|
234
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
266
235
|
)
|
|
267
236
|
def rule_fg_nl_11(
|
|
268
237
|
pluginData: PluginValidationDataExtension,
|
|
@@ -16,12 +16,7 @@ from arelle.utils.PluginHooks import ValidationHook
|
|
|
16
16
|
from arelle.utils.validate.Decorator import validation
|
|
17
17
|
from arelle.utils.validate.Validation import Validation
|
|
18
18
|
from lxml.etree import _Element
|
|
19
|
-
from ..DisclosureSystems import
|
|
20
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
21
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
22
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
23
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
24
|
-
)
|
|
19
|
+
from ..DisclosureSystems import NT_DISCLOSURE_SYSTEMS
|
|
25
20
|
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
26
21
|
|
|
27
22
|
_: TypeGetText
|
|
@@ -33,12 +28,7 @@ ACCEPTED_DECIMAL_VALUES = ('INF', '-9', '-6', '-3', '0', '2')
|
|
|
33
28
|
|
|
34
29
|
@validation(
|
|
35
30
|
hook=ValidationHook.XBRL_FINALLY,
|
|
36
|
-
disclosureSystems=
|
|
37
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
38
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
39
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
40
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
41
|
-
],
|
|
31
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
42
32
|
)
|
|
43
33
|
def rule_fr_kvk_1_01(
|
|
44
34
|
pluginData: PluginValidationDataExtension,
|
|
@@ -63,12 +53,7 @@ def rule_fr_kvk_1_01(
|
|
|
63
53
|
|
|
64
54
|
@validation(
|
|
65
55
|
hook=ValidationHook.XBRL_FINALLY,
|
|
66
|
-
disclosureSystems=
|
|
67
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
68
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
69
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
70
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
71
|
-
],
|
|
56
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
72
57
|
)
|
|
73
58
|
def rule_fr_kvk_2_01(
|
|
74
59
|
pluginData: PluginValidationDataExtension,
|
|
@@ -95,12 +80,7 @@ def rule_fr_kvk_2_01(
|
|
|
95
80
|
|
|
96
81
|
@validation(
|
|
97
82
|
hook=ValidationHook.XBRL_FINALLY,
|
|
98
|
-
disclosureSystems=
|
|
99
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
100
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
101
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
102
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
103
|
-
],
|
|
83
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
104
84
|
)
|
|
105
85
|
def rule_fr_kvk_2_02(
|
|
106
86
|
pluginData: PluginValidationDataExtension,
|
|
@@ -131,12 +111,7 @@ def rule_fr_kvk_2_02(
|
|
|
131
111
|
|
|
132
112
|
@validation(
|
|
133
113
|
hook=ValidationHook.XBRL_FINALLY,
|
|
134
|
-
disclosureSystems=
|
|
135
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
136
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
137
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
138
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
139
|
-
],
|
|
114
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
140
115
|
)
|
|
141
116
|
def rule_fr_kvk_2_03(
|
|
142
117
|
pluginData: PluginValidationDataExtension,
|
|
@@ -171,12 +146,7 @@ def rule_fr_kvk_2_03(
|
|
|
171
146
|
|
|
172
147
|
@validation(
|
|
173
148
|
hook=ValidationHook.XBRL_FINALLY,
|
|
174
|
-
disclosureSystems=
|
|
175
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
176
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
177
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
178
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
179
|
-
],
|
|
149
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
180
150
|
)
|
|
181
151
|
def rule_fr_kvk_5_01(
|
|
182
152
|
pluginData: PluginValidationDataExtension,
|
|
@@ -204,12 +174,7 @@ def rule_fr_kvk_5_01(
|
|
|
204
174
|
|
|
205
175
|
@validation(
|
|
206
176
|
hook=ValidationHook.XBRL_FINALLY,
|
|
207
|
-
disclosureSystems=
|
|
208
|
-
DISCLOSURE_SYSTEM_NT16,
|
|
209
|
-
DISCLOSURE_SYSTEM_NT17,
|
|
210
|
-
DISCLOSURE_SYSTEM_NT18,
|
|
211
|
-
DISCLOSURE_SYSTEM_NT19,
|
|
212
|
-
],
|
|
177
|
+
disclosureSystems=NT_DISCLOSURE_SYSTEMS,
|
|
213
178
|
)
|
|
214
179
|
def rule_fr_kvk_5_02(
|
|
215
180
|
pluginData: PluginValidationDataExtension,
|