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.
Files changed (71) hide show
  1. arelle/BetaFeatures.py +0 -21
  2. arelle/Cntlr.py +7 -1
  3. arelle/CntlrCmdLine.py +95 -19
  4. arelle/CntlrWinMain.py +4 -1
  5. arelle/DialogFind.py +1 -1
  6. arelle/ModelDtsObject.py +2 -0
  7. arelle/ModelObject.py +16 -18
  8. arelle/ModelObjectFactory.py +17 -15
  9. arelle/ModelXbrl.py +7 -1
  10. arelle/PluginManager.py +1 -5
  11. arelle/RuntimeOptions.py +1 -0
  12. arelle/UrlUtil.py +11 -0
  13. arelle/Validate.py +3 -3
  14. arelle/ValidateXbrl.py +2 -1
  15. arelle/ValidateXbrlCalcs.py +210 -186
  16. arelle/WebCache.py +2 -8
  17. arelle/XbrlConst.py +2 -0
  18. arelle/XmlUtil.py +16 -21
  19. arelle/XmlValidate.py +4 -6
  20. arelle/_version.py +2 -2
  21. arelle/config/rosettaEntitlements.plist +8 -0
  22. arelle/conformance/CSVTestcaseLoader.py +1 -1
  23. arelle/formula/XPathContext.py +3 -3
  24. arelle/logging/formatters/LogFormatter.py +3 -1
  25. arelle/packages/report/ReportPackage.py +9 -1
  26. arelle/plugin/inlineXbrlDocumentSet.py +1 -3
  27. arelle/plugin/validate/DBA/DisclosureSystems.py +19 -1
  28. arelle/plugin/validate/DBA/resources/config.xml +5 -0
  29. arelle/plugin/validate/DBA/rules/fr.py +19 -2
  30. arelle/plugin/validate/DBA/rules/tc.py +2 -0
  31. arelle/plugin/validate/DBA/rules/th.py +6 -0
  32. arelle/plugin/validate/DBA/rules/tm.py +18 -5
  33. arelle/plugin/validate/DBA/rules/tr.py +11 -5
  34. arelle/plugin/validate/EDINET/ControllerPluginData.py +2 -1
  35. arelle/plugin/validate/EDINET/NamespaceConfig.py +50 -0
  36. arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +33 -78
  37. arelle/plugin/validate/EDINET/TableOfContentsBuilder.py +153 -51
  38. arelle/plugin/validate/EDINET/rules/contexts.py +1 -1
  39. arelle/plugin/validate/EDINET/rules/edinet.py +163 -20
  40. arelle/plugin/validate/EDINET/rules/gfm.py +88 -1
  41. arelle/plugin/validate/EDINET/rules/upload.py +1 -1
  42. arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +3 -3
  43. arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +42 -14
  44. arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +14 -3
  45. arelle/plugin/validate/ESEF/__init__.py +10 -5
  46. arelle/plugin/validate/ESEF/resources/authority-validations.json +10 -5
  47. arelle/plugin/validate/NL/DisclosureSystems.py +22 -0
  48. arelle/plugin/validate/NL/PluginValidationDataExtension.py +20 -0
  49. arelle/plugin/validate/NL/ValidationPluginExtension.py +48 -3
  50. arelle/plugin/validate/NL/resources/config.xml +18 -0
  51. arelle/plugin/validate/NL/rules/br_kvk.py +9 -54
  52. arelle/plugin/validate/NL/rules/fg_nl.py +7 -38
  53. arelle/plugin/validate/NL/rules/fr_kvk.py +7 -42
  54. arelle/plugin/validate/NL/rules/fr_nl.py +25 -140
  55. arelle/plugin/validate/NL/rules/nl_kvk.py +125 -12
  56. arelle/plugin/validate/ROS/rules/ros.py +3 -1
  57. arelle/plugin/validate/UK/__init__.py +70 -14
  58. arelle/utils/EntryPointDetection.py +17 -11
  59. arelle/utils/validate/ESEFImage.py +3 -3
  60. arelle/utils/validate/Validation.py +9 -0
  61. arelle/utils/validate/ValidationPlugin.py +14 -12
  62. {arelle_release-2.37.71.dist-info → arelle_release-2.38.0.dist-info}/METADATA +10 -5
  63. {arelle_release-2.37.71.dist-info → arelle_release-2.38.0.dist-info}/RECORD +67 -69
  64. {arelle_release-2.37.71.dist-info → arelle_release-2.38.0.dist-info}/licenses/LICENSE.md +0 -3
  65. arelle/model/CommentBase.py +0 -9
  66. arelle/model/ElementBase.py +0 -11
  67. arelle/model/PIBase.py +0 -10
  68. arelle/model/__init__.py +0 -15
  69. {arelle_release-2.37.71.dist-info → arelle_release-2.38.0.dist-info}/WHEEL +0 -0
  70. {arelle_release-2.37.71.dist-info → arelle_release-2.38.0.dist-info}/entry_points.txt +0 -0
  71. {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 (DISCLOSURE_SYSTEM_NT16, DISCLOSURE_SYSTEM_NT17, DISCLOSURE_SYSTEM_NT18,
15
- DISCLOSURE_SYSTEM_NT19, DISCLOSURE_SYSTEM_NL_INLINE_2024,
16
- DISCLOSURE_SYSTEM_NL_INLINE_2024_GAAP_OTHER)
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, cast
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,