arelle-release 2.37.28__py3-none-any.whl → 2.37.30__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.
Potentially problematic release.
This version of arelle-release might be problematic. Click here for more details.
- arelle/Locale.py +3 -1
- arelle/ModelTestcaseObject.py +9 -3
- arelle/Validate.py +29 -14
- arelle/WebCache.py +10 -5
- arelle/_version.py +2 -2
- arelle/plugin/validate/EDINET/DisclosureSystems.py +1 -0
- arelle/plugin/validate/EDINET/FormType.py +105 -0
- arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +111 -0
- arelle/plugin/validate/EDINET/ValidationPluginExtension.py +29 -0
- arelle/plugin/validate/EDINET/__init__.py +119 -0
- arelle/plugin/validate/EDINET/resources/config.xml +12 -0
- arelle/plugin/validate/EDINET/rules/__init__.py +0 -0
- arelle/plugin/validate/EDINET/rules/upload.py +321 -0
- arelle/plugin/validate/NL/rules/nl_kvk.py +52 -0
- arelle/utils/EntryPointDetection.py +6 -0
- {arelle_release-2.37.28.dist-info → arelle_release-2.37.30.dist-info}/METADATA +2 -1
- {arelle_release-2.37.28.dist-info → arelle_release-2.37.30.dist-info}/RECORD +62 -18
- tests/integration_tests/validation/conformance_suite_configs.py +2 -0
- tests/integration_tests/validation/conformance_suite_configurations/edinet.py +35 -0
- tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py +13 -3
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_function_registry.py +4 -0
- tests/integration_tests/validation/discover_tests.py +3 -3
- tests/integration_tests/validation/validation_util.py +9 -1
- tests/resources/conformance_suites/edinet/EC0121E/index.xml +23 -0
- tests/resources/conformance_suites/edinet/EC0121E/invalid01.zip +0 -0
- tests/resources/conformance_suites/edinet/EC0124E/index.xml +23 -0
- tests/resources/conformance_suites/edinet/EC0124E/invalid01.zip +0 -0
- tests/resources/conformance_suites/edinet/EC0129E/index.xml +23 -0
- tests/resources/conformance_suites/edinet/EC0129E/invalid01.zip +0 -0
- tests/resources/conformance_suites/edinet/EC0130E/index.xml +23 -0
- tests/resources/conformance_suites/edinet/EC0130E/invalid01.zip +0 -0
- tests/resources/conformance_suites/edinet/EC0132E/index.xml +23 -0
- tests/resources/conformance_suites/edinet/EC0132E/invalid01.zip +0 -0
- tests/resources/conformance_suites/edinet/EC0188E/index.xml +23 -0
- tests/resources/conformance_suites/edinet/EC0188E/invalid01.zip +0 -0
- tests/resources/conformance_suites/edinet/EC0198E/index.xml +23 -0
- tests/resources/conformance_suites/edinet/EC0198E/invalid01.zip +0 -0
- tests/resources/conformance_suites/edinet/README.md +4 -0
- tests/resources/conformance_suites/edinet/index.xml +11 -0
- tests/resources/conformance_suites/edinet/valid/index.xml +199 -0
- tests/resources/conformance_suites/edinet/valid/valid01.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid02.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid03.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid04.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid05.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid06.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid07.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid08.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid09.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid10.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid11.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid12.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid13.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid14.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid20.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid21.zip +0 -0
- tests/resources/conformance_suites/edinet/valid/valid22.zip +0 -0
- tests/resources/conformance_suites_timing/edinet.json +27 -0
- {arelle_release-2.37.28.dist-info → arelle_release-2.37.30.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.28.dist-info → arelle_release-2.37.30.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.28.dist-info → arelle_release-2.37.30.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.28.dist-info → arelle_release-2.37.30.dist-info}/top_level.txt +0 -0
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"""
|
|
2
|
+
See COPYRIGHT.md for copyright information.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import re
|
|
7
|
+
import zipfile
|
|
8
|
+
from collections import defaultdict
|
|
9
|
+
from collections.abc import Iterable
|
|
10
|
+
from pathlib import Path
|
|
11
|
+
from typing import Any, cast, IO
|
|
12
|
+
|
|
13
|
+
from arelle.ValidateXbrl import ValidateXbrl
|
|
14
|
+
from arelle.typing import TypeGetText
|
|
15
|
+
from arelle.utils.PluginHooks import ValidationHook
|
|
16
|
+
from arelle.utils.validate.Decorator import validation
|
|
17
|
+
from arelle.utils.validate.Validation import Validation
|
|
18
|
+
from ..DisclosureSystems import (DISCLOSURE_SYSTEM_EDINET)
|
|
19
|
+
from ..FormType import FormType, HTML_EXTENSIONS
|
|
20
|
+
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
21
|
+
|
|
22
|
+
_: TypeGetText
|
|
23
|
+
|
|
24
|
+
FILE_COUNT_LIMITS = {
|
|
25
|
+
Path("AttachDoc"): 990,
|
|
26
|
+
Path("AuditDoc"): 990,
|
|
27
|
+
Path("PrivateDoc"): 9_990,
|
|
28
|
+
Path("PublicDoc"): 9_990,
|
|
29
|
+
Path("XBRL") / "AttachDoc": 990,
|
|
30
|
+
Path("XBRL") / "AuditDoc": 990,
|
|
31
|
+
Path("XBRL") / "PrivateDoc": 9_990,
|
|
32
|
+
Path("XBRL") / "PublicDoc": 9_990,
|
|
33
|
+
Path("XBRL"): 99_990,
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
FILENAME_STEM_PATTERN = re.compile(r'[a-zA-Z0-9_-]*')
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
@validation(
|
|
40
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
41
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
42
|
+
)
|
|
43
|
+
def rule_EC0121E(
|
|
44
|
+
pluginData: PluginValidationDataExtension,
|
|
45
|
+
val: ValidateXbrl,
|
|
46
|
+
*args: Any,
|
|
47
|
+
**kwargs: Any,
|
|
48
|
+
) -> Iterable[Validation]:
|
|
49
|
+
"""
|
|
50
|
+
EDINET.EC0121E: There is a directory or file that contains more than 31 characters
|
|
51
|
+
or uses characters other than those allowed (alphanumeric characters, '-' and '_').
|
|
52
|
+
|
|
53
|
+
Note: Sample instances from EDINET almost always violate this rule based on our
|
|
54
|
+
current interpretation. The exception being files placed outside the XBRL directory,
|
|
55
|
+
i.e. amendment documents. For now, we will only check amendment documents, directory
|
|
56
|
+
names, or other files in unexpected locations.
|
|
57
|
+
"""
|
|
58
|
+
if not pluginData.shouldValidateUpload(val):
|
|
59
|
+
return
|
|
60
|
+
uploadContents = pluginData.getUploadContents(val.modelXbrl)
|
|
61
|
+
paths = set(uploadContents.directories | uploadContents.unknownPaths)
|
|
62
|
+
for amendmentPaths in uploadContents.amendmentPaths.values():
|
|
63
|
+
paths.update(amendmentPaths)
|
|
64
|
+
for path in paths:
|
|
65
|
+
if len(str(path.name)) > 31 or not FILENAME_STEM_PATTERN.match(path.stem):
|
|
66
|
+
yield Validation.error(
|
|
67
|
+
codes='EDINET.EC0121E',
|
|
68
|
+
msg=_("There is a directory or file in '%(directory)s' that contains more than 31 characters "
|
|
69
|
+
"or uses characters other than those allowed (alphanumeric characters, '-' and '_'). "
|
|
70
|
+
"Directory or file name: '%(basename)s'. "
|
|
71
|
+
"Please change the file name (or folder name) to within 31 characters and to usable "
|
|
72
|
+
"characters, and upload again."),
|
|
73
|
+
directory=str(path.parent),
|
|
74
|
+
basename=path.name,
|
|
75
|
+
file=str(path)
|
|
76
|
+
)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
@validation(
|
|
80
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
81
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
82
|
+
)
|
|
83
|
+
def rule_EC0124E(
|
|
84
|
+
pluginData: PluginValidationDataExtension,
|
|
85
|
+
val: ValidateXbrl,
|
|
86
|
+
*args: Any,
|
|
87
|
+
**kwargs: Any,
|
|
88
|
+
) -> Iterable[Validation]:
|
|
89
|
+
"""
|
|
90
|
+
EDINET.EC0124E: There are no empty directories.
|
|
91
|
+
"""
|
|
92
|
+
if not pluginData.shouldValidateUpload(val):
|
|
93
|
+
return
|
|
94
|
+
uploadFilepaths = pluginData.getUploadFilepaths(val.modelXbrl)
|
|
95
|
+
emptyDirectories = []
|
|
96
|
+
for path in uploadFilepaths:
|
|
97
|
+
if path.suffix:
|
|
98
|
+
continue
|
|
99
|
+
if not any(path in p.parents for p in uploadFilepaths):
|
|
100
|
+
emptyDirectories.append(str(path))
|
|
101
|
+
for emptyDirectory in emptyDirectories:
|
|
102
|
+
yield Validation.error(
|
|
103
|
+
codes='EDINET.EC0124E',
|
|
104
|
+
msg=_("There is no file directly under '%(emptyDirectory)s'. "
|
|
105
|
+
"No empty folders. "
|
|
106
|
+
"Please store the file in the appropriate folder or delete the folder and upload again."),
|
|
107
|
+
emptyDirectory=emptyDirectory,
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
@validation(
|
|
112
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
113
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
114
|
+
)
|
|
115
|
+
def rule_EC0129E(
|
|
116
|
+
pluginData: PluginValidationDataExtension,
|
|
117
|
+
val: ValidateXbrl,
|
|
118
|
+
*args: Any,
|
|
119
|
+
**kwargs: Any,
|
|
120
|
+
) -> Iterable[Validation]:
|
|
121
|
+
"""
|
|
122
|
+
EDINET.EC0129E: Limit the number of subfolders to 3 or less from the XBRL directory.
|
|
123
|
+
"""
|
|
124
|
+
startingDirectory = 'XBRL'
|
|
125
|
+
if not pluginData.shouldValidateUpload(val):
|
|
126
|
+
return
|
|
127
|
+
uploadFilepaths = pluginData.getUploadFilepaths(val.modelXbrl)
|
|
128
|
+
for path in uploadFilepaths:
|
|
129
|
+
parents = [parent.name for parent in path.parents]
|
|
130
|
+
if startingDirectory in parents:
|
|
131
|
+
parents = parents[:parents.index(startingDirectory)]
|
|
132
|
+
else:
|
|
133
|
+
# TODO: Do we validate amendment subfolders too? These aren't placed beneath the XBRL directory.
|
|
134
|
+
continue
|
|
135
|
+
depth = len(parents)
|
|
136
|
+
if depth > 3:
|
|
137
|
+
yield Validation.error(
|
|
138
|
+
codes='EDINET.EC0129E',
|
|
139
|
+
msg=_("The subordinate directories of %(path)s go up to the level %(depth)s (directories: %(parents)s). "
|
|
140
|
+
"Please limit the number of subfolders to 3 or less and upload again."),
|
|
141
|
+
path=str(path),
|
|
142
|
+
depth=depth,
|
|
143
|
+
parents=', '.join(f"'{parent}'" for parent in reversed(parents)),
|
|
144
|
+
file=str(path)
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
@validation(
|
|
149
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
150
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
151
|
+
)
|
|
152
|
+
def rule_EC0130E(
|
|
153
|
+
pluginData: PluginValidationDataExtension,
|
|
154
|
+
val: ValidateXbrl,
|
|
155
|
+
*args: Any,
|
|
156
|
+
**kwargs: Any,
|
|
157
|
+
) -> Iterable[Validation]:
|
|
158
|
+
"""
|
|
159
|
+
EDINET.EC0130E: File extensions must match the file extensions allowed in Figure 2-1-3 and Figure 2-1-5.
|
|
160
|
+
"""
|
|
161
|
+
if not pluginData.shouldValidateUpload(val):
|
|
162
|
+
return
|
|
163
|
+
uploadContents = pluginData.getUploadContents(val.modelXbrl)
|
|
164
|
+
checks = []
|
|
165
|
+
for formType, amendmentPaths in uploadContents.amendmentPaths.items():
|
|
166
|
+
for amendmentPath in amendmentPaths:
|
|
167
|
+
isSubdirectory = amendmentPath.parent.name != formType.value
|
|
168
|
+
checks.append((amendmentPath, True, formType, isSubdirectory))
|
|
169
|
+
for formType, formPaths in uploadContents.forms.items():
|
|
170
|
+
for amendmentPath in formPaths:
|
|
171
|
+
isSubdirectory = amendmentPath.parent.name != formType.value
|
|
172
|
+
checks.append((amendmentPath, False, formType, isSubdirectory))
|
|
173
|
+
for path, isAmendment, formType, isSubdirectory in checks:
|
|
174
|
+
ext = path.suffix
|
|
175
|
+
if len(ext) == 0:
|
|
176
|
+
continue
|
|
177
|
+
validExtensions = formType.getValidExtensions(isAmendment, isSubdirectory)
|
|
178
|
+
if validExtensions is None:
|
|
179
|
+
continue
|
|
180
|
+
if ext not in validExtensions:
|
|
181
|
+
yield Validation.error(
|
|
182
|
+
codes='EDINET.EC0130E',
|
|
183
|
+
msg=_("The file extension '%(ext)s' is not valid at '%(path)s'. "
|
|
184
|
+
"Valid extensions at this location are: %(validExtensions)s. "
|
|
185
|
+
"Please change the file extension to a configurable extension and upload it again. "
|
|
186
|
+
"For information on configurable file extensions, please refer to 'Table 2-1-3 Storable File Formats (1)' "
|
|
187
|
+
"in the 'Document File Specifications' and 'Table 2-1-5 Storable File Formats (2)' in the "
|
|
188
|
+
"'Document File Specifications'."),
|
|
189
|
+
ext=ext,
|
|
190
|
+
path=str(path),
|
|
191
|
+
validExtensions=', '.join(f"'{e}'" for e in validExtensions),
|
|
192
|
+
file=str(path)
|
|
193
|
+
)
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
@validation(
|
|
197
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
198
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
199
|
+
)
|
|
200
|
+
def rule_EC0132E(
|
|
201
|
+
pluginData: PluginValidationDataExtension,
|
|
202
|
+
val: ValidateXbrl,
|
|
203
|
+
*args: Any,
|
|
204
|
+
**kwargs: Any,
|
|
205
|
+
) -> Iterable[Validation]:
|
|
206
|
+
"""
|
|
207
|
+
EDINET.EC0132E: Store the manifest file directly under the relevant folder.
|
|
208
|
+
"""
|
|
209
|
+
if not pluginData.shouldValidateUpload(val):
|
|
210
|
+
return
|
|
211
|
+
uploadContents = pluginData.getUploadContents(val.modelXbrl)
|
|
212
|
+
for formType in (FormType.AUDIT_DOC, FormType.PRIVATE_DOC, FormType.PUBLIC_DOC):
|
|
213
|
+
if formType not in uploadContents.forms:
|
|
214
|
+
continue
|
|
215
|
+
if formType.manifestPath in uploadContents.forms.get(formType, []):
|
|
216
|
+
continue
|
|
217
|
+
yield Validation.error(
|
|
218
|
+
codes='EDINET.EC0132E',
|
|
219
|
+
msg=_("'%(expectedManifestName)s' does not exist in '%(expectedManifestDirectory)s'. "
|
|
220
|
+
"Please store the manifest file (or cover file) directly under the relevant folder and upload it again. "),
|
|
221
|
+
expectedManifestName=formType.manifestPath.name,
|
|
222
|
+
expectedManifestDirectory=str(formType.manifestPath.parent),
|
|
223
|
+
)
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
@validation(
|
|
227
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
228
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
229
|
+
)
|
|
230
|
+
def rule_EC0183E(
|
|
231
|
+
pluginData: PluginValidationDataExtension,
|
|
232
|
+
val: ValidateXbrl,
|
|
233
|
+
*args: Any,
|
|
234
|
+
**kwargs: Any,
|
|
235
|
+
) -> Iterable[Validation]:
|
|
236
|
+
"""
|
|
237
|
+
EDINET.EC0183E: The compressed file size exceeds 55MB.
|
|
238
|
+
"""
|
|
239
|
+
if not pluginData.shouldValidateUpload(val):
|
|
240
|
+
return
|
|
241
|
+
zipFile = cast(zipfile.ZipFile, val.modelXbrl.fileSource.fs)
|
|
242
|
+
file = cast(IO[Any], zipFile.fp)
|
|
243
|
+
file.seek(0, 2) # Move to the end of the file
|
|
244
|
+
size = file.tell()
|
|
245
|
+
if size > 55 * 1000 * 1000: # Interpretting MB as megabytes (1,000,000 bytes)
|
|
246
|
+
yield Validation.error(
|
|
247
|
+
codes='EDINET.EC0183E',
|
|
248
|
+
msg=_("The compressed file size exceeds 55MB. "
|
|
249
|
+
"Please compress the file to a size of 55MB or less and upload it again."),
|
|
250
|
+
)
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
@validation(
|
|
254
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
255
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
256
|
+
)
|
|
257
|
+
def rule_EC0188E(
|
|
258
|
+
pluginData: PluginValidationDataExtension,
|
|
259
|
+
val: ValidateXbrl,
|
|
260
|
+
*args: Any,
|
|
261
|
+
**kwargs: Any,
|
|
262
|
+
) -> Iterable[Validation]:
|
|
263
|
+
"""
|
|
264
|
+
EDINET.EC0188E: There is an HTML file directly under PublicDoc or PrivateDoc whose first 7 characters are not numbers.
|
|
265
|
+
"""
|
|
266
|
+
if not pluginData.shouldValidateUpload(val):
|
|
267
|
+
return
|
|
268
|
+
pattern = re.compile(r'^\d{7}')
|
|
269
|
+
uploadFilepaths = pluginData.getUploadFilepaths(val.modelXbrl)
|
|
270
|
+
docFolders = frozenset({"PublicDoc", "PrivateDoc"})
|
|
271
|
+
for path in uploadFilepaths:
|
|
272
|
+
if path.suffix not in HTML_EXTENSIONS:
|
|
273
|
+
continue
|
|
274
|
+
if path.parent.name not in docFolders:
|
|
275
|
+
continue
|
|
276
|
+
if pattern.match(path.name) is None:
|
|
277
|
+
yield Validation.error(
|
|
278
|
+
codes='EDINET.EC0188E',
|
|
279
|
+
msg=_("There is an html file directly under PublicDoc or PrivateDoc whose first 7 characters are not numbers: '%(path)s'."
|
|
280
|
+
"Please change the first 7 characters of the file name of the file directly under the folder to numbers "
|
|
281
|
+
"and upload it again."),
|
|
282
|
+
path=str(path),
|
|
283
|
+
file=str(path),
|
|
284
|
+
)
|
|
285
|
+
|
|
286
|
+
|
|
287
|
+
@validation(
|
|
288
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
289
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
290
|
+
)
|
|
291
|
+
def rule_EC0198E(
|
|
292
|
+
pluginData: PluginValidationDataExtension,
|
|
293
|
+
val: ValidateXbrl,
|
|
294
|
+
*args: Any,
|
|
295
|
+
**kwargs: Any,
|
|
296
|
+
) -> Iterable[Validation]:
|
|
297
|
+
"""
|
|
298
|
+
EDINET.EC0198E: The number of files in the total submission and directories can not exceed the upper limit.
|
|
299
|
+
"""
|
|
300
|
+
if not pluginData.shouldValidateUpload(val):
|
|
301
|
+
return
|
|
302
|
+
fileCounts: dict[Path, int] = defaultdict(int)
|
|
303
|
+
uploadFilepaths = pluginData.getUploadFilepaths(val.modelXbrl)
|
|
304
|
+
for path in uploadFilepaths:
|
|
305
|
+
if len(path.suffix) == 0:
|
|
306
|
+
continue
|
|
307
|
+
for directory in FILE_COUNT_LIMITS.keys():
|
|
308
|
+
if directory in path.parents:
|
|
309
|
+
fileCounts[directory] += 1
|
|
310
|
+
break
|
|
311
|
+
for directory, limit in FILE_COUNT_LIMITS.items():
|
|
312
|
+
actual = fileCounts[directory]
|
|
313
|
+
if actual > limit:
|
|
314
|
+
yield Validation.error(
|
|
315
|
+
codes='EDINET.EC0198E',
|
|
316
|
+
msg=_("The number of files in %(directory)s exceeds the upper limit (%(actual)s > %(limit)s). "
|
|
317
|
+
"Please reduce the number of files in the folder to below the maximum and try uploading again."),
|
|
318
|
+
directory=str(directory),
|
|
319
|
+
actual="{:,}".format(actual),
|
|
320
|
+
limit="{:,}".format(limit),
|
|
321
|
+
)
|
|
@@ -18,6 +18,7 @@ from arelle.ModelInstanceObject import ModelInlineFact
|
|
|
18
18
|
from arelle.ModelObject import ModelObject
|
|
19
19
|
from arelle.PrototypeDtsObject import PrototypeObject
|
|
20
20
|
from arelle.ValidateDuplicateFacts import getDuplicateFactSets
|
|
21
|
+
from arelle.XbrlConst import standardLabel
|
|
21
22
|
from arelle.XmlValidateConst import VALID
|
|
22
23
|
|
|
23
24
|
from arelle import XbrlConst, XmlUtil, ModelDocument
|
|
@@ -1896,6 +1897,57 @@ def rule_nl_kvk_RTS_Annex_IV_Par_4_2(
|
|
|
1896
1897
|
)
|
|
1897
1898
|
|
|
1898
1899
|
|
|
1900
|
+
@validation(
|
|
1901
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
1902
|
+
disclosureSystems=ALL_NL_INLINE_DISCLOSURE_SYSTEMS,
|
|
1903
|
+
)
|
|
1904
|
+
def rule_nl_kvk_RTS_Annex_IV_Par_4_3(
|
|
1905
|
+
pluginData: PluginValidationDataExtension,
|
|
1906
|
+
val: ValidateXbrl,
|
|
1907
|
+
*args: Any,
|
|
1908
|
+
**kwargs: Any,
|
|
1909
|
+
) -> Iterable[Validation]:
|
|
1910
|
+
"""
|
|
1911
|
+
NL-KVK.RTS_Annex_IV_Par_4_3: Extension elements must be provided with a standard label in the language corresponding to the language of the annual report.
|
|
1912
|
+
"""
|
|
1913
|
+
extensionData = pluginData.getExtensionData(val.modelXbrl)
|
|
1914
|
+
extensionConcepts = extensionData.extensionConcepts
|
|
1915
|
+
labelsRelationshipSet = val.modelXbrl.relationshipSet(XbrlConst.conceptLabel)
|
|
1916
|
+
missingLabels = []
|
|
1917
|
+
missingReportingLabels = []
|
|
1918
|
+
noStandardLabels = []
|
|
1919
|
+
for concept in extensionConcepts:
|
|
1920
|
+
if not concept.label(standardLabel,lang=pluginData.getReportXmlLang(val.modelXbrl),fallbackToQname=False):
|
|
1921
|
+
labelRels = labelsRelationshipSet.fromModelObject(concept)
|
|
1922
|
+
if len(labelRels) == 0:
|
|
1923
|
+
missingLabels.append(concept)
|
|
1924
|
+
for labelRel in labelRels:
|
|
1925
|
+
label = cast(ModelResource, labelRel.toModelObject)
|
|
1926
|
+
if label.role == XbrlConst.standardLabel:
|
|
1927
|
+
missingReportingLabels.append(concept)
|
|
1928
|
+
else:
|
|
1929
|
+
noStandardLabels.append(label)
|
|
1930
|
+
message = 'Extension element is missing a standard label or is missing a label in the language of the report. Review to ensure a standard label is defined with at least the language of the report.'
|
|
1931
|
+
if len(missingLabels) > 0:
|
|
1932
|
+
yield Validation.warning(
|
|
1933
|
+
codes='NL.NL-KVK.RTS_Annex_IV_Par_4_3.extensionConceptNoLabel',
|
|
1934
|
+
msg=_(message),
|
|
1935
|
+
modelObject=missingLabels,
|
|
1936
|
+
)
|
|
1937
|
+
if len(missingReportingLabels) > 0:
|
|
1938
|
+
yield Validation.warning(
|
|
1939
|
+
codes='NL.NL-KVK.RTS_Annex_IV_Par_4_3.missingLabelForRoleInReportLanguage',
|
|
1940
|
+
msg=_(message),
|
|
1941
|
+
modelObject=missingReportingLabels,
|
|
1942
|
+
)
|
|
1943
|
+
if len(noStandardLabels) > 0:
|
|
1944
|
+
yield Validation.warning(
|
|
1945
|
+
codes='NL.NL-KVK.RTS_Annex_IV_Par_4_3.extensionConceptNoStandardLabel',
|
|
1946
|
+
msg=_(message),
|
|
1947
|
+
modelObject=noStandardLabels,
|
|
1948
|
+
)
|
|
1949
|
+
|
|
1950
|
+
|
|
1899
1951
|
@validation(
|
|
1900
1952
|
hook=ValidationHook.XBRL_FINALLY,
|
|
1901
1953
|
disclosureSystems=ALL_NL_INLINE_DISCLOSURE_SYSTEMS,
|
|
@@ -9,6 +9,12 @@ from arelle import (
|
|
|
9
9
|
def filesourceEntrypointFiles(filesource, entrypointFiles=None, inlineOnly=False):
|
|
10
10
|
if entrypointFiles is None:
|
|
11
11
|
entrypointFiles = []
|
|
12
|
+
for pluginXbrlMethod in PluginManager.pluginClassMethods("FileSource.EntrypointFiles"):
|
|
13
|
+
resultEntrypointFiles = pluginXbrlMethod(filesource, inlineOnly)
|
|
14
|
+
if resultEntrypointFiles is not None:
|
|
15
|
+
del entrypointFiles[:] # clear list
|
|
16
|
+
entrypointFiles.extend(resultEntrypointFiles)
|
|
17
|
+
return entrypointFiles
|
|
12
18
|
if filesource.isArchive:
|
|
13
19
|
if filesource.isTaxonomyPackage: # if archive is also a taxonomy package, activate mappings
|
|
14
20
|
filesource.loadTaxonomyPackageMappings()
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: arelle-release
|
|
3
|
-
Version: 2.37.
|
|
3
|
+
Version: 2.37.30
|
|
4
4
|
Summary: An open source XBRL platform.
|
|
5
5
|
Author-email: "arelle.org" <support@arelle.org>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -41,6 +41,7 @@ Requires-Dist: pillow<12,>=10
|
|
|
41
41
|
Requires-Dist: pyparsing==3.*
|
|
42
42
|
Requires-Dist: python-dateutil==2.*
|
|
43
43
|
Requires-Dist: regex
|
|
44
|
+
Requires-Dist: truststore==0.*; python_version > "3.9"
|
|
44
45
|
Requires-Dist: typing-extensions==4.*
|
|
45
46
|
Provides-Extra: crypto
|
|
46
47
|
Requires-Dist: pycryptodome==3.*; extra == "crypto"
|
|
@@ -33,7 +33,7 @@ arelle/HtmlUtil.py,sha256=eXa6yF5xBCOODCuBMY7g8ePZHPOSu6X0gDsW3z9N50A,761
|
|
|
33
33
|
arelle/InstanceAspectsEvaluator.py,sha256=TePNIs_m0vCIbN5N4PXEyJm529T2WBFi2zmv-72r3Zk,1805
|
|
34
34
|
arelle/LeiUtil.py,sha256=tSPrbQrXEeH5pXgGA_6MAdgMZp20NaW5izJglIXyEQk,5095
|
|
35
35
|
arelle/LocalViewer.py,sha256=WVrfek_bLeFFxgWITi1EQb6xCQN8O9Ks-ZL16vRncSk,3080
|
|
36
|
-
arelle/Locale.py,sha256=
|
|
36
|
+
arelle/Locale.py,sha256=07IDxv8nIfvhyRRllFdEAKRI3yo1D2v781cTrjb_RoQ,33193
|
|
37
37
|
arelle/ModelDocument.py,sha256=Sq6umEdn-aNHjxIpEsXTT7A4V25nGY0JiylSnhr9zSI,130749
|
|
38
38
|
arelle/ModelDtsObject.py,sha256=nvHQs4BDmPxY6mqLiBuqIGRJXyA1EqOEGB2f3S6A6w4,88656
|
|
39
39
|
arelle/ModelFormulaObject.py,sha256=-eb0lBYciEeAvvGduIs3AHGNGrxge9_0g1cVT6UUgvc,122560
|
|
@@ -45,7 +45,7 @@ arelle/ModelRelationshipSet.py,sha256=jlLqEnd0KrLjpRUhDzFLgMPsRmyOwfgl1w13yW3flL
|
|
|
45
45
|
arelle/ModelRenderingObject.py,sha256=iPhSUlSBG-FLzAfIdUW06UZDgTCaZJ4K2mxvAtSe2BU,76021
|
|
46
46
|
arelle/ModelRssItem.py,sha256=GzFkmluOlFsVcrxn9HAyOAcuE7rcHUOGkp4Q6F2IlT8,7713
|
|
47
47
|
arelle/ModelRssObject.py,sha256=xjuwyJ8pU5sQmNPJFQakDEEnujZg2bMCTaj3zVezHL8,992
|
|
48
|
-
arelle/ModelTestcaseObject.py,sha256=
|
|
48
|
+
arelle/ModelTestcaseObject.py,sha256=dnCxatJcFPlu5BgTuToqgrQowYNx4YtA5KrmW4vHko4,22432
|
|
49
49
|
arelle/ModelValue.py,sha256=t0mVl3-EcE4MaXdRL9F94XaBwBfu1xG2DmFuHOczrEk,39447
|
|
50
50
|
arelle/ModelVersObject.py,sha256=cPD1IzhkCfuV1eMgVFWes88DH_6WkUj5kj7sgGF2M0I,26062
|
|
51
51
|
arelle/ModelVersReport.py,sha256=bXEA9K3qkH57aABn5l-m3CTY0FAcF1yX6O4fo-URjl8,73326
|
|
@@ -65,7 +65,7 @@ arelle/UITkTable.py,sha256=N83cXi5c0lLZLsDbwSKcPrlYoUoGsNavGN5YRx6d9XY,39810
|
|
|
65
65
|
arelle/UiUtil.py,sha256=3G0xPclZI8xW_XQDbiFrmylB7Nd5muqi5n2x2oMkMZU,34218
|
|
66
66
|
arelle/Updater.py,sha256=IZ8cq44Rq88WbQcB1VOpMA6bxdfZxfYQ8rgu9Ehpbes,7448
|
|
67
67
|
arelle/UrlUtil.py,sha256=HrxZSG59EUMGMMGmWPuZkPi5-0BGqY3jAMkp7V4IdZo,32400
|
|
68
|
-
arelle/Validate.py,sha256=
|
|
68
|
+
arelle/Validate.py,sha256=SxdFqjqNy3Dp2dFZV2YXn61uygZsf2UtSE5gmdqiZY8,58024
|
|
69
69
|
arelle/ValidateDuplicateFacts.py,sha256=L556J1Dhz4ZmsMlRNoDCMpFgDQYiryd9vuBYDvE0Aq8,21769
|
|
70
70
|
arelle/ValidateFilingText.py,sha256=xnXc0xgdNiHQk0eyP7VSSpvw7qr-pRFRwqqoUb569is,54051
|
|
71
71
|
arelle/ValidateInfoset.py,sha256=Rz_XBi5Ha43KpxXYhjLolURcWVx5qmqyjLxw48Yt9Dg,20396
|
|
@@ -113,7 +113,7 @@ arelle/ViewWinTupleGrid.py,sha256=Li21jmMSZP3xIkpg8eY8Sq7KTIuAgM57wHu7i7Nu3P0,89
|
|
|
113
113
|
arelle/ViewWinVersReport.py,sha256=aYfsOgynVZpMzl6f2EzQCBLzdihYGycwb5SiTghkgMQ,9344
|
|
114
114
|
arelle/ViewWinXml.py,sha256=4ZGKtjaoCwU9etKYm9ZAS7jSmUxba1rqNEdv0OIyjTY,1250
|
|
115
115
|
arelle/WatchRss.py,sha256=5Ih4igH2MM4hpOuAXy9eO0QAyZ7jZR3S5bPzo2sdFpw,14097
|
|
116
|
-
arelle/WebCache.py,sha256=
|
|
116
|
+
arelle/WebCache.py,sha256=HlF4vfjxO0bSFHqMPfjnmkrzc7RK9XT714a7g3XFTDY,45192
|
|
117
117
|
arelle/XbrlConst.py,sha256=gKYJECjuOEn0z0RRAaHpVCqh2NnBMfPLGxoLohYGGH4,57657
|
|
118
118
|
arelle/XbrlUtil.py,sha256=s2Vmrh-sZI5TeuqsziKignOc3ao-uUgnCNoelP4dDj0,9212
|
|
119
119
|
arelle/XhtmlValidate.py,sha256=0gtm7N-kXK0RB5o3c1AQXjfFuRp1w2fKZZAeyruNANw,5727
|
|
@@ -123,7 +123,7 @@ arelle/XmlValidateConst.py,sha256=U_wN0Q-nWKwf6dKJtcu_83FXPn9c6P8JjzGA5b0w7P0,33
|
|
|
123
123
|
arelle/XmlValidateParticles.py,sha256=Mn6vhFl0ZKC_vag1mBwn1rH_x2jmlusJYqOOuxFPO2k,9231
|
|
124
124
|
arelle/XmlValidateSchema.py,sha256=6frtZOc1Yrx_5yYF6V6oHbScnglWrVbWr6xW4EHtLQI,7428
|
|
125
125
|
arelle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
|
-
arelle/_version.py,sha256=
|
|
126
|
+
arelle/_version.py,sha256=CnZbug4_DSgIxLaZeF6X5a9gF_h2H5q2aoDn5RQUfUA,515
|
|
127
127
|
arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
|
|
128
128
|
arelle/api/Session.py,sha256=5KPjCIPiNuanKrz1MdFdKIx8Bg40Pk9sf2cL9OU4x-E,7770
|
|
129
129
|
arelle/archive/CustomLogger.py,sha256=v_JXOCQLDZcfaFWzxC9FRcEf9tQi4rCI4Sx7jCuAVQI,1231
|
|
@@ -392,6 +392,14 @@ arelle/plugin/validate/DBA/rules/tm.py,sha256=ui9oKBqlAForwkQ9kk9KBiUogTJE5pv1Rb
|
|
|
392
392
|
arelle/plugin/validate/DBA/rules/tr.py,sha256=zdi3kQ82whmweVWRLbMvcNpM8sqtUliPsGfd81rgZws,14671
|
|
393
393
|
arelle/plugin/validate/EBA/__init__.py,sha256=1kW-04W32sStSAL8wvW1ZpXnjlFv6KLbfE4aifYUB2A,46000
|
|
394
394
|
arelle/plugin/validate/EBA/config.xml,sha256=37wMVUAObK-XEqakqD8zPNog20emYt4a_yfL1AKubF8,2022
|
|
395
|
+
arelle/plugin/validate/EDINET/DisclosureSystems.py,sha256=3rKG42Eg-17Xx_KXU_V5yHW6I3LTwQunvf4a44C9k_4,36
|
|
396
|
+
arelle/plugin/validate/EDINET/FormType.py,sha256=pJfKjdjqFcRLFgH6xbEixvpwatZBBHI8uI3xjjhaPI0,3175
|
|
397
|
+
arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=8ylP-bY6Y0PJ1AxQ35CZmXYzAQDNu1K4rBSVupq-wZ8,4088
|
|
398
|
+
arelle/plugin/validate/EDINET/ValidationPluginExtension.py,sha256=HIGOpBOyuVs5SEh573M3IzdouRdEuNIBkdumieZi8r0,959
|
|
399
|
+
arelle/plugin/validate/EDINET/__init__.py,sha256=1kJUaV2AbNZdakKSa_v3opdyCRKO3gva62RpHVOrpIE,4398
|
|
400
|
+
arelle/plugin/validate/EDINET/resources/config.xml,sha256=7uxn_HZT3USgbs2GQkew-dCUzlEgUGs62PiqEfljPgk,514
|
|
401
|
+
arelle/plugin/validate/EDINET/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
402
|
+
arelle/plugin/validate/EDINET/rules/upload.py,sha256=cB3EZbzcU5vK80IQUc-MNBvKcnCf8-f72C0JqLubSCE,12395
|
|
395
403
|
arelle/plugin/validate/ESEF/Const.py,sha256=JujF_XV-_TNsxjGbF-8SQS4OOZIcJ8zhCMnr-C1O5Ho,22660
|
|
396
404
|
arelle/plugin/validate/ESEF/Dimensions.py,sha256=MOJM7vwNPEmV5cu-ZzPrhx3347ZvxgD6643OB2HRnIk,10597
|
|
397
405
|
arelle/plugin/validate/ESEF/Util.py,sha256=QH3btcGqBpr42M7WSKZLSdNXygZaZLfEiEjlxoG21jE,7950
|
|
@@ -419,7 +427,7 @@ arelle/plugin/validate/NL/rules/br_kvk.py,sha256=0SwKieWzTDm3YMsXPS6zTdgbk7_Z9Cz
|
|
|
419
427
|
arelle/plugin/validate/NL/rules/fg_nl.py,sha256=4Puq5wAjtK_iNd4wisH_R0Z_EKJ7MT2OCai5g4t1MPE,10714
|
|
420
428
|
arelle/plugin/validate/NL/rules/fr_kvk.py,sha256=kYqXt45S6eM32Yg9ii7pUhOMfJaHurgYqQ73FyQALs8,8171
|
|
421
429
|
arelle/plugin/validate/NL/rules/fr_nl.py,sha256=-M1WtXp06khhtkfOVPCa-b8UbC281gk4YfDhvtAVlnI,31424
|
|
422
|
-
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=
|
|
430
|
+
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=mMPMeGhhlYEhC9LMHVaFfHzIpqJObl9ukU8cuuitaRU,88446
|
|
423
431
|
arelle/plugin/validate/ROS/DisclosureSystems.py,sha256=rJ81mwQDYTi6JecFZ_zhqjjz3VNQRgjHNSh0wcQWAQE,18
|
|
424
432
|
arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=IV7ILhNvgKwQXqbpSA6HRNt9kEnejCyMADI3wyyIgk0,4036
|
|
425
433
|
arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=FBhEp8t396vGdvCbMEimfcxmGiGnhXMen-yVLWnkFaI,758
|
|
@@ -729,7 +737,7 @@ arelle/resources/libs/Tktable2.11/win-x86_64/tkTable.tcl,sha256=JrSZRngZFHtw8Svp
|
|
|
729
737
|
arelle/scripts-macOS/startWebServer.command,sha256=KXLSwAwchDZBlL-k9PYXdf39RNBtte4vV076_kIz2Ow,91
|
|
730
738
|
arelle/scripts-unix/startWebServer.sh,sha256=_0puRzaGkdMZoFn3R7hDti9a3ryN6kTZAXwLweeZU1s,42
|
|
731
739
|
arelle/scripts-windows/startWebServer.bat,sha256=qmnF1yrjNo__bi4QodONWlN0qHShVLTKptJQYyZtgcY,122
|
|
732
|
-
arelle/utils/EntryPointDetection.py,sha256=
|
|
740
|
+
arelle/utils/EntryPointDetection.py,sha256=4RzercL0xE4PJrwoeUYq3S-E7PMSD-IspyS9bwK2RYM,4722
|
|
733
741
|
arelle/utils/PluginData.py,sha256=GUnuZaApm1J4Xm9ZA1U2M1aask-AaNGviLtc0fgXbFg,265
|
|
734
742
|
arelle/utils/PluginHooks.py,sha256=CeVxti23VjERQl4xWFucDVTW63TCG2PUdnxpjd3x_Ms,31170
|
|
735
743
|
arelle/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -742,7 +750,7 @@ arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txr
|
|
|
742
750
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
743
751
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
744
752
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
745
|
-
arelle_release-2.37.
|
|
753
|
+
arelle_release-2.37.30.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
746
754
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
747
755
|
tests/integration_tests/download_cache.py,sha256=jVMIVICsZjcVc9DCPPu3fCjF9_cWSS3tqSynhFs3oAM,4097
|
|
748
756
|
tests/integration_tests/integration_test_util.py,sha256=H7mncbv0T9ZeVyrtk9Hohe3k6jgcYykHkt-LGE-Q9aQ,10270
|
|
@@ -771,16 +779,17 @@ tests/integration_tests/ui_tests/resources/workiva.zip,sha256=QtZzi1VcKkHhVa8J-I
|
|
|
771
779
|
tests/integration_tests/validation/README.md,sha256=O6WYcMEk0x7ee7A9JnESHb6-UYceg_vrL4BhDIEDMI0,3008
|
|
772
780
|
tests/integration_tests/validation/assets.py,sha256=Ag9qPYrodcC-Ly6aygqapV0vG2Cbn_Tigg4v4F9xX4U,8295
|
|
773
781
|
tests/integration_tests/validation/conformance_suite_config.py,sha256=LgPO_8H_esM9kQS2o4jKd8CTNi0hiHugZ1hZn7whshI,10383
|
|
774
|
-
tests/integration_tests/validation/conformance_suite_configs.py,sha256=
|
|
782
|
+
tests/integration_tests/validation/conformance_suite_configs.py,sha256=jM-EqvLDLxq1xIv3UxQonXsSXbBR-AGVd0yAW_XeJUI,7616
|
|
775
783
|
tests/integration_tests/validation/conftest.py,sha256=rVfmNX9y0JZ1VfoEepeYyIz-ZxzEZ1IJlmbcQSuxgUo,816
|
|
776
|
-
tests/integration_tests/validation/discover_tests.py,sha256=
|
|
784
|
+
tests/integration_tests/validation/discover_tests.py,sha256=qaSCsys6cC9Xu6ep9M0db3UCTR7fKCPLOv8xEvvcE3I,4653
|
|
777
785
|
tests/integration_tests/validation/download_assets.py,sha256=muHklbrvYEbxqqAM8mU-8FpeemP0BLTWxD11xTYiCMc,7850
|
|
778
786
|
tests/integration_tests/validation/run_conformance_suites.py,sha256=yBnPdtIiNKibjsrJxrvVA7NyAEWcoDg-sSjp1nFGQ2g,8496
|
|
779
787
|
tests/integration_tests/validation/test_conformance_suites.py,sha256=VdwY0QtV6g00M9bv1XNs4qBTwxPxCh5-z4XoDdEhgeM,711
|
|
780
|
-
tests/integration_tests/validation/validation_util.py,sha256=
|
|
788
|
+
tests/integration_tests/validation/validation_util.py,sha256=5rIVfEemipJcnDpSqf5479Fa13I3ICHvPFq1pYROWCU,22136
|
|
781
789
|
tests/integration_tests/validation/conformance_suite_configurations/cipc_current.py,sha256=oLXe3xIsEZLz3cv1cDdMQIuS_NgyI9Uimc9hy0NMWqg,642
|
|
782
790
|
tests/integration_tests/validation/conformance_suite_configurations/dba_current.py,sha256=j-7jCpzbGXbOzG8HGEyS0ciCYSPZzZLV44VQGhP3Hmc,875
|
|
783
791
|
tests/integration_tests/validation/conformance_suite_configurations/dba_multi_current.py,sha256=ICkP18Wu7aTDfszfYlrfVnBj9oe7ppXR-8wxQqCPqW0,837
|
|
792
|
+
tests/integration_tests/validation/conformance_suite_configurations/edinet.py,sha256=PMyBjtE-t24EysXrWvqYqk1Mqx-LeWRdwYrEUPeRVfM,1638
|
|
784
793
|
tests/integration_tests/validation/conformance_suite_configurations/efm_current.py,sha256=zbZ9c-LoZJDRp0Lobl_oH3xRw4g-2u6oQqU0-oo5NOE,1322
|
|
785
794
|
tests/integration_tests/validation/conformance_suite_configurations/efm_reg_dqc.py,sha256=HiT8OcRAOVKLsl95Y91L66FeOsIMMMAQCs-DLMG-Lb0,739
|
|
786
795
|
tests/integration_tests/validation/conformance_suite_configurations/efm_reg_pragmatic.py,sha256=U6dew0sIibjZe4r6na912qyIVAjxljh2HDix-8AwvhM,727
|
|
@@ -797,7 +806,7 @@ tests/integration_tests/validation/conformance_suite_configurations/kvk_nt16.py,
|
|
|
797
806
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt17.py,sha256=lmEZonthFm0YKFmp1dwXtdJ2T7txUeSpL4mbAo8fl4Y,1292
|
|
798
807
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt18.py,sha256=EG2RQVkvFENhzUF3fl3QvDnH7ZPYS1n1Fo8bhfmSczM,1205
|
|
799
808
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt19.py,sha256=FAzf9RhRmn_8yowpplJho2zEspX9FxJiVq8SjZT3Dsc,1199
|
|
800
|
-
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py,sha256=
|
|
809
|
+
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py,sha256=0z-dl7rVT4juYDMYvLyYV5idPxzpakDBECZa3ly6z9E,9487
|
|
801
810
|
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024_gaap_other.py,sha256=vtzYSd0-vF9g6eHfrIUpMBz7D0HdR_gi8O0429lOaww,31667
|
|
802
811
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py,sha256=O_LFVBZPkjxmbrU7_C7VTLtrdoCUx2bYXOXw6_MlRtQ,846
|
|
803
812
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py,sha256=aTN3Ez6lPsZsuypHZP84DneOtYxUZSjUiGypHy6ofHQ,846
|
|
@@ -812,7 +821,7 @@ tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensi
|
|
|
812
821
|
tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_2_0.py,sha256=DZTlD6A3ieT-lBUlrn78a0V5j1LvCKRm_Lm7jSvphPY,683
|
|
813
822
|
tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0.py,sha256=H456ozSCnVoVHXYHd4g2169JHkI2yKhMgOOpJyanLZE,592
|
|
814
823
|
tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_assertion_severity_2_0.py,sha256=W7FT2ac5u8PyRubt_bcDl37wucv0Pnu9KqQ2jxEpGFM,668
|
|
815
|
-
tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_function_registry.py,sha256=
|
|
824
|
+
tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_function_registry.py,sha256=RuqeADKn_6E1AT5vPCXxnSZoD_3diVhQrroaLVa2Op8,1024
|
|
816
825
|
tests/integration_tests/validation/conformance_suite_configurations/xbrl_ixbrl_1_1.py,sha256=Upsc9Nx0eHJQlVL9p77GamTCUpIqjexnRShe9F0b9NM,1366
|
|
817
826
|
tests/integration_tests/validation/conformance_suite_configurations/xbrl_link_role_registry_1_0.py,sha256=NQfri9MXCDSvNy7kahf4iXZaBUPey9-FYKlchg-Uw4I,633
|
|
818
827
|
tests/integration_tests/validation/conformance_suite_configurations/xbrl_oim_1_0.py,sha256=s5tcH5fgzNwLQR1iWxCjuyij4Rxjq8XrmGDIptAbfGE,906
|
|
@@ -1142,6 +1151,40 @@ tests/resources/conformance_suites/dba_multi/tr/tr17-invalid.xhtml,sha256=Kp3MYJ
|
|
|
1142
1151
|
tests/resources/conformance_suites/dba_multi/tr/tr17-testcase.xml,sha256=zzu0az0IfE8O21OMxDpGHzRbPbRyt5e7m8XTr4GdPgs,894
|
|
1143
1152
|
tests/resources/conformance_suites/dba_multi/tr/valid-ixbrl-001.xhtml,sha256=weldGT9zOEsSYhbVmpz-MR66Bd4jMMqsKoWTM6GLXag,1652016
|
|
1144
1153
|
tests/resources/conformance_suites/dba_multi/tr/valid-testcase.xml,sha256=KmH_iJFEFdCATYn9QWevbgCOTaGDR9r80NhdsYdGKsA,895
|
|
1154
|
+
tests/resources/conformance_suites/edinet/README.md,sha256=uO7RiidAUp8xEkP7obmggpxhfgdsnACoKplgYqqPON0,333
|
|
1155
|
+
tests/resources/conformance_suites/edinet/index.xml,sha256=EhFVwHdigCHj3xh1xNyqD3orUqts1d-MtRI4_sJl5kQ,404
|
|
1156
|
+
tests/resources/conformance_suites/edinet/EC0121E/index.xml,sha256=1XFjoMoMAfNVISDy_4EvQC0qM6bZnQYMxtA8qhgdC4A,1064
|
|
1157
|
+
tests/resources/conformance_suites/edinet/EC0121E/invalid01.zip,sha256=sy31KH6h8C7L3wBqXsiQrT6LUyjZn20Bxsx4FxC3SBg,12734
|
|
1158
|
+
tests/resources/conformance_suites/edinet/EC0124E/index.xml,sha256=owK-jho_Kg4KcmO-OgJZ_HGiv_6TBwD6bHBHuir7Qa4,896
|
|
1159
|
+
tests/resources/conformance_suites/edinet/EC0124E/invalid01.zip,sha256=NS0wqn_z58duwqtzbwZ3wFFEpMdbnndBBqbodrF9RCQ,10480
|
|
1160
|
+
tests/resources/conformance_suites/edinet/EC0129E/index.xml,sha256=mvwTD8Mmvn_VIFd51dmvjtQNRNgJAUKENkD6LHzM1xE,964
|
|
1161
|
+
tests/resources/conformance_suites/edinet/EC0129E/invalid01.zip,sha256=2_m13sVjTCSt6_wBbCMEglJrFcZUC_fidD4n4gV05Ho,10065
|
|
1162
|
+
tests/resources/conformance_suites/edinet/EC0130E/index.xml,sha256=uDFH-TxfHyXC188S-4qnSd4RISHW6Xn1E6oA8Pt3mp0,1004
|
|
1163
|
+
tests/resources/conformance_suites/edinet/EC0130E/invalid01.zip,sha256=kJF7XARkzuB98MFO5P3NCmpW3WHr-6ZgxDPsh5UNCzU,15814
|
|
1164
|
+
tests/resources/conformance_suites/edinet/EC0132E/index.xml,sha256=W9j0k82U0PxltmcLtfSL5peiEEpCOmZ3RIskFS0dLNM,926
|
|
1165
|
+
tests/resources/conformance_suites/edinet/EC0132E/invalid01.zip,sha256=RAWTW6HHocM3o2S35JCa88S8CCWpPNXYD3IPtiPuYw8,9822
|
|
1166
|
+
tests/resources/conformance_suites/edinet/EC0188E/index.xml,sha256=PHnUX2Aio06MGQELWyI7lWKvVdLzkyzOhuLJ3ejlmHQ,1004
|
|
1167
|
+
tests/resources/conformance_suites/edinet/EC0188E/invalid01.zip,sha256=lngtZRs8AFww6JoTBKM0naVoaJJHePTcPfSxA0vSsQU,10503
|
|
1168
|
+
tests/resources/conformance_suites/edinet/EC0198E/index.xml,sha256=VET9GHoyRnPDPccGZtgSzHNdFNnaLUFPBn5WCqa1Hyc,977
|
|
1169
|
+
tests/resources/conformance_suites/edinet/EC0198E/invalid01.zip,sha256=gI7yCbJjsu2s7UOIwvuV7Q0VvyF3xsIwxg2es3TuZtE,225505
|
|
1170
|
+
tests/resources/conformance_suites/edinet/valid/index.xml,sha256=uXI41f0itmvtn2Ndxw_xypISB5oFt5LSJb9lptbAt98,7731
|
|
1171
|
+
tests/resources/conformance_suites/edinet/valid/valid01.zip,sha256=68IK_fwBiuI8QTik2mCc3pUlGCI8ZkL6EGthJz1TFPM,153228
|
|
1172
|
+
tests/resources/conformance_suites/edinet/valid/valid02.zip,sha256=CFyA86qW3sHCZyhjWnww9xHUa0kxmgFTHV83h8Efafs,167649
|
|
1173
|
+
tests/resources/conformance_suites/edinet/valid/valid03.zip,sha256=AOsXvumMft8B4P39kAt_HT0NdFu5YobbTOFIXRFPiAY,178509
|
|
1174
|
+
tests/resources/conformance_suites/edinet/valid/valid04.zip,sha256=JQKKungAUpVVgd1DVDhmdxGbECHzdMs_XSDDwDGbV_U,102936
|
|
1175
|
+
tests/resources/conformance_suites/edinet/valid/valid05.zip,sha256=y9T2ye7zX-j7MOoKDzFJMoxfqcsaU4BCVS-ncOoj8Tg,63474
|
|
1176
|
+
tests/resources/conformance_suites/edinet/valid/valid06.zip,sha256=hEsRLR1dHK4jPg3A1nnhOLGbQ1b_ScPhniDOgmAP7NM,102981
|
|
1177
|
+
tests/resources/conformance_suites/edinet/valid/valid07.zip,sha256=aK5e9k3eODwGamScHWS-fQq5e7P3s_5rMjDhH-DNY8A,12549
|
|
1178
|
+
tests/resources/conformance_suites/edinet/valid/valid08.zip,sha256=ey2JVhtQstRs0IDkzwwHRC8bJy3q2tFj9jWF3xYLDmQ,17199
|
|
1179
|
+
tests/resources/conformance_suites/edinet/valid/valid09.zip,sha256=AbqS-X0dRlJo2cJyFxY6HiNn5Xb9q2Gs6nTZH-KM2Lg,9842
|
|
1180
|
+
tests/resources/conformance_suites/edinet/valid/valid10.zip,sha256=MZFJqBp7HXG4nFRcHzsbjd_e-QBYpSezyw-DJDceuIM,126061
|
|
1181
|
+
tests/resources/conformance_suites/edinet/valid/valid11.zip,sha256=DD8l-aHG1ittL68v2DgHm4I8qAmqcPAh_A96wKScO4Q,124829
|
|
1182
|
+
tests/resources/conformance_suites/edinet/valid/valid12.zip,sha256=9U2vsWTLaufk1qv9wEmnKx8lP578feGYV9lwXjcuHcY,45710
|
|
1183
|
+
tests/resources/conformance_suites/edinet/valid/valid13.zip,sha256=Ml6fY1BlETnxaqr4YiBDJd_WGNEnn7lzmexqnlrU5o4,10886
|
|
1184
|
+
tests/resources/conformance_suites/edinet/valid/valid14.zip,sha256=CYnnNxyyxr05rjeGDSkXs480M-BXpQD-Y2ZGM-7He68,13386
|
|
1185
|
+
tests/resources/conformance_suites/edinet/valid/valid20.zip,sha256=xaKwHMCvACzgZqp88Mv-2KReHMiqUMp7twqar-sC_qQ,174640
|
|
1186
|
+
tests/resources/conformance_suites/edinet/valid/valid21.zip,sha256=gtQZSL1eUxqSwkgGIXqlidbElptX2pA31t5qp9JDI20,129608
|
|
1187
|
+
tests/resources/conformance_suites/edinet/valid/valid22.zip,sha256=MHOyA6eE6deXvW21EK_8ht4rUAEcAbv2mmsc_RvvGgg,129716
|
|
1145
1188
|
tests/resources/conformance_suites/nl_nt16/index.xml,sha256=FFSSMokLcdhMroNeSSbm28pi-RKRURdVcKhqHdj44f0,2010
|
|
1146
1189
|
tests/resources/conformance_suites/nl_nt16/mock-taxonomy.xsd,sha256=1uRNZClgrtNvL1Gx27MEAntSzeszICUhVXO01jqoavQ,1377
|
|
1147
1190
|
tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-invalid-period.xbrl,sha256=WeUb_M6vNrLG9jjbNTDv7qiPnAYyfYXlZvDbVlHh11g,4127
|
|
@@ -1551,6 +1594,7 @@ tests/resources/conformance_suites_expected/efm_current.csv,sha256=9YoKy-kYo_VAy
|
|
|
1551
1594
|
tests/resources/conformance_suites_expected/efm_reg_dqc.csv,sha256=0CEItNnnEE_s8uGHA8CidxEVyvOiTCv5nAWpc4dCUmE,9968847
|
|
1552
1595
|
tests/resources/conformance_suites_expected/efm_reg_pragmatic.csv,sha256=J_sDOjJGDjFnseMU7QIBttvvOjjnPp_WdmrCkjvCu4Y,196
|
|
1553
1596
|
tests/resources/conformance_suites_timing/dba_current.json,sha256=e5jmGVDcPbaXDbHNK3RQz-_gsozU1dL_J0gcNDzHnjg,1467
|
|
1597
|
+
tests/resources/conformance_suites_timing/edinet.json,sha256=oBW-DfzxdzYK8gxw1hptPzKNLSLyOXcFdr-g0NR-5c8,1279
|
|
1554
1598
|
tests/resources/conformance_suites_timing/efm_current.json,sha256=iqqcBoDJVs2F_xW03gCirDyaLZoS9x482KAQgMhCvvg,1096604
|
|
1555
1599
|
tests/resources/conformance_suites_timing/efm_reg_dqc.json,sha256=4ry0JC8XA-8Bua2E75edknjxcL42Qj6nMZxvjCdW2uc,1708653
|
|
1556
1600
|
tests/resources/conformance_suites_timing/esef_ixbrl_2021.json,sha256=3UBEba0PStPkAHgYZc6_WAH3_pBTGOpDNRQ0X1hxH74,26836
|
|
@@ -1596,8 +1640,8 @@ tests/unit_tests/arelle/oim/test_load.py,sha256=NxiUauQwJVfWAHbbpsMHGSU2d3Br8Pki
|
|
|
1596
1640
|
tests/unit_tests/arelle/plugin/test_plugin_imports.py,sha256=bdhIs9frAnFsdGU113yBk09_jis-z43dwUItMFYuSYM,1064
|
|
1597
1641
|
tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py,sha256=H0ndmQ0sFO5WVMzAxPCH1WciRhCg_HgKUtQCg0xlmtg,1238
|
|
1598
1642
|
tests/unit_tests/arelle/utils/validate/test_decorator.py,sha256=ZS8FqIY1g-2FCbjF4UYm609dwViax6qBMRJSi0vfuhY,2482
|
|
1599
|
-
arelle_release-2.37.
|
|
1600
|
-
arelle_release-2.37.
|
|
1601
|
-
arelle_release-2.37.
|
|
1602
|
-
arelle_release-2.37.
|
|
1603
|
-
arelle_release-2.37.
|
|
1643
|
+
arelle_release-2.37.30.dist-info/METADATA,sha256=3yAS489MpYI3fh5jpyadZ3iRtu01h-I9exvjlpnie6U,9189
|
|
1644
|
+
arelle_release-2.37.30.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1645
|
+
arelle_release-2.37.30.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
1646
|
+
arelle_release-2.37.30.dist-info/top_level.txt,sha256=ZYmYGmhW5Jvo3vJ4iXBZPUI29LvYhntom04w90esJvU,13
|
|
1647
|
+
arelle_release-2.37.30.dist-info/RECORD,,
|
|
@@ -4,6 +4,7 @@ from tests.integration_tests.validation.conformance_suite_config import Conforma
|
|
|
4
4
|
from tests.integration_tests.validation.conformance_suite_configurations.cipc_current import config as cipc_current
|
|
5
5
|
from tests.integration_tests.validation.conformance_suite_configurations.dba_current import config as dba_current
|
|
6
6
|
from tests.integration_tests.validation.conformance_suite_configurations.dba_multi_current import config as dba_multi_current
|
|
7
|
+
from tests.integration_tests.validation.conformance_suite_configurations.edinet import config as edinet
|
|
7
8
|
from tests.integration_tests.validation.conformance_suite_configurations.efm_current import config as efm_current
|
|
8
9
|
from tests.integration_tests.validation.conformance_suite_configurations.efm_reg_dqc import config as efm_reg_dqc
|
|
9
10
|
from tests.integration_tests.validation.conformance_suite_configurations.efm_reg_pragmatic import config as efm_reg_pragmatic
|
|
@@ -54,6 +55,7 @@ ALL_CONFORMANCE_SUITE_CONFIGS: tuple[ConformanceSuiteConfig, ...] = (
|
|
|
54
55
|
cipc_current,
|
|
55
56
|
dba_current,
|
|
56
57
|
dba_multi_current,
|
|
58
|
+
edinet,
|
|
57
59
|
efm_current,
|
|
58
60
|
efm_reg_dqc,
|
|
59
61
|
efm_reg_pragmatic,
|