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.
Files changed (204) hide show
  1. arelle/BetaFeatures.py +0 -21
  2. arelle/Cntlr.py +15 -8
  3. arelle/CntlrCmdLine.py +121 -56
  4. arelle/CntlrWinMain.py +143 -70
  5. arelle/DialogFind.py +1 -1
  6. arelle/DialogPluginManager.py +6 -4
  7. arelle/DisclosureSystem.py +7 -0
  8. arelle/ErrorManager.py +21 -6
  9. arelle/FileSource.py +11 -4
  10. arelle/FunctionIxt.py +16 -11
  11. arelle/HtmlUtil.py +5 -4
  12. arelle/LeiUtil.py +63 -43
  13. arelle/ModelDocument.py +20 -15
  14. arelle/ModelDtsObject.py +8 -0
  15. arelle/ModelInstanceObject.py +1 -1
  16. arelle/ModelObject.py +16 -18
  17. arelle/ModelObjectFactory.py +35 -17
  18. arelle/ModelXbrl.py +28 -11
  19. arelle/PluginManager.py +130 -105
  20. arelle/RuntimeOptions.py +1 -0
  21. arelle/UrlUtil.py +14 -0
  22. arelle/Validate.py +17 -12
  23. arelle/ValidateDuplicateFacts.py +3 -1
  24. arelle/ValidateFileSource.py +38 -0
  25. arelle/ValidateFilingText.py +3 -3
  26. arelle/ValidateXbrl.py +5 -2
  27. arelle/ValidateXbrlCalcs.py +210 -186
  28. arelle/ValidateXbrlDTS.py +1 -1
  29. arelle/ViewFile.py +1 -0
  30. arelle/ViewFileFactTable.py +2 -2
  31. arelle/ViewWinDTS.py +4 -1
  32. arelle/WebCache.py +28 -24
  33. arelle/XbrlConst.py +22 -0
  34. arelle/XmlUtil.py +16 -21
  35. arelle/XmlValidate.py +6 -9
  36. arelle/_version.py +16 -3
  37. arelle/api/Session.py +11 -2
  38. arelle/config/disclosuresystems.xsd +2 -0
  39. arelle/config/rosettaEntitlements.plist +8 -0
  40. arelle/conformance/CSVTestcaseLoader.py +1 -1
  41. arelle/formula/XPathContext.py +3 -3
  42. arelle/logging/formatters/LogFormatter.py +3 -1
  43. arelle/packages/report/ReportPackage.py +26 -13
  44. arelle/packages/report/ReportPackageConst.py +0 -1
  45. arelle/plugin/inlineXbrlDocumentSet.py +19 -5
  46. arelle/plugin/validate/DBA/DisclosureSystems.py +19 -1
  47. arelle/plugin/validate/DBA/PluginValidationDataExtension.py +2 -4
  48. arelle/plugin/validate/DBA/ValidationPluginExtension.py +2 -1
  49. arelle/plugin/validate/DBA/resources/config.xml +5 -0
  50. arelle/plugin/validate/DBA/rules/__init__.py +2 -2
  51. arelle/plugin/validate/DBA/rules/fr.py +19 -2
  52. arelle/plugin/validate/DBA/rules/tc.py +2 -0
  53. arelle/plugin/validate/DBA/rules/th.py +6 -0
  54. arelle/plugin/validate/DBA/rules/tm.py +18 -5
  55. arelle/plugin/validate/DBA/rules/tr.py +11 -5
  56. arelle/plugin/validate/EDINET/Constants.py +193 -9
  57. arelle/plugin/validate/EDINET/ContextRequirement.py +58 -0
  58. arelle/plugin/validate/EDINET/ControllerPluginData.py +220 -1
  59. arelle/plugin/validate/EDINET/CoverItemRequirements.py +42 -0
  60. arelle/plugin/validate/EDINET/DeiRequirements.py +118 -0
  61. arelle/plugin/validate/EDINET/FilingFormat.py +275 -0
  62. arelle/plugin/validate/EDINET/FormType.py +134 -0
  63. arelle/plugin/validate/EDINET/ManifestInstance.py +72 -5
  64. arelle/plugin/validate/EDINET/NamespaceConfig.py +50 -0
  65. arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +493 -132
  66. arelle/plugin/validate/EDINET/{InstanceType.py → ReportFolderType.py} +72 -15
  67. arelle/plugin/validate/EDINET/Statement.py +139 -0
  68. arelle/plugin/validate/EDINET/TableOfContentsBuilder.py +595 -0
  69. arelle/plugin/validate/EDINET/UploadContents.py +48 -0
  70. arelle/plugin/validate/EDINET/ValidationPluginExtension.py +20 -2
  71. arelle/plugin/validate/EDINET/__init__.py +31 -6
  72. arelle/plugin/validate/EDINET/resources/config.xml +8 -1
  73. arelle/plugin/validate/EDINET/resources/cover-item-requirements.json +793 -0
  74. arelle/plugin/validate/EDINET/resources/dei-requirements.csv +27 -0
  75. arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml +2 -0
  76. arelle/plugin/validate/EDINET/rules/contexts.py +375 -14
  77. arelle/plugin/validate/EDINET/rules/edinet.py +1934 -45
  78. arelle/plugin/validate/EDINET/rules/frta.py +122 -3
  79. arelle/plugin/validate/EDINET/rules/gfm.py +1907 -11
  80. arelle/plugin/validate/EDINET/rules/upload.py +989 -141
  81. arelle/plugin/validate/ESEF/Const.py +3 -1
  82. arelle/plugin/validate/ESEF/ESEF_2021/DTS.py +5 -0
  83. arelle/plugin/validate/ESEF/ESEF_2021/Image.py +2 -2
  84. arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +23 -20
  85. arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +47 -14
  86. arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +100 -25
  87. arelle/plugin/validate/ESEF/__init__.py +20 -6
  88. arelle/plugin/validate/ESEF/resources/authority-validations.json +76 -9
  89. arelle/plugin/validate/ESEF/resources/config.xml +20 -0
  90. arelle/plugin/validate/NL/DisclosureSystems.py +22 -0
  91. arelle/plugin/validate/NL/PluginValidationDataExtension.py +27 -9
  92. arelle/plugin/validate/NL/ValidationPluginExtension.py +51 -7
  93. arelle/plugin/validate/NL/resources/config.xml +18 -0
  94. arelle/plugin/validate/NL/rules/br_kvk.py +17 -61
  95. arelle/plugin/validate/NL/rules/fg_nl.py +7 -38
  96. arelle/plugin/validate/NL/rules/fr_kvk.py +7 -42
  97. arelle/plugin/validate/NL/rules/fr_nl.py +31 -147
  98. arelle/plugin/validate/NL/rules/nl_kvk.py +142 -28
  99. arelle/plugin/validate/ROS/PluginValidationDataExtension.py +2 -0
  100. arelle/plugin/validate/ROS/ValidationPluginExtension.py +4 -1
  101. arelle/plugin/validate/ROS/rules/ros.py +41 -9
  102. arelle/plugin/validate/UK/ValidateUK.py +130 -66
  103. arelle/plugin/validate/UK/__init__.py +89 -103
  104. arelle/utils/EntryPointDetection.py +79 -13
  105. arelle/utils/PluginHooks.py +125 -0
  106. arelle/utils/validate/ESEFImage.py +6 -6
  107. arelle/utils/validate/Validation.py +18 -0
  108. arelle/utils/validate/ValidationPlugin.py +76 -11
  109. arelle/utils/validate/ValidationUtil.py +35 -3
  110. {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/METADATA +30 -20
  111. {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/RECORD +115 -191
  112. {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/licenses/LICENSE.md +0 -3
  113. arelle/archive/CustomLogger.py +0 -43
  114. arelle/archive/LoadEFMvalidate.py +0 -32
  115. arelle/archive/LoadSavePreLbCsv.py +0 -26
  116. arelle/archive/LoadValidate.cs +0 -31
  117. arelle/archive/LoadValidate.py +0 -36
  118. arelle/archive/LoadValidateCmdLine.java +0 -69
  119. arelle/archive/LoadValidatePostedZip.java +0 -57
  120. arelle/archive/LoadValidateWebService.java +0 -34
  121. arelle/archive/SaveTableToExelle.py +0 -140
  122. arelle/archive/TR3toTR4.py +0 -88
  123. arelle/archive/plugin/ESEF_2022/__init__.py +0 -47
  124. arelle/archive/plugin/bigInstance.py +0 -394
  125. arelle/archive/plugin/cmdWebServerExtension.py +0 -43
  126. arelle/archive/plugin/crashTest.py +0 -38
  127. arelle/archive/plugin/functionsXmlCreation.py +0 -106
  128. arelle/archive/plugin/hello_i18n.pot +0 -26
  129. arelle/archive/plugin/hello_i18n.py +0 -32
  130. arelle/archive/plugin/importTestChild1.py +0 -21
  131. arelle/archive/plugin/importTestChild2.py +0 -22
  132. arelle/archive/plugin/importTestGrandchild1.py +0 -21
  133. arelle/archive/plugin/importTestGrandchild2.py +0 -21
  134. arelle/archive/plugin/importTestImported1.py +0 -23
  135. arelle/archive/plugin/importTestImported11.py +0 -22
  136. arelle/archive/plugin/importTestParent.py +0 -48
  137. arelle/archive/plugin/instanceInfo.py +0 -306
  138. arelle/archive/plugin/loadFromOIM-2018.py +0 -1282
  139. arelle/archive/plugin/locale/fr/LC_MESSAGES/hello_i18n.po +0 -25
  140. arelle/archive/plugin/objectmaker.py +0 -285
  141. arelle/archive/plugin/packagedImportTest/__init__.py +0 -47
  142. arelle/archive/plugin/packagedImportTest/importTestChild1.py +0 -21
  143. arelle/archive/plugin/packagedImportTest/importTestChild2.py +0 -22
  144. arelle/archive/plugin/packagedImportTest/importTestGrandchild1.py +0 -21
  145. arelle/archive/plugin/packagedImportTest/importTestGrandchild2.py +0 -21
  146. arelle/archive/plugin/packagedImportTest/importTestImported1.py +0 -24
  147. arelle/archive/plugin/packagedImportTest/importTestImported11.py +0 -21
  148. arelle/archive/plugin/packagedImportTest/subdir/importTestImported111.py +0 -21
  149. arelle/archive/plugin/packagedImportTest/subdir/subsubdir/importTestImported1111.py +0 -21
  150. arelle/archive/plugin/sakaCalendar.py +0 -215
  151. arelle/archive/plugin/saveInstanceInfoset.py +0 -121
  152. arelle/archive/plugin/sphinx/FormulaGenerator.py +0 -823
  153. arelle/archive/plugin/sphinx/SphinxContext.py +0 -404
  154. arelle/archive/plugin/sphinx/SphinxEvaluator.py +0 -783
  155. arelle/archive/plugin/sphinx/SphinxMethods.py +0 -1287
  156. arelle/archive/plugin/sphinx/SphinxParser.py +0 -1093
  157. arelle/archive/plugin/sphinx/SphinxValidator.py +0 -163
  158. arelle/archive/plugin/sphinx/US-GAAP Ratios Example.xsr +0 -52
  159. arelle/archive/plugin/sphinx/__init__.py +0 -285
  160. arelle/archive/plugin/streamingExtensions.py +0 -335
  161. arelle/archive/plugin/updateTableLB.py +0 -242
  162. arelle/archive/plugin/validate/SBRnl/CustomLoader.py +0 -19
  163. arelle/archive/plugin/validate/SBRnl/DTS.py +0 -305
  164. arelle/archive/plugin/validate/SBRnl/Dimensions.py +0 -357
  165. arelle/archive/plugin/validate/SBRnl/Document.py +0 -799
  166. arelle/archive/plugin/validate/SBRnl/Filing.py +0 -467
  167. arelle/archive/plugin/validate/SBRnl/__init__.py +0 -75
  168. arelle/archive/plugin/validate/SBRnl/config.xml +0 -26
  169. arelle/archive/plugin/validate/SBRnl/sbr-nl-taxonomies.xml +0 -754
  170. arelle/archive/plugin/validate/USBestPractices.py +0 -570
  171. arelle/archive/plugin/validate/USCorpAction.py +0 -557
  172. arelle/archive/plugin/validate/USSecTagging.py +0 -337
  173. arelle/archive/plugin/validate/XDC/__init__.py +0 -77
  174. arelle/archive/plugin/validate/XDC/config.xml +0 -20
  175. arelle/archive/plugin/validate/XFsyntax/__init__.py +0 -64
  176. arelle/archive/plugin/validate/XFsyntax/xf.py +0 -2227
  177. arelle/archive/plugin/validate/calc2.py +0 -536
  178. arelle/archive/plugin/validateSchemaLxml.py +0 -156
  179. arelle/archive/plugin/validateTableInfoset.py +0 -52
  180. arelle/archive/us-gaap-dei-docType-extraction-frm.xml +0 -90
  181. arelle/archive/us-gaap-dei-ratio-cash-frm.xml +0 -150
  182. arelle/examples/plugin/formulaSuiteConverter.py +0 -212
  183. arelle/examples/plugin/functionsCustom.py +0 -59
  184. arelle/examples/plugin/hello_dolly.py +0 -64
  185. arelle/examples/plugin/multi.py +0 -58
  186. arelle/examples/plugin/rssSaveOim.py +0 -96
  187. arelle/examples/plugin/validate/XYZ/DisclosureSystems.py +0 -2
  188. arelle/examples/plugin/validate/XYZ/PluginValidationDataExtension.py +0 -10
  189. arelle/examples/plugin/validate/XYZ/ValidationPluginExtension.py +0 -49
  190. arelle/examples/plugin/validate/XYZ/__init__.py +0 -75
  191. arelle/examples/plugin/validate/XYZ/resources/config.xml +0 -16
  192. arelle/examples/plugin/validate/XYZ/rules/__init__.py +0 -0
  193. arelle/examples/plugin/validate/XYZ/rules/rules01.py +0 -110
  194. arelle/examples/plugin/validate/XYZ/rules/rules02.py +0 -59
  195. arelle/model/CommentBase.py +0 -9
  196. arelle/model/ElementBase.py +0 -11
  197. arelle/model/PIBase.py +0 -10
  198. arelle/model/__init__.py +0 -15
  199. arelle/scripts-macOS/startWebServer.command +0 -3
  200. arelle/scripts-unix/startWebServer.sh +0 -1
  201. arelle/scripts-windows/startWebServer.bat +0 -5
  202. {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/WHEEL +0 -0
  203. {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/entry_points.txt +0 -0
  204. {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/top_level.txt +0 -0
@@ -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,
@@ -22,12 +22,7 @@ from arelle.utils.Contexts import partitionModelXbrlContexts
22
22
  from arelle.utils.PluginHooks import ValidationHook
23
23
  from arelle.utils.validate.Decorator import validation
24
24
  from arelle.utils.validate.Validation import Validation
25
- from ..DisclosureSystems import (
26
- DISCLOSURE_SYSTEM_NT16,
27
- DISCLOSURE_SYSTEM_NT17,
28
- DISCLOSURE_SYSTEM_NT18,
29
- DISCLOSURE_SYSTEM_NT19,
30
- )
25
+ from ..DisclosureSystems import NT_DISCLOSURE_SYSTEMS
31
26
  from ..PluginValidationDataExtension import PluginValidationDataExtension
32
27
 
33
28
  _: TypeGetText
@@ -72,12 +67,7 @@ XHTML_LIST_ITEM_TYPES = {
72
67
 
73
68
  @validation(
74
69
  hook=ValidationHook.XBRL_FINALLY,
75
- disclosureSystems=[
76
- DISCLOSURE_SYSTEM_NT16,
77
- DISCLOSURE_SYSTEM_NT17,
78
- DISCLOSURE_SYSTEM_NT18,
79
- DISCLOSURE_SYSTEM_NT19,
80
- ],
70
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
81
71
  )
82
72
  def rule_fr_nl_1_02(
83
73
  pluginData: PluginValidationDataExtension,
@@ -123,12 +113,7 @@ def rule_fr_nl_1_02(
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_fr_nl_1_03(
134
119
  pluginData: PluginValidationDataExtension,
@@ -151,12 +136,7 @@ def rule_fr_nl_1_03(
151
136
 
152
137
  @validation(
153
138
  hook=ValidationHook.XBRL_FINALLY,
154
- disclosureSystems=[
155
- DISCLOSURE_SYSTEM_NT16,
156
- DISCLOSURE_SYSTEM_NT17,
157
- DISCLOSURE_SYSTEM_NT18,
158
- DISCLOSURE_SYSTEM_NT19,
159
- ],
139
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
160
140
  )
161
141
  def rule_fr_nl_1_04(
162
142
  pluginData: PluginValidationDataExtension,
@@ -211,12 +191,7 @@ def rule_fr_nl_1_04(
211
191
 
212
192
  @validation(
213
193
  hook=ValidationHook.XBRL_FINALLY,
214
- disclosureSystems=[
215
- DISCLOSURE_SYSTEM_NT16,
216
- DISCLOSURE_SYSTEM_NT17,
217
- DISCLOSURE_SYSTEM_NT18,
218
- DISCLOSURE_SYSTEM_NT19,
219
- ],
194
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
220
195
  )
221
196
  def rule_fr_nl_1_05(
222
197
  pluginData: PluginValidationDataExtension,
@@ -239,12 +214,7 @@ def rule_fr_nl_1_05(
239
214
 
240
215
  @validation(
241
216
  hook=ValidationHook.XBRL_FINALLY,
242
- disclosureSystems=[
243
- DISCLOSURE_SYSTEM_NT16,
244
- DISCLOSURE_SYSTEM_NT17,
245
- DISCLOSURE_SYSTEM_NT18,
246
- DISCLOSURE_SYSTEM_NT19,
247
- ],
217
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
248
218
  )
249
219
  def rule_fr_nl_1_06(
250
220
  pluginData: PluginValidationDataExtension,
@@ -273,12 +243,7 @@ def rule_fr_nl_1_06(
273
243
 
274
244
  @validation(
275
245
  hook=ValidationHook.XBRL_FINALLY,
276
- disclosureSystems=[
277
- DISCLOSURE_SYSTEM_NT16,
278
- DISCLOSURE_SYSTEM_NT17,
279
- DISCLOSURE_SYSTEM_NT18,
280
- DISCLOSURE_SYSTEM_NT19,
281
- ],
246
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
282
247
  )
283
248
  def rule_fr_nl_1_01(
284
249
  pluginData: PluginValidationDataExtension,
@@ -307,12 +272,7 @@ def rule_fr_nl_1_01(
307
272
 
308
273
  @validation(
309
274
  hook=ValidationHook.XBRL_FINALLY,
310
- disclosureSystems=[
311
- DISCLOSURE_SYSTEM_NT16,
312
- DISCLOSURE_SYSTEM_NT17,
313
- DISCLOSURE_SYSTEM_NT18,
314
- DISCLOSURE_SYSTEM_NT19,
315
- ],
275
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
316
276
  )
317
277
  def rule_fr_nl_2_03(
318
278
  pluginData: PluginValidationDataExtension,
@@ -337,12 +297,7 @@ def rule_fr_nl_2_03(
337
297
 
338
298
  @validation(
339
299
  hook=ValidationHook.XBRL_FINALLY,
340
- disclosureSystems=[
341
- DISCLOSURE_SYSTEM_NT16,
342
- DISCLOSURE_SYSTEM_NT17,
343
- DISCLOSURE_SYSTEM_NT18,
344
- DISCLOSURE_SYSTEM_NT19,
345
- ],
300
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
346
301
  )
347
302
  def rule_fr_nl_2_04(
348
303
  pluginData: PluginValidationDataExtension,
@@ -369,12 +324,7 @@ def rule_fr_nl_2_04(
369
324
 
370
325
  @validation(
371
326
  hook=ValidationHook.XBRL_FINALLY,
372
- disclosureSystems=[
373
- DISCLOSURE_SYSTEM_NT16,
374
- DISCLOSURE_SYSTEM_NT17,
375
- DISCLOSURE_SYSTEM_NT18,
376
- DISCLOSURE_SYSTEM_NT19,
377
- ],
327
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
378
328
  )
379
329
  def rule_fr_nl_2_05(
380
330
  pluginData: PluginValidationDataExtension,
@@ -401,12 +351,7 @@ def rule_fr_nl_2_05(
401
351
 
402
352
  @validation(
403
353
  hook=ValidationHook.XBRL_FINALLY,
404
- disclosureSystems=[
405
- DISCLOSURE_SYSTEM_NT16,
406
- DISCLOSURE_SYSTEM_NT17,
407
- DISCLOSURE_SYSTEM_NT18,
408
- DISCLOSURE_SYSTEM_NT19,
409
- ],
354
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
410
355
  )
411
356
  def rule_fr_nl_2_06(
412
357
  pluginData: PluginValidationDataExtension,
@@ -449,12 +394,7 @@ def rule_fr_nl_2_06(
449
394
 
450
395
  @validation(
451
396
  hook=ValidationHook.XBRL_FINALLY,
452
- disclosureSystems=[
453
- DISCLOSURE_SYSTEM_NT16,
454
- DISCLOSURE_SYSTEM_NT17,
455
- DISCLOSURE_SYSTEM_NT18,
456
- DISCLOSURE_SYSTEM_NT19,
457
- ],
397
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
458
398
  )
459
399
  def rule_fr_nl_2_07(
460
400
  pluginData: PluginValidationDataExtension,
@@ -476,12 +416,7 @@ def rule_fr_nl_2_07(
476
416
 
477
417
  @validation(
478
418
  hook=ValidationHook.XBRL_FINALLY,
479
- disclosureSystems=[
480
- DISCLOSURE_SYSTEM_NT16,
481
- DISCLOSURE_SYSTEM_NT17,
482
- DISCLOSURE_SYSTEM_NT18,
483
- DISCLOSURE_SYSTEM_NT19,
484
- ],
419
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
485
420
  )
486
421
  def rule_fr_nl_3_01(
487
422
  pluginData: PluginValidationDataExtension,
@@ -509,12 +444,7 @@ def rule_fr_nl_3_01(
509
444
 
510
445
  @validation(
511
446
  hook=ValidationHook.XBRL_FINALLY,
512
- disclosureSystems=[
513
- DISCLOSURE_SYSTEM_NT16,
514
- DISCLOSURE_SYSTEM_NT17,
515
- DISCLOSURE_SYSTEM_NT18,
516
- DISCLOSURE_SYSTEM_NT19,
517
- ],
447
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
518
448
  )
519
449
  def rule_fr_nl_3_02(
520
450
  pluginData: PluginValidationDataExtension,
@@ -536,12 +466,7 @@ def rule_fr_nl_3_02(
536
466
 
537
467
  @validation(
538
468
  hook=ValidationHook.XBRL_FINALLY,
539
- disclosureSystems=[
540
- DISCLOSURE_SYSTEM_NT16,
541
- DISCLOSURE_SYSTEM_NT17,
542
- DISCLOSURE_SYSTEM_NT18,
543
- DISCLOSURE_SYSTEM_NT19,
544
- ],
469
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
545
470
  )
546
471
  def rule_fr_nl_3_03(
547
472
  pluginData: PluginValidationDataExtension,
@@ -552,9 +477,9 @@ def rule_fr_nl_3_03(
552
477
  """
553
478
  FR-NL-3.03: An XBRL instance document MUST NOT contain unused contexts
554
479
  """
555
- unused_contexts = list(set(val.modelXbrl.contexts.values()) - set(val.modelXbrl.contextsInUse))
556
- unused_contexts.sort(key=lambda x: x.id)
557
- for context in unused_contexts:
480
+ unusedContexts = list(set(val.modelXbrl.contexts.values()) - set(val.modelXbrl.contextsInUse))
481
+ unusedContexts.sort(key=lambda x: x.id if x.id is not None else "")
482
+ for context in unusedContexts:
558
483
  yield Validation.error(
559
484
  codes='NL.FR-NL-3.03',
560
485
  msg=_('Unused context must not exist in XBRL instance document'),
@@ -564,12 +489,7 @@ def rule_fr_nl_3_03(
564
489
 
565
490
  @validation(
566
491
  hook=ValidationHook.XBRL_FINALLY,
567
- disclosureSystems=[
568
- DISCLOSURE_SYSTEM_NT16,
569
- DISCLOSURE_SYSTEM_NT17,
570
- DISCLOSURE_SYSTEM_NT18,
571
- DISCLOSURE_SYSTEM_NT19,
572
- ],
492
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
573
493
  )
574
494
  def rule_fr_nl_3_04(
575
495
  pluginData: PluginValidationDataExtension,
@@ -591,12 +511,7 @@ def rule_fr_nl_3_04(
591
511
 
592
512
  @validation(
593
513
  hook=ValidationHook.XBRL_FINALLY,
594
- disclosureSystems=[
595
- DISCLOSURE_SYSTEM_NT16,
596
- DISCLOSURE_SYSTEM_NT17,
597
- DISCLOSURE_SYSTEM_NT18,
598
- DISCLOSURE_SYSTEM_NT19,
599
- ],
514
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
600
515
  )
601
516
  def rule_fr_nl_4_01(
602
517
  pluginData: PluginValidationDataExtension,
@@ -621,12 +536,7 @@ def rule_fr_nl_4_01(
621
536
 
622
537
  @validation(
623
538
  hook=ValidationHook.XBRL_FINALLY,
624
- disclosureSystems=[
625
- DISCLOSURE_SYSTEM_NT16,
626
- DISCLOSURE_SYSTEM_NT17,
627
- DISCLOSURE_SYSTEM_NT18,
628
- DISCLOSURE_SYSTEM_NT19,
629
- ],
539
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
630
540
  )
631
541
  def rule_fr_nl_4_02(
632
542
  pluginData: PluginValidationDataExtension,
@@ -637,10 +547,9 @@ def rule_fr_nl_4_02(
637
547
  """
638
548
  FR-NL-4.02: An XBRL instance document MUST NOT contain unused 'xbrli:unit' elements
639
549
  """
640
- unused_units_set = set(val.modelXbrl.units.values()) - {fact.unit for fact in val.modelXbrl.facts if fact.unit is not None}
641
- unused_units = list(unused_units_set)
642
- unused_units.sort(key=lambda x: x.hash)
643
- for unit in unused_units:
550
+ unusedUnits = list(set(val.modelXbrl.units.values()) - set(val.modelXbrl.unitsInUse))
551
+ unusedUnits.sort(key=lambda x: x.hash)
552
+ for unit in unusedUnits:
644
553
  yield Validation.error(
645
554
  codes='NL.FR-NL-4.02',
646
555
  msg=_('Unused unit must not exist in the XBRL instance document'),
@@ -650,12 +559,7 @@ def rule_fr_nl_4_02(
650
559
 
651
560
  @validation(
652
561
  hook=ValidationHook.XBRL_FINALLY,
653
- disclosureSystems=[
654
- DISCLOSURE_SYSTEM_NT16,
655
- DISCLOSURE_SYSTEM_NT17,
656
- DISCLOSURE_SYSTEM_NT18,
657
- DISCLOSURE_SYSTEM_NT19,
658
- ],
562
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
659
563
  )
660
564
  def rule_fr_nl_5_01(
661
565
  pluginData: PluginValidationDataExtension,
@@ -684,12 +588,7 @@ def rule_fr_nl_5_01(
684
588
 
685
589
  @validation(
686
590
  hook=ValidationHook.XBRL_FINALLY,
687
- disclosureSystems=[
688
- DISCLOSURE_SYSTEM_NT16,
689
- DISCLOSURE_SYSTEM_NT17,
690
- DISCLOSURE_SYSTEM_NT18,
691
- DISCLOSURE_SYSTEM_NT19,
692
- ],
591
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
693
592
  )
694
593
  def rule_fr_nl_5_03(
695
594
  pluginData: PluginValidationDataExtension,
@@ -711,12 +610,7 @@ def rule_fr_nl_5_03(
711
610
 
712
611
  @validation(
713
612
  hook=ValidationHook.XBRL_FINALLY,
714
- disclosureSystems=[
715
- DISCLOSURE_SYSTEM_NT16,
716
- DISCLOSURE_SYSTEM_NT17,
717
- DISCLOSURE_SYSTEM_NT18,
718
- DISCLOSURE_SYSTEM_NT19,
719
- ],
613
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
720
614
  )
721
615
  def rule_fr_nl_5_06(
722
616
  pluginData: PluginValidationDataExtension,
@@ -738,12 +632,7 @@ def rule_fr_nl_5_06(
738
632
 
739
633
  @validation(
740
634
  hook=ValidationHook.XBRL_FINALLY,
741
- disclosureSystems=[
742
- DISCLOSURE_SYSTEM_NT16,
743
- DISCLOSURE_SYSTEM_NT17,
744
- DISCLOSURE_SYSTEM_NT18,
745
- DISCLOSURE_SYSTEM_NT19,
746
- ],
635
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
747
636
  )
748
637
  def rule_fr_nl_5_11(
749
638
  pluginData: PluginValidationDataExtension,
@@ -802,10 +691,10 @@ def rule_fr_nl_5_11(
802
691
  styleProperty = styleValues[0].strip()
803
692
  if styleProperty not in XHTML_ALLOWED_STYLES:
804
693
  invalidStyles.add(styleProperty)
805
- tag = qname(elt.tag).localName
694
+ tag = qname(cast(str, elt.tag)).localName
806
695
  parent = elt.getparent()
807
696
  if tag == 'li' and parent is not None:
808
- parentTag = qname(parent.tag).localName
697
+ parentTag = qname(cast(str, parent.tag)).localName
809
698
  if parentTag in XHTML_LIST_ITEM_TYPES:
810
699
  typeAttr = elt.get('type')
811
700
  if typeAttr not in XHTML_LIST_ITEM_TYPES[parentTag]:
@@ -841,12 +730,7 @@ def rule_fr_nl_5_11(
841
730
 
842
731
  @validation(
843
732
  hook=ValidationHook.XBRL_FINALLY,
844
- disclosureSystems=[
845
- DISCLOSURE_SYSTEM_NT16,
846
- DISCLOSURE_SYSTEM_NT17,
847
- DISCLOSURE_SYSTEM_NT18,
848
- DISCLOSURE_SYSTEM_NT19,
849
- ],
733
+ disclosureSystems=NT_DISCLOSURE_SYSTEMS,
850
734
  )
851
735
  def rule_fr_nl_6_01(
852
736
  pluginData: PluginValidationDataExtension,