arelle-release 2.37.22__py3-none-any.whl → 2.37.25__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/ModelRelationshipSet.py +3 -0
- arelle/Updater.py +7 -3
- arelle/ValidateDuplicateFacts.py +13 -7
- arelle/XbrlConst.py +22 -0
- arelle/_version.py +2 -2
- arelle/plugin/validate/DBA/rules/fr.py +10 -10
- arelle/plugin/validate/DBA/rules/th.py +1 -1
- arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +21 -20
- arelle/plugin/validate/NL/LinkbaseType.py +17 -0
- arelle/plugin/validate/NL/PluginValidationDataExtension.py +155 -4
- arelle/plugin/validate/NL/resources/config.xml +6 -0
- arelle/plugin/validate/NL/rules/fr_kvk.py +1 -1
- arelle/plugin/validate/NL/rules/nl_kvk.py +656 -22
- arelle/utils/validate/DetectScriptsInXhtml.py +1 -4
- arelle/utils/validate/ESEFImage.py +274 -0
- {arelle_release-2.37.22.dist-info → arelle_release-2.37.25.dist-info}/METADATA +1 -1
- {arelle_release-2.37.22.dist-info → arelle_release-2.37.25.dist-info}/RECORD +27 -27
- tests/integration_tests/validation/conformance_suite_configurations/efm_current.py +2 -2
- tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py +52 -28
- tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024_gaap_other.py +10 -0
- tests/resources/conformance_suites_timing/efm_current.json +8499 -8583
- tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py +10 -2
- tests/unit_tests/arelle/test_updater.py +43 -14
- arelle/plugin/validate/ESEF/ESEF_Current/Image.py +0 -213
- {arelle_release-2.37.22.dist-info → arelle_release-2.37.25.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.22.dist-info → arelle_release-2.37.25.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.22.dist-info → arelle_release-2.37.25.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.22.dist-info → arelle_release-2.37.25.dist-info}/top_level.txt +0 -0
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
from operator import truediv
|
|
2
1
|
from typing import Any, Collection
|
|
3
2
|
|
|
4
3
|
from arelle.XbrlConst import xhtml
|
|
@@ -92,9 +91,7 @@ def _hasEventAttributes(elt: Any, attributes: Collection[str]) -> bool:
|
|
|
92
91
|
def containsScriptMarkers(elt: Any) -> Any:
|
|
93
92
|
_xhtmlNs = "{{{}}}".format(xhtml)
|
|
94
93
|
_xhtmlNsLen = len(_xhtmlNs)
|
|
95
|
-
eltTag = elt.tag
|
|
96
|
-
if eltTag.startswith(_xhtmlNs):
|
|
97
|
-
eltTag = eltTag[_xhtmlNsLen:]
|
|
94
|
+
eltTag = elt.tag.removeprefix(_xhtmlNs)
|
|
98
95
|
if ((eltTag in ("object", "script")) or
|
|
99
96
|
(eltTag == "a" and "javascript:" in elt.get("href","")) or
|
|
100
97
|
(eltTag == "img" and "javascript:" in elt.get("src","")) or
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
"""
|
|
2
|
+
See COPYRIGHT.md for copyright information.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
import binascii
|
|
7
|
+
import os
|
|
8
|
+
|
|
9
|
+
from dataclasses import dataclass
|
|
10
|
+
from typing import cast, Iterable
|
|
11
|
+
from urllib.parse import unquote
|
|
12
|
+
|
|
13
|
+
from lxml.etree import XML, XMLSyntaxError
|
|
14
|
+
from lxml.etree import _Element
|
|
15
|
+
|
|
16
|
+
from arelle import ModelDocument
|
|
17
|
+
from arelle.ModelObjectFactory import parser
|
|
18
|
+
from arelle.ModelXbrl import ModelXbrl
|
|
19
|
+
from arelle.UrlUtil import decodeBase64DataImage, scheme
|
|
20
|
+
from arelle.ValidateFilingText import parseImageDataURL, validateGraphicHeaderType
|
|
21
|
+
from arelle.ValidateXbrl import ValidateXbrl
|
|
22
|
+
from arelle.typing import TypeGetText
|
|
23
|
+
from arelle.utils.validate.Validation import Validation
|
|
24
|
+
|
|
25
|
+
_: TypeGetText # Handle gettext
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
@dataclass(frozen=True)
|
|
29
|
+
class ImageValidationParameters:
|
|
30
|
+
checkMinExternalResourceSize: bool
|
|
31
|
+
consolidated: bool
|
|
32
|
+
contentOtherThanXHTMLGuidance: str
|
|
33
|
+
missingMimeTypeIsIncorrect: bool
|
|
34
|
+
recommendBase64EncodingEmbeddedImages: bool
|
|
35
|
+
supportedImgTypes: dict[bool, tuple[str, ...]]
|
|
36
|
+
|
|
37
|
+
@classmethod
|
|
38
|
+
def from_non_esef(
|
|
39
|
+
cls,
|
|
40
|
+
checkMinExternalResourceSize: bool,
|
|
41
|
+
missingMimeTypeIsIncorrect: bool,
|
|
42
|
+
recommendBase64EncodingEmbeddedImages: bool,
|
|
43
|
+
supportedImgTypes: dict[bool, tuple[str, ...]],
|
|
44
|
+
) -> ImageValidationParameters:
|
|
45
|
+
return cls(
|
|
46
|
+
checkMinExternalResourceSize=checkMinExternalResourceSize,
|
|
47
|
+
consolidated=True,
|
|
48
|
+
# This must be an ESEF code, even if it's later discarded.
|
|
49
|
+
contentOtherThanXHTMLGuidance="ESEF.2.5.1",
|
|
50
|
+
missingMimeTypeIsIncorrect=missingMimeTypeIsIncorrect,
|
|
51
|
+
recommendBase64EncodingEmbeddedImages=recommendBase64EncodingEmbeddedImages,
|
|
52
|
+
supportedImgTypes=supportedImgTypes,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
def validateImageAndLog(
|
|
57
|
+
baseUrl: str | None,
|
|
58
|
+
image: str,
|
|
59
|
+
modelXbrl: ModelXbrl,
|
|
60
|
+
val: ValidateXbrl,
|
|
61
|
+
elts: _Element | list[_Element],
|
|
62
|
+
evaluatedMsg: str,
|
|
63
|
+
params: ImageValidationParameters,
|
|
64
|
+
) -> None:
|
|
65
|
+
for validation in validateImage(
|
|
66
|
+
baseUrl=baseUrl,
|
|
67
|
+
image=image,
|
|
68
|
+
modelXbrl=modelXbrl,
|
|
69
|
+
val=val,
|
|
70
|
+
elts=elts,
|
|
71
|
+
evaluatedMsg=evaluatedMsg,
|
|
72
|
+
params=params,
|
|
73
|
+
):
|
|
74
|
+
modelXbrl.log(level=validation.level.name, codes=validation.codes, msg=validation.msg, **validation.args)
|
|
75
|
+
|
|
76
|
+
# check image contents against mime/file ext and for Steganography
|
|
77
|
+
def validateImage(
|
|
78
|
+
baseUrl: str | None,
|
|
79
|
+
image: str,
|
|
80
|
+
modelXbrl: ModelXbrl,
|
|
81
|
+
val: ValidateXbrl,
|
|
82
|
+
elts: _Element | list[_Element],
|
|
83
|
+
evaluatedMsg: str,
|
|
84
|
+
params: ImageValidationParameters,
|
|
85
|
+
) -> Iterable[Validation]:
|
|
86
|
+
"""
|
|
87
|
+
image: either an url or base64 in data:image style
|
|
88
|
+
"""
|
|
89
|
+
contentOtherThanXHTMLGuidance = params.contentOtherThanXHTMLGuidance
|
|
90
|
+
# a list of img elements are maintained because an SVG can reference another SVG
|
|
91
|
+
# or other type of image and we need to log the entire reference chain.
|
|
92
|
+
if not isinstance(elts, list):
|
|
93
|
+
elts = [elts]
|
|
94
|
+
if params.checkMinExternalResourceSize:
|
|
95
|
+
minExternalRessourceSize = val.authParam["minExternalResourceSizekB"]
|
|
96
|
+
if minExternalRessourceSize != -1:
|
|
97
|
+
# transform kb to b
|
|
98
|
+
minExternalRessourceSize = minExternalRessourceSize * 1024
|
|
99
|
+
if scheme(image) in ("http", "https", "ftp"):
|
|
100
|
+
yield Validation.error(("ESEF.4.1.6.xHTMLDocumentContainsExternalReferences" if not params.consolidated
|
|
101
|
+
else "ESEF.3.5.1.inlineXbrlDocumentContainsExternalReferences",
|
|
102
|
+
"NL.NL-KVK.3.6.2.1.inlineXbrlDocumentContainsExternalReferences"),
|
|
103
|
+
_("Inline XBRL instance documents MUST NOT contain any reference pointing to resources outside the reporting package: %(element)s"),
|
|
104
|
+
modelObject=elts, element=elts[0].tag, evaluatedMsg=evaluatedMsg,
|
|
105
|
+
messageCodes=("ESEF.3.5.1.inlineXbrlDocumentContainsExternalReferences",
|
|
106
|
+
"ESEF.4.1.6.xHTMLDocumentContainsExternalReferences",
|
|
107
|
+
"NL.NL-KVK.3.6.2.1.inlineXbrlDocumentContainsExternalReferences"))
|
|
108
|
+
elif image.startswith("data:image"):
|
|
109
|
+
dataURLParts = parseImageDataURL(image)
|
|
110
|
+
if not dataURLParts or not dataURLParts.isBase64:
|
|
111
|
+
if params.recommendBase64EncodingEmbeddedImages:
|
|
112
|
+
yield Validation.warning(f"{contentOtherThanXHTMLGuidance}.embeddedImageNotUsingBase64Encoding",
|
|
113
|
+
_("Images included in the XHTML document SHOULD be base64 encoded: %(src)s."),
|
|
114
|
+
modelObject=elts, src=image[:128], evaluatedMsg=evaluatedMsg)
|
|
115
|
+
if dataURLParts and dataURLParts.mimeSubtype and dataURLParts.data:
|
|
116
|
+
yield from checkImageContents(None, modelXbrl, elts, dataURLParts.mimeSubtype, False, unquote(dataURLParts.data), params, True, val)
|
|
117
|
+
else:
|
|
118
|
+
hasMimeType = bool(dataURLParts.mimeSubtype)
|
|
119
|
+
if not hasMimeType:
|
|
120
|
+
yield Validation.error((f"{contentOtherThanXHTMLGuidance}.MIMETypeNotSpecified", "NL.NL-KVK.3.5.1.2.MIMETypeNotSpecified"),
|
|
121
|
+
_("Images included in the XHTML document MUST be saved with MIME type specifying PNG, GIF, SVG or JPG/JPEG formats: %(src)s."),
|
|
122
|
+
modelObject=elts, src=image[:128], evaluatedMsg=evaluatedMsg)
|
|
123
|
+
elif dataURLParts.mimeSubtype not in ("gif", "jpeg", "png", "svg+xml"):
|
|
124
|
+
yield Validation.error((f"{contentOtherThanXHTMLGuidance}.imageFormatNotSupported", "NL.NL-KVK.3.5.1.5.imageFormatNotSupported"),
|
|
125
|
+
_("Images included in the XHTML document MUST be saved in PNG, GIF, SVG or JPG/JPEG formats: %(src)s."),
|
|
126
|
+
modelObject=elts, src=image[:128], evaluatedMsg=evaluatedMsg)
|
|
127
|
+
# check for malicious image contents
|
|
128
|
+
try: # allow embedded newlines
|
|
129
|
+
imgContents = decodeBase64DataImage(dataURLParts.data)
|
|
130
|
+
yield from checkImageContents(None, modelXbrl, elts, str(dataURLParts.mimeSubtype), False, imgContents, params, hasMimeType, val)
|
|
131
|
+
imgContents = b"" # deref, may be very large
|
|
132
|
+
|
|
133
|
+
except binascii.Error as err:
|
|
134
|
+
if params.recommendBase64EncodingEmbeddedImages:
|
|
135
|
+
yield Validation.error(f"{contentOtherThanXHTMLGuidance}.embeddedImageNotUsingBase64Encoding",
|
|
136
|
+
_("Base64 encoding error %(err)s in image source: %(src)s."),
|
|
137
|
+
modelObject=elts, err=str(err), src=image[:128], evaluatedMsg=evaluatedMsg)
|
|
138
|
+
else:
|
|
139
|
+
# presume it to be an image file, check image contents
|
|
140
|
+
try:
|
|
141
|
+
base = baseUrl
|
|
142
|
+
normalizedUri = modelXbrl.modelManager.cntlr.webCache.normalizeUrl(image, base)
|
|
143
|
+
if not modelXbrl.fileSource.isInArchive(normalizedUri):
|
|
144
|
+
normalizedUri = modelXbrl.modelManager.cntlr.webCache.getfilename(normalizedUri)
|
|
145
|
+
imglen = 0
|
|
146
|
+
with modelXbrl.fileSource.file(normalizedUri, binary=True)[0] as fh:
|
|
147
|
+
imgContents = cast(bytes, fh.read())
|
|
148
|
+
imglen += len(imgContents or '')
|
|
149
|
+
yield from checkImageContents(normalizedUri, modelXbrl, elts, os.path.splitext(image)[1], True, imgContents, params, False, val)
|
|
150
|
+
imgContents = b"" # deref, may be very large
|
|
151
|
+
if params.checkMinExternalResourceSize and imglen < minExternalRessourceSize:
|
|
152
|
+
yield Validation.warning(
|
|
153
|
+
("%s.imageIncludedAndNotEmbeddedAsBase64EncodedString" % contentOtherThanXHTMLGuidance, "NL.NL-KVK.3.5.1.imageIncludedAndNotEmbeddedAsBase64EncodedString"),
|
|
154
|
+
_("Images SHOULD be included in the XHTML document as a base64 encoded string unless their size exceeds the minimum size for the authority (%(maxImageSize)s): %(file)s."),
|
|
155
|
+
modelObject=elts, maxImageSize=minExternalRessourceSize, file=os.path.basename(normalizedUri), evaluatedMsg=evaluatedMsg)
|
|
156
|
+
except IOError as err:
|
|
157
|
+
fileReferencingImage = os.path.basename(baseUrl) if baseUrl else ''
|
|
158
|
+
yield Validation.error((f"{contentOtherThanXHTMLGuidance}.imageFileCannotBeLoaded", "NL.NL-KVK.3.5.1.imageFileCannotBeLoaded"),
|
|
159
|
+
_("Error opening the file '%(src)s' referenced by '%(fileReferencingImage)s': %(error)s"),
|
|
160
|
+
modelObject=elts, src=image, fileReferencingImage=fileReferencingImage, error=err, evaluatedMsg=evaluatedMsg)
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
def checkImageContents(
|
|
164
|
+
baseURI: str | None,
|
|
165
|
+
modelXbrl: ModelXbrl,
|
|
166
|
+
imgElts: list[_Element],
|
|
167
|
+
imgType: str,
|
|
168
|
+
isFile: bool,
|
|
169
|
+
data: bytes | str,
|
|
170
|
+
params: ImageValidationParameters,
|
|
171
|
+
hasMimeType: bool,
|
|
172
|
+
val: ValidateXbrl,
|
|
173
|
+
) -> Iterable[Validation]:
|
|
174
|
+
guidance = params.contentOtherThanXHTMLGuidance
|
|
175
|
+
if "svg" in imgType:
|
|
176
|
+
try:
|
|
177
|
+
yield from checkSVGContent(baseURI, modelXbrl, imgElts, data, params, val)
|
|
178
|
+
except XMLSyntaxError as err:
|
|
179
|
+
try:
|
|
180
|
+
yield from checkSVGContent(baseURI, modelXbrl, imgElts, unquote(data), params, val) # Try with utf-8 decoded data as in conformance suite G4-1-3_2/TC2
|
|
181
|
+
except XMLSyntaxError:
|
|
182
|
+
yield Validation.error((f"{guidance}.imageFileCannotBeLoaded", "NL.NL-KVK.3.5.1.imageFileCannotBeLoaded"),
|
|
183
|
+
_("Image SVG has XML error %(error)s"),
|
|
184
|
+
modelObject=imgElts, error=err)
|
|
185
|
+
except UnicodeDecodeError as err:
|
|
186
|
+
yield Validation.error((f"{guidance}.imageFileCannotBeLoaded", "NL.NL-KVK.3.5.1.imageFileCannotBeLoaded"),
|
|
187
|
+
_("Image SVG has XML error %(error)s"),
|
|
188
|
+
modelObject=imgElts, error=err)
|
|
189
|
+
else:
|
|
190
|
+
headerType = validateGraphicHeaderType(data) # type: ignore[arg-type]
|
|
191
|
+
if (("gif" not in imgType and headerType == "gif") or
|
|
192
|
+
("jpeg" not in imgType and "jpg" not in imgType and headerType == "jpg") or
|
|
193
|
+
("png" not in imgType and headerType == "png")):
|
|
194
|
+
imageDoesNotMatchItsFileExtension = (f"{guidance}.imageDoesNotMatchItsFileExtension", "NL.NL-KVK.3.5.1.4.imageDoesNotMatchItsFileExtension")
|
|
195
|
+
incorrectMIMETypeSpecified = (f"{guidance}.incorrectMIMETypeSpecified", "NL.NL-KVK.3.5.1.3.incorrectMIMETypeSpecified")
|
|
196
|
+
if isFile:
|
|
197
|
+
codes = imageDoesNotMatchItsFileExtension
|
|
198
|
+
message = _("File type %(headerType)s inferred from file signature does not match the file extension %(imgType)s")
|
|
199
|
+
else:
|
|
200
|
+
codes = incorrectMIMETypeSpecified
|
|
201
|
+
message = _("File type %(headerType)s inferred from file signature does not match the data URL media subtype (MIME subtype) %(imgType)s")
|
|
202
|
+
if isFile or params.missingMimeTypeIsIncorrect or hasMimeType:
|
|
203
|
+
yield Validation.error(codes, message,
|
|
204
|
+
modelObject=imgElts, imgType=imgType, headerType=headerType,
|
|
205
|
+
messageCodes=(
|
|
206
|
+
imageDoesNotMatchItsFileExtension, incorrectMIMETypeSpecified,
|
|
207
|
+
"NL.NL-KVK.3.5.1.3.incorrectMIMETypeSpecified", "NL.NL-KVK.3.5.1.4.imageDoesNotMatchItsFileExtension",
|
|
208
|
+
))
|
|
209
|
+
elif not any(it in imgType for it in params.supportedImgTypes[isFile]):
|
|
210
|
+
yield Validation.error((f"{guidance}.imageFormatNotSupported", "NL.NL-KVK.3.5.1.5.imageFormatNotSupported"),
|
|
211
|
+
_("Images included in the XHTML document MUST be saved in PNG, GIF, SVG or JPEG formats: %(imgType)s is not supported"),
|
|
212
|
+
modelObject=imgElts, imgType=imgType)
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def checkSVGContent(
|
|
216
|
+
baseURI: str | None,
|
|
217
|
+
modelXbrl: ModelXbrl,
|
|
218
|
+
imgElts: list[_Element],
|
|
219
|
+
data: bytes | str,
|
|
220
|
+
params: ImageValidationParameters,
|
|
221
|
+
val: ValidateXbrl,
|
|
222
|
+
) -> Iterable[Validation]:
|
|
223
|
+
if baseURI:
|
|
224
|
+
svgDoc = cast(ModelDocument.ModelDocument, ModelDocument.load(modelXbrl, baseURI, referringElement=imgElts[0]))
|
|
225
|
+
elt = svgDoc.xmlRootElement
|
|
226
|
+
else:
|
|
227
|
+
_parser, _, _ = parser(modelXbrl, baseURI)
|
|
228
|
+
elt = XML(data, parser=_parser)
|
|
229
|
+
yield from checkSVGContentElt(elt, baseURI, modelXbrl, imgElts, params, val)
|
|
230
|
+
|
|
231
|
+
|
|
232
|
+
def getHref(elt:_Element) -> str:
|
|
233
|
+
simple_href = elt.get("href", "").strip()
|
|
234
|
+
if len(simple_href) > 0:
|
|
235
|
+
return simple_href
|
|
236
|
+
else:
|
|
237
|
+
# 'xlink:href' is deprecated but still used by some SVG generators
|
|
238
|
+
return elt.get("{http://www.w3.org/1999/xlink}href", "").strip()
|
|
239
|
+
|
|
240
|
+
|
|
241
|
+
def checkSVGContentElt(
|
|
242
|
+
elt: _Element,
|
|
243
|
+
baseUrl: str | None,
|
|
244
|
+
modelXbrl: ModelXbrl,
|
|
245
|
+
imgElts: list[_Element],
|
|
246
|
+
params: ImageValidationParameters,
|
|
247
|
+
val: ValidateXbrl,
|
|
248
|
+
) -> Iterable[Validation]:
|
|
249
|
+
guidance = params.contentOtherThanXHTMLGuidance
|
|
250
|
+
rootElement = True
|
|
251
|
+
for elt in elt.iter():
|
|
252
|
+
if rootElement:
|
|
253
|
+
if elt.tag != "{http://www.w3.org/2000/svg}svg":
|
|
254
|
+
yield Validation.error((f"{guidance}.imageFileCannotBeLoaded", "NL.NL-KVK.3.5.1.imageFileCannotBeLoaded"),
|
|
255
|
+
_("Image SVG has root element which is not svg"),
|
|
256
|
+
modelObject=imgElts)
|
|
257
|
+
rootElement = False
|
|
258
|
+
# Comments, processing instructions, and maybe other special constructs don't have string tags.
|
|
259
|
+
if not isinstance(elt.tag, str):
|
|
260
|
+
continue
|
|
261
|
+
eltTag = elt.tag.rpartition("}")[2] # strip namespace
|
|
262
|
+
if eltTag == "image":
|
|
263
|
+
imgElts = [*imgElts, elt]
|
|
264
|
+
yield from validateImage(baseUrl, getHref(elt), modelXbrl, val, imgElts, "", params)
|
|
265
|
+
if eltTag in ("object", "script", "audio", "foreignObject", "iframe", "image", "use", "video"):
|
|
266
|
+
href = elt.get("href","")
|
|
267
|
+
if eltTag in ("object", "script") or "javascript:" in href:
|
|
268
|
+
yield Validation.error((f"{guidance}.executableCodePresent", "NL.NL-KVK.3.5.1.1.executableCodePresent"),
|
|
269
|
+
_("Inline XBRL images MUST NOT contain executable code: %(element)s"),
|
|
270
|
+
modelObject=imgElts, element=eltTag)
|
|
271
|
+
elif scheme(href) in ("http", "https", "ftp"):
|
|
272
|
+
yield Validation.error((f"{guidance}.referencesPointingOutsideOfTheReportingPackagePresent", "NL.NL-KVK.3.6.2.1.inlineXbrlDocumentContainsExternalReferences"),
|
|
273
|
+
_("Inline XBRL instance document [image] MUST NOT contain any reference pointing to resources outside the reporting package: %(element)s"),
|
|
274
|
+
modelObject=imgElts, element=eltTag)
|
|
@@ -41,7 +41,7 @@ arelle/ModelInstanceObject.py,sha256=gRRPEZR-x6IL-0z0-asKd2nbgReZFKHKmk7QTxKXI64
|
|
|
41
41
|
arelle/ModelManager.py,sha256=QUNcD2LC_YyyGFU8bFTSuzIGI1qpOK55KBlQ697Ep1I,11075
|
|
42
42
|
arelle/ModelObject.py,sha256=Rttkhv-PtfneZyDYsG5FDh98BzT97ameTmwNdqFaOv0,18657
|
|
43
43
|
arelle/ModelObjectFactory.py,sha256=XuNF4Re3p00tODCdyspfar_DNCXfARqCaLEkntgAZ0g,8750
|
|
44
|
-
arelle/ModelRelationshipSet.py,sha256=
|
|
44
|
+
arelle/ModelRelationshipSet.py,sha256=jlLqEnd0KrLjpRUhDzFLgMPsRmyOwfgl1w13yW3flLo,24803
|
|
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
|
|
@@ -63,10 +63,10 @@ arelle/TableStructure.py,sha256=PABOHJiTa56cHyF9qRLD7TohmCHyDTrGEltW8toP_rk,2940
|
|
|
63
63
|
arelle/TkTableWrapper.py,sha256=Bdm-WmLdwIiudqfaVGZElip_92eeSKQdd7hCjlILm1A,33612
|
|
64
64
|
arelle/UITkTable.py,sha256=N83cXi5c0lLZLsDbwSKcPrlYoUoGsNavGN5YRx6d9XY,39810
|
|
65
65
|
arelle/UiUtil.py,sha256=3G0xPclZI8xW_XQDbiFrmylB7Nd5muqi5n2x2oMkMZU,34218
|
|
66
|
-
arelle/Updater.py,sha256=
|
|
66
|
+
arelle/Updater.py,sha256=IZ8cq44Rq88WbQcB1VOpMA6bxdfZxfYQ8rgu9Ehpbes,7448
|
|
67
67
|
arelle/UrlUtil.py,sha256=HrxZSG59EUMGMMGmWPuZkPi5-0BGqY3jAMkp7V4IdZo,32400
|
|
68
68
|
arelle/Validate.py,sha256=XBrKQHsSC7Qz5Fp-M3gODfxwW8a-PWyBzZkCekYrMZM,56920
|
|
69
|
-
arelle/ValidateDuplicateFacts.py,sha256=
|
|
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
|
|
72
72
|
arelle/ValidateUtr.py,sha256=oxOPrOa1XEzBay4miXvx6eRLTnVFYUIJC9ueWUk4EkI,13633
|
|
@@ -114,7 +114,7 @@ arelle/ViewWinVersReport.py,sha256=aYfsOgynVZpMzl6f2EzQCBLzdihYGycwb5SiTghkgMQ,9
|
|
|
114
114
|
arelle/ViewWinXml.py,sha256=4ZGKtjaoCwU9etKYm9ZAS7jSmUxba1rqNEdv0OIyjTY,1250
|
|
115
115
|
arelle/WatchRss.py,sha256=5Ih4igH2MM4hpOuAXy9eO0QAyZ7jZR3S5bPzo2sdFpw,14097
|
|
116
116
|
arelle/WebCache.py,sha256=B62IxIHLX4hcDr_0MJGfmzUXau2ONqiMk6vLVLxAIhA,45057
|
|
117
|
-
arelle/XbrlConst.py,sha256=
|
|
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
|
|
120
120
|
arelle/XmlUtil.py,sha256=1VToOOylF8kbEorEdZLThmq35j9bmuF_DS2q9NthnHU,58774
|
|
@@ -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=uRbec_j0ZhdrtZwA-ge3qPnm-hdyZFzvTqnuVbV5-z8,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
|
|
@@ -385,9 +385,9 @@ arelle/plugin/validate/DBA/ValidationPluginExtension.py,sha256=JozGD4LqGn8zbc_-B
|
|
|
385
385
|
arelle/plugin/validate/DBA/__init__.py,sha256=KhmlUkqgsRtEXpu5DZBXFzv43nUTvi-0sdDNRfw5Up4,1564
|
|
386
386
|
arelle/plugin/validate/DBA/resources/config.xml,sha256=KHfo7SrjzmjHbfwIJBmESvOOjdIv4Av26BCcZxfn3Pg,875
|
|
387
387
|
arelle/plugin/validate/DBA/rules/__init__.py,sha256=t6xULMkNT7naI-sKmiD3ohX2Q41TTKqFPtKI01BKiyA,10349
|
|
388
|
-
arelle/plugin/validate/DBA/rules/fr.py,sha256=
|
|
388
|
+
arelle/plugin/validate/DBA/rules/fr.py,sha256=lWsJ3J68ecrzwaE5uh_9ymFispXiuK_GmGZbFoODLgo,71324
|
|
389
389
|
arelle/plugin/validate/DBA/rules/tc.py,sha256=CXPOGHpab9Y-iV84wDXrsE-rPe_d6Uhw4HjEyTBEzq4,1572
|
|
390
|
-
arelle/plugin/validate/DBA/rules/th.py,sha256=
|
|
390
|
+
arelle/plugin/validate/DBA/rules/th.py,sha256=mDrjescz6106jBGjdH6bipqx48BnxcjHSkNL1qQf0QE,6227
|
|
391
391
|
arelle/plugin/validate/DBA/rules/tm.py,sha256=ui9oKBqlAForwkQ9kk9KBiUogTJE5pv1RbIejKASprY,11797
|
|
392
392
|
arelle/plugin/validate/DBA/rules/tr.py,sha256=zdi3kQ82whmweVWRLbMvcNpM8sqtUliPsGfd81rgZws,14671
|
|
393
393
|
arelle/plugin/validate/EBA/__init__.py,sha256=1kW-04W32sStSAL8wvW1ZpXnjlFv6KLbfE4aifYUB2A,46000
|
|
@@ -401,8 +401,7 @@ arelle/plugin/validate/ESEF/ESEF_2021/Image.py,sha256=4bnhuy5viBU0viPjb4FhcRRjVV
|
|
|
401
401
|
arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py,sha256=l4Nl-QuYJlM4WDpg87YjTwMUh05VP7tNq86gLFhWHyE,63380
|
|
402
402
|
arelle/plugin/validate/ESEF/ESEF_2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
403
403
|
arelle/plugin/validate/ESEF/ESEF_Current/DTS.py,sha256=epp-PBh1NJzQqgxUE6C468HmoDc2w3j54rMwfiOAry4,29334
|
|
404
|
-
arelle/plugin/validate/ESEF/ESEF_Current/
|
|
405
|
-
arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py,sha256=RDWfo8a36v2Hw6bYij1ZIh0HXuw_rNKa6WwDnkLDPZ8,73642
|
|
404
|
+
arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py,sha256=tWgBYHtnEosZTOBN3p-DguhYwCCNhf8xvk5K5qcZK_I,73637
|
|
406
405
|
arelle/plugin/validate/ESEF/ESEF_Current/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
407
406
|
arelle/plugin/validate/ESEF/resources/authority-validations.json,sha256=JriLZ45KmUYlQiPbXJCAahobqdrst64Ay77bofZhB5Q,14940
|
|
408
407
|
arelle/plugin/validate/ESEF/resources/config.xml,sha256=t3STU_-QYM7Ay8YwZRPapnohiWVWhjfr4L2Rjx9xN9U,3902
|
|
@@ -410,17 +409,17 @@ arelle/plugin/validate/FERC/__init__.py,sha256=V4fXcFKBsjFFPs9_1NhvDjWpEQCoQM0tR
|
|
|
410
409
|
arelle/plugin/validate/FERC/config.xml,sha256=bn9b8eCqJA1J62rYq1Nz85wJrMGAahVmmnIUQZyerjo,1919
|
|
411
410
|
arelle/plugin/validate/FERC/resources/ferc-utr.xml,sha256=OCRj9IUpdXATCBXKbB71apYx9kxcNtZW-Hq4s-avsRY,2663
|
|
412
411
|
arelle/plugin/validate/NL/DisclosureSystems.py,sha256=urRmYJ8RnGPlTgSVKW7zGN4_4CtL3OVKlcI3LwTpBz4,561
|
|
413
|
-
arelle/plugin/validate/NL/LinkbaseType.py,sha256=
|
|
414
|
-
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=
|
|
412
|
+
arelle/plugin/validate/NL/LinkbaseType.py,sha256=BwRQl4XZFFCopufC2FEMLhYENNTk2JUWVQvnIUsaqtI,3108
|
|
413
|
+
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=en-x3J_sH9w-lIJzNwKRE6rRJ2fgovovVtq7n7QLo4E,34667
|
|
415
414
|
arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=suCNqrtC_IMndyS_mXaeujDvjgSduTQ9KPNRc9B0F6I,16098
|
|
416
415
|
arelle/plugin/validate/NL/__init__.py,sha256=23cF5ih2wu0RO_S0B52nVB7LrdlmnYcctOUezF0kKQ8,2874
|
|
417
|
-
arelle/plugin/validate/NL/resources/config.xml,sha256=
|
|
416
|
+
arelle/plugin/validate/NL/resources/config.xml,sha256=qBE6zywFSmemBSWonuTII5iuOCUlNb1nvkpMbsZb5PM,1853
|
|
418
417
|
arelle/plugin/validate/NL/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
419
418
|
arelle/plugin/validate/NL/rules/br_kvk.py,sha256=0SwKieWzTDm3YMsXPS6zTdgbk7_Z9CzqRkRmCRz1OiQ,15789
|
|
420
419
|
arelle/plugin/validate/NL/rules/fg_nl.py,sha256=4Puq5wAjtK_iNd4wisH_R0Z_EKJ7MT2OCai5g4t1MPE,10714
|
|
421
|
-
arelle/plugin/validate/NL/rules/fr_kvk.py,sha256
|
|
420
|
+
arelle/plugin/validate/NL/rules/fr_kvk.py,sha256=kYqXt45S6eM32Yg9ii7pUhOMfJaHurgYqQ73FyQALs8,8171
|
|
422
421
|
arelle/plugin/validate/NL/rules/fr_nl.py,sha256=-M1WtXp06khhtkfOVPCa-b8UbC281gk4YfDhvtAVlnI,31424
|
|
423
|
-
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=
|
|
422
|
+
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=2HA7S5YABZhy44mUehGkqypUCG1KxeY2pWWt_oyVzoo,85187
|
|
424
423
|
arelle/plugin/validate/ROS/DisclosureSystems.py,sha256=rJ81mwQDYTi6JecFZ_zhqjjz3VNQRgjHNSh0wcQWAQE,18
|
|
425
424
|
arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=IV7ILhNvgKwQXqbpSA6HRNt9kEnejCyMADI3wyyIgk0,4036
|
|
426
425
|
arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=FBhEp8t396vGdvCbMEimfcxmGiGnhXMen-yVLWnkFaI,758
|
|
@@ -735,14 +734,15 @@ arelle/utils/PluginData.py,sha256=GUnuZaApm1J4Xm9ZA1U2M1aask-AaNGviLtc0fgXbFg,26
|
|
|
735
734
|
arelle/utils/PluginHooks.py,sha256=CeVxti23VjERQl4xWFucDVTW63TCG2PUdnxpjd3x_Ms,31170
|
|
736
735
|
arelle/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
737
736
|
arelle/utils/validate/Decorator.py,sha256=8LGmA171HZgKrALtsMKyHqMNM-XCdwJOv6KpZz4pC2c,3161
|
|
738
|
-
arelle/utils/validate/DetectScriptsInXhtml.py,sha256=
|
|
737
|
+
arelle/utils/validate/DetectScriptsInXhtml.py,sha256=RFBh_Z24OjR69s71qQzSzbxdU-WCTWuvYlONN-BgpZ0,2098
|
|
738
|
+
arelle/utils/validate/ESEFImage.py,sha256=qel9_DgZGAQnCM45YQ93HLspuIK0JEUg4uotj82UarI,14907
|
|
739
739
|
arelle/utils/validate/Validation.py,sha256=n6Ag7VeCj_VO5nqzw_P53hOfXXeT2APK0Enb3UQqBns,832
|
|
740
740
|
arelle/utils/validate/ValidationPlugin.py,sha256=_WeRPXZUTCcSN3FLbFwiAe_2pAUTxZZk1061qMoDW8w,11527
|
|
741
741
|
arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txrxRFgh8FxIs,548
|
|
742
742
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
743
743
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
744
744
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
745
|
-
arelle_release-2.37.
|
|
745
|
+
arelle_release-2.37.25.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
746
746
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
747
747
|
tests/integration_tests/download_cache.py,sha256=jVMIVICsZjcVc9DCPPu3fCjF9_cWSS3tqSynhFs3oAM,4097
|
|
748
748
|
tests/integration_tests/integration_test_util.py,sha256=H7mncbv0T9ZeVyrtk9Hohe3k6jgcYykHkt-LGE-Q9aQ,10270
|
|
@@ -781,7 +781,7 @@ tests/integration_tests/validation/validation_util.py,sha256=_f0gd5BTts44Z9aEKi9
|
|
|
781
781
|
tests/integration_tests/validation/conformance_suite_configurations/cipc_current.py,sha256=oLXe3xIsEZLz3cv1cDdMQIuS_NgyI9Uimc9hy0NMWqg,642
|
|
782
782
|
tests/integration_tests/validation/conformance_suite_configurations/dba_current.py,sha256=j-7jCpzbGXbOzG8HGEyS0ciCYSPZzZLV44VQGhP3Hmc,875
|
|
783
783
|
tests/integration_tests/validation/conformance_suite_configurations/dba_multi_current.py,sha256=ICkP18Wu7aTDfszfYlrfVnBj9oe7ppXR-8wxQqCPqW0,837
|
|
784
|
-
tests/integration_tests/validation/conformance_suite_configurations/efm_current.py,sha256=
|
|
784
|
+
tests/integration_tests/validation/conformance_suite_configurations/efm_current.py,sha256=zbZ9c-LoZJDRp0Lobl_oH3xRw4g-2u6oQqU0-oo5NOE,1322
|
|
785
785
|
tests/integration_tests/validation/conformance_suite_configurations/efm_reg_dqc.py,sha256=HiT8OcRAOVKLsl95Y91L66FeOsIMMMAQCs-DLMG-Lb0,739
|
|
786
786
|
tests/integration_tests/validation/conformance_suite_configurations/efm_reg_pragmatic.py,sha256=U6dew0sIibjZe4r6na912qyIVAjxljh2HDix-8AwvhM,727
|
|
787
787
|
tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2021.py,sha256=KpXpm6kMYAp94K-J7-GZS47iRVE9Kr5cfxPniFFSI3A,1146
|
|
@@ -797,8 +797,8 @@ tests/integration_tests/validation/conformance_suite_configurations/kvk_nt16.py,
|
|
|
797
797
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt17.py,sha256=lmEZonthFm0YKFmp1dwXtdJ2T7txUeSpL4mbAo8fl4Y,1292
|
|
798
798
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt18.py,sha256=EG2RQVkvFENhzUF3fl3QvDnH7ZPYS1n1Fo8bhfmSczM,1205
|
|
799
799
|
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=
|
|
801
|
-
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024_gaap_other.py,sha256=
|
|
800
|
+
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py,sha256=JM1RcC5QuweIEPk8HpzneE5VvaH8Gjqx_TJeBd97WbQ,9465
|
|
801
|
+
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024_gaap_other.py,sha256=vtzYSd0-vF9g6eHfrIUpMBz7D0HdR_gi8O0429lOaww,31667
|
|
802
802
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py,sha256=O_LFVBZPkjxmbrU7_C7VTLtrdoCUx2bYXOXw6_MlRtQ,846
|
|
803
803
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py,sha256=aTN3Ez6lPsZsuypHZP84DneOtYxUZSjUiGypHy6ofHQ,846
|
|
804
804
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py,sha256=sqHLjrHc95dTu0guTgKkphaKM1zNfKGnN4GKkZDLzeU,845
|
|
@@ -1551,7 +1551,7 @@ tests/resources/conformance_suites_expected/efm_current.csv,sha256=9YoKy-kYo_VAy
|
|
|
1551
1551
|
tests/resources/conformance_suites_expected/efm_reg_dqc.csv,sha256=0CEItNnnEE_s8uGHA8CidxEVyvOiTCv5nAWpc4dCUmE,9968847
|
|
1552
1552
|
tests/resources/conformance_suites_expected/efm_reg_pragmatic.csv,sha256=J_sDOjJGDjFnseMU7QIBttvvOjjnPp_WdmrCkjvCu4Y,196
|
|
1553
1553
|
tests/resources/conformance_suites_timing/dba_current.json,sha256=e5jmGVDcPbaXDbHNK3RQz-_gsozU1dL_J0gcNDzHnjg,1467
|
|
1554
|
-
tests/resources/conformance_suites_timing/efm_current.json,sha256=
|
|
1554
|
+
tests/resources/conformance_suites_timing/efm_current.json,sha256=iqqcBoDJVs2F_xW03gCirDyaLZoS9x482KAQgMhCvvg,1096604
|
|
1555
1555
|
tests/resources/conformance_suites_timing/efm_reg_dqc.json,sha256=4ry0JC8XA-8Bua2E75edknjxcL42Qj6nMZxvjCdW2uc,1708653
|
|
1556
1556
|
tests/resources/conformance_suites_timing/esef_ixbrl_2021.json,sha256=3UBEba0PStPkAHgYZc6_WAH3_pBTGOpDNRQ0X1hxH74,26836
|
|
1557
1557
|
tests/resources/conformance_suites_timing/esef_ixbrl_2022.json,sha256=1ifWHng_AENYMwug6h68pqK72EHk6nMq2ZLf7-U9Fh8,21740
|
|
@@ -1583,7 +1583,7 @@ tests/unit_tests/arelle/test_pluginmanager.py,sha256=_Gi03PP-6FZ7mWqe2ysS_N_suOQ
|
|
|
1583
1583
|
tests/unit_tests/arelle/test_qname.py,sha256=0aKh6jYWmY4Xg3wOS839Tdqa1SHwHuha6akv5T6qddY,4892
|
|
1584
1584
|
tests/unit_tests/arelle/test_runtimeoptions.py,sha256=OB4ds28ODYjzgm9wlojd_fIRf7iRGOmDaPgxm4kiCwM,1315
|
|
1585
1585
|
tests/unit_tests/arelle/test_system_info.py,sha256=G9VtKX9WCaas2D2s-Yw-4kcq6_zcY-LkjOveGvQNvZI,655
|
|
1586
|
-
tests/unit_tests/arelle/test_updater.py,sha256=
|
|
1586
|
+
tests/unit_tests/arelle/test_updater.py,sha256=4HJDlS5VRtShnT57NbioHtWzTMR34NguJ37HEWkKl4Y,17254
|
|
1587
1587
|
tests/unit_tests/arelle/test_urlutil.py,sha256=3WTHxic3XiiOGZQxkHm9m97kFbLHOc27oXypU8fFt1w,914
|
|
1588
1588
|
tests/unit_tests/arelle/test_validatexbrlcalcs.py,sha256=eMVYJkm6v1I2JswCTIKumU92jKdFeB_jxTGt9RkfBjU,2827
|
|
1589
1589
|
tests/unit_tests/arelle/test_version.py,sha256=5dxNN083Hw6pdVsY11DatBFVM8pMVttruCDgou870Og,2000
|
|
@@ -1594,10 +1594,10 @@ tests/unit_tests/arelle/conformance/test_csv_testcase_loader.py,sha256=u8AvJ-wUI
|
|
|
1594
1594
|
tests/unit_tests/arelle/formula/test_fact_aspects_cache.py,sha256=4qtYSqSHYprihquj9orxcjHHaTE2jKDPQvm4QUhtUWk,6076
|
|
1595
1595
|
tests/unit_tests/arelle/oim/test_load.py,sha256=NxiUauQwJVfWAHbbpsMHGSU2d3Br8Pki47JOxKmG83M,1216
|
|
1596
1596
|
tests/unit_tests/arelle/plugin/test_plugin_imports.py,sha256=bdhIs9frAnFsdGU113yBk09_jis-z43dwUItMFYuSYM,1064
|
|
1597
|
-
tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py,sha256=
|
|
1597
|
+
tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py,sha256=H0ndmQ0sFO5WVMzAxPCH1WciRhCg_HgKUtQCg0xlmtg,1238
|
|
1598
1598
|
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.
|
|
1599
|
+
arelle_release-2.37.25.dist-info/METADATA,sha256=qMoZayQIOklP4YadlKQ_DOpjVwBTCvWuNNvtVEcVgfY,9134
|
|
1600
|
+
arelle_release-2.37.25.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1601
|
+
arelle_release-2.37.25.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
1602
|
+
arelle_release-2.37.25.dist-info/top_level.txt,sha256=ZYmYGmhW5Jvo3vJ4iXBZPUI29LvYhntom04w90esJvU,13
|
|
1603
|
+
arelle_release-2.37.25.dist-info/RECORD,,
|
|
@@ -6,7 +6,7 @@ from tests.integration_tests.validation.conformance_suite_config import (
|
|
|
6
6
|
ConformanceSuiteConfig,
|
|
7
7
|
)
|
|
8
8
|
|
|
9
|
-
CONFORMANCE_SUITE_ZIP_NAME = 'efm-
|
|
9
|
+
CONFORMANCE_SUITE_ZIP_NAME = 'efm-74-250616.zip'
|
|
10
10
|
|
|
11
11
|
config = ConformanceSuiteConfig(
|
|
12
12
|
additional_plugins_by_prefix=[(f'conf/{t}', frozenset({'EDGAR/render'})) for t in [
|
|
@@ -27,7 +27,7 @@ config = ConformanceSuiteConfig(
|
|
|
27
27
|
source=AssetSource.S3_PUBLIC,
|
|
28
28
|
)
|
|
29
29
|
],
|
|
30
|
-
cache_version_id='
|
|
30
|
+
cache_version_id='fQUkcdNcy7HZxP3bfwn1v3DnJkc4aKKp',
|
|
31
31
|
info_url='https://www.sec.gov/structureddata/osdinteractivedatatestsuite',
|
|
32
32
|
name=PurePath(__file__).stem,
|
|
33
33
|
plugins=frozenset({
|
|
@@ -22,9 +22,17 @@ config = ConformanceSuiteConfig(
|
|
|
22
22
|
'G3-1-3_1/index.xml:TC2_invalid': {
|
|
23
23
|
'scenarioNotUsedInExtensionTaxonomy': 1, # Also fails 4.2.1.1
|
|
24
24
|
},
|
|
25
|
+
'G3-1-3_2/index.xml:TC2_invalid': {
|
|
26
|
+
'extensionTaxonomyLineItemNotLinkedToAnyHypercube': 1,
|
|
27
|
+
'usableConceptsNotIncludedInDefinitionLink': 1,
|
|
28
|
+
},
|
|
29
|
+
'G3-5-1_5/index.xml:TC2_invalid': {
|
|
30
|
+
# This is the expected error, but we return two of them, slightly different.
|
|
31
|
+
'imageFormatNotSupported': 1,
|
|
32
|
+
},
|
|
25
33
|
'G3-5-3_1/index.xml:TC2_invalid': {
|
|
26
34
|
'arelle:ixdsTargetNotDefined': 1,
|
|
27
|
-
'extensionTaxonomyWrongFilesStructure':
|
|
35
|
+
'extensionTaxonomyWrongFilesStructure': 2,
|
|
28
36
|
# This test is looking at the usage of the target attribute and does not import the correct taxonomy urls
|
|
29
37
|
'requiredEntryPointNotImported': 1,
|
|
30
38
|
'incorrectKvkTaxonomyVersionUsed': 1,
|
|
@@ -38,18 +46,39 @@ config = ConformanceSuiteConfig(
|
|
|
38
46
|
'message:valueKvKIdentifier': 13,
|
|
39
47
|
'nonIdenticalIdentifier': 1,
|
|
40
48
|
},
|
|
49
|
+
'G4-1-1_1/index.xml:TC4_invalid': {
|
|
50
|
+
'extensionTaxonomyWrongFilesStructure': 1,
|
|
51
|
+
},
|
|
52
|
+
'G4-1-1_1/index.xml:TC5_invalid': {
|
|
53
|
+
'usableConceptsNotIncludedInPresentationLink': 1,
|
|
54
|
+
},
|
|
55
|
+
'G4-1-1_1/index.xml:TC7_invalid': {
|
|
56
|
+
'usableConceptsNotIncludedInPresentationLink': 1,
|
|
57
|
+
},
|
|
41
58
|
'G4-1-2_1/index.xml:TC2_valid': {
|
|
42
59
|
'undefinedLanguageForTextFact': 1,
|
|
43
60
|
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
|
|
44
61
|
},
|
|
62
|
+
'G4-1-2_1/index.xml:TC3_invalid': {
|
|
63
|
+
'extensionTaxonomyLineItemNotLinkedToAnyHypercube': 11,
|
|
64
|
+
},
|
|
45
65
|
'G4-1-2_2/index.xml:TC2_invalid': {
|
|
66
|
+
'anchoringRelationshipsForConceptsDefinedInElrContainingDimensionalRelationships': 1, # Also fails 4.3.2.1
|
|
46
67
|
'incorrectSummationItemArcroleUsed': 1, # Also fails 4.4.1.1
|
|
47
68
|
# Test imports https://www.nltaxonomie.nl/kvk/2024-03-31/kvk-annual-report-nlgaap-ext.xsd which is the draft taxonomy and not the final
|
|
48
69
|
'requiredEntryPointNotImported': 1,
|
|
70
|
+
'UsableConceptsNotAppliedByTaggedFacts': 1, # Also fails 4.4.6.1
|
|
71
|
+
'extensionTaxonomyLineItemNotLinkedToAnyHypercube': 10,
|
|
72
|
+
},
|
|
73
|
+
'G4-2-3_1/index.xml:TC2_invalid': {
|
|
74
|
+
'extensionTaxonomyLineItemNotLinkedToAnyHypercube': 1,
|
|
49
75
|
},
|
|
50
76
|
'G4-4-2_1/index.xml:TC2_invalid': {
|
|
51
77
|
'closedNegativeHypercubeInDefinitionLinkbase': 1, # Also fails 4.4.2.3
|
|
52
78
|
},
|
|
79
|
+
'G4-4-2_4/index.xml:TC2_invalid': {
|
|
80
|
+
'usableConceptsNotIncludedInDefinitionLink': 1,
|
|
81
|
+
},
|
|
53
82
|
'RTS_Annex_II_Par_1_RTS_Annex_IV_par_7/index.xml:TC2_valid': {
|
|
54
83
|
'undefinedLanguageForTextFact': 1,
|
|
55
84
|
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
|
|
@@ -69,34 +98,40 @@ config = ConformanceSuiteConfig(
|
|
|
69
98
|
'undefinedLanguageForTextFact': 1,
|
|
70
99
|
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
|
|
71
100
|
},
|
|
101
|
+
'RTS_Annex_IV_Par_6/index.xml:TC3_invalid': {
|
|
102
|
+
'extensionTaxonomyWrongFilesStructure': 1,
|
|
103
|
+
},
|
|
104
|
+
'RTS_Annex_IV_Par_6/index.xml:TC4_invalid': {
|
|
105
|
+
'undefinedLanguageForTextFact': 1,
|
|
106
|
+
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
|
|
107
|
+
'extensionTaxonomyWrongFilesStructure': 1,
|
|
108
|
+
},
|
|
109
|
+
'RTS_Art_6_a/index.xml:TC2_invalid': {
|
|
110
|
+
'UsableConceptsNotAppliedByTaggedFacts': 1,
|
|
111
|
+
'incorrectKvkTaxonomyVersionUsed': 1,
|
|
112
|
+
'message:existsAtLeastOnce_ChamberOfCommerceRegistrationNumber': 1,
|
|
113
|
+
'message:existsAtLeastOnce_FinancialReportingPeriod': 1,
|
|
114
|
+
'message:existsAtLeastOnce_FinancialReportingPeriodEndDate': 1,
|
|
115
|
+
'message:existsAtLeastOnce_LegalEntityLegalForm': 1,
|
|
116
|
+
'message:existsAtLeastOnce_LegalEntityName': 1,
|
|
117
|
+
'message:existsAtLeastOnce_LegalEntityRegisteredOffice': 1,
|
|
118
|
+
'message:existsOnlyOnce_AuditorsReportFinancialStatementsPresent': 1,
|
|
119
|
+
'message:existsOnlyOnce_DocumentAdoptionStatus': 1,
|
|
120
|
+
'message:existsOnlyOnce_FinancialStatementsConsolidated': 1,
|
|
121
|
+
},
|
|
72
122
|
}.items()},
|
|
73
123
|
expected_failure_ids=frozenset([
|
|
74
124
|
# Conformance Suite Errors
|
|
75
125
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-3-1_2/index.xml:TC3_invalid', # Expects an error code with a preceding double quote. G3-3-1_3 expects the same code without the typo.
|
|
76
126
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-1_1/index.xml:TC2_invalid', # Produces: [err:XPTY0004] Variable set Het entity identifier scheme dat bij dit feit hoort MOET het standaard KVK identifier scheme zijn
|
|
77
127
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-1_2/index.xml:TC2_invalid', # Expects fractionElementUsed”. Note the double quote at the end.
|
|
78
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-
|
|
128
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-6-2_1/index.xml:TC2_invalid', # Expects inlineXbrlDocumentSetContainsExternalReferences. Note incorrect "Set".
|
|
79
129
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-2-0_2/index.xml:TC2_invalid', # Expects fractionElementUsed”. Note the double quote at the end.
|
|
80
130
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-1_1/index.xml:TC2_invalid', # Expects IncorrectSummationItemArcroleUsed. Note the capital first character.
|
|
81
131
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_2_G3-1-1_1/index.xml:TC2_invalid', # Expects NonIdenticalIdentifier instead of nonIdenticalIdentifier (note the cap N)
|
|
82
132
|
|
|
83
133
|
|
|
84
134
|
# Not Implemented
|
|
85
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_1/index.xml:TC3_invalid',
|
|
86
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_1/index.xml:TC4_invalid',
|
|
87
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_2/index.xml:TC2_invalid',
|
|
88
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_3/index.xml:TC2_invalid',
|
|
89
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_4/index.xml:TC2_invalid',
|
|
90
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_5/index.xml:TC2_invalid',
|
|
91
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_5/index.xml:TC3_invalid',
|
|
92
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-6-2_1/index.xml:TC2_invalid',
|
|
93
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-3-1_1/index.xml:TC2_invalid',
|
|
94
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-3-1_1/index.xml:TC3_invalid',
|
|
95
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-3-1_1/index.xml:TC4_invalid',
|
|
96
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-3-2_1/index.xml:TC2_invalid',
|
|
97
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-2_4/index.xml:TC2_invalid',
|
|
98
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-5_2/index.xml:TC2_invalid',
|
|
99
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-5_2/index.xml:TC3_invalid',
|
|
100
135
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G5-1-3_1/index.xml:TC1_valid', # Must be run with different disclosure system for GAAP Other
|
|
101
136
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G5-1-3_1/index.xml:TC2_invalid', # Must be run with different disclosure system for GAAP Other
|
|
102
137
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G5-1-3_2/index.xml:TC1_valid', # Must be run with different disclosure system for GAAP Other
|
|
@@ -105,23 +140,12 @@ config = ConformanceSuiteConfig(
|
|
|
105
140
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_II_Par_1_RTS_Annex_IV_par_7/index.xml:TC4_invalid',
|
|
106
141
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_III_Par_1/index.xml:TC2_invalid',
|
|
107
142
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_III_Par_1/index.xml:TC3_invalid',
|
|
108
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_11_G4-2-2_1/index.xml:TC2_invalid',
|
|
109
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_11_G4-2-2_1/index.xml:TC3_invalid',
|
|
110
143
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_12_G3-2-4_1/index.xml:TC4_invalid',
|
|
111
144
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_14_G3-5-1_1/index.xml:TC2_invalid',
|
|
112
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_1/index.xml:TC2_invalid',
|
|
113
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_2/index.xml:TC2_invalid',
|
|
114
145
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC3_invalid',
|
|
115
146
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC4_invalid',
|
|
116
147
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC5_invalid',
|
|
117
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_5/index.xml:TC2_invalid',
|
|
118
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_5/index.xml:TC3_invalid',
|
|
119
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_6/index.xml:TC4_invalid',
|
|
120
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_8_G4-4-5/index.xml:TC2_invalid',
|
|
121
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_8_G4-4-5/index.xml:TC3_invalid',
|
|
122
148
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_9_Par_10/index.xml:TC3_invalid',
|
|
123
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Art_3/index.xml:TC4_invalid',
|
|
124
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Art_6_a/index.xml:TC2_invalid',
|
|
125
149
|
]),
|
|
126
150
|
info_url='https://www.sbr-nl.nl/sbr-domeinen/handelsregister/uitbreiding-elektronische-deponering-handelsregister',
|
|
127
151
|
name=PurePath(__file__).stem,
|