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.

Files changed (28) hide show
  1. arelle/ModelRelationshipSet.py +3 -0
  2. arelle/Updater.py +7 -3
  3. arelle/ValidateDuplicateFacts.py +13 -7
  4. arelle/XbrlConst.py +22 -0
  5. arelle/_version.py +2 -2
  6. arelle/plugin/validate/DBA/rules/fr.py +10 -10
  7. arelle/plugin/validate/DBA/rules/th.py +1 -1
  8. arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +21 -20
  9. arelle/plugin/validate/NL/LinkbaseType.py +17 -0
  10. arelle/plugin/validate/NL/PluginValidationDataExtension.py +155 -4
  11. arelle/plugin/validate/NL/resources/config.xml +6 -0
  12. arelle/plugin/validate/NL/rules/fr_kvk.py +1 -1
  13. arelle/plugin/validate/NL/rules/nl_kvk.py +656 -22
  14. arelle/utils/validate/DetectScriptsInXhtml.py +1 -4
  15. arelle/utils/validate/ESEFImage.py +274 -0
  16. {arelle_release-2.37.22.dist-info → arelle_release-2.37.25.dist-info}/METADATA +1 -1
  17. {arelle_release-2.37.22.dist-info → arelle_release-2.37.25.dist-info}/RECORD +27 -27
  18. tests/integration_tests/validation/conformance_suite_configurations/efm_current.py +2 -2
  19. tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py +52 -28
  20. tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024_gaap_other.py +10 -0
  21. tests/resources/conformance_suites_timing/efm_current.json +8499 -8583
  22. tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py +10 -2
  23. tests/unit_tests/arelle/test_updater.py +43 -14
  24. arelle/plugin/validate/ESEF/ESEF_Current/Image.py +0 -213
  25. {arelle_release-2.37.22.dist-info → arelle_release-2.37.25.dist-info}/WHEEL +0 -0
  26. {arelle_release-2.37.22.dist-info → arelle_release-2.37.25.dist-info}/entry_points.txt +0 -0
  27. {arelle_release-2.37.22.dist-info → arelle_release-2.37.25.dist-info}/licenses/LICENSE.md +0 -0
  28. {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)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arelle-release
3
- Version: 2.37.22
3
+ Version: 2.37.25
4
4
  Summary: An open source XBRL platform.
5
5
  Author-email: "arelle.org" <support@arelle.org>
6
6
  License: Apache-2.0
@@ -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=_1T3NAS0IRgK8IWFe7nh-qxXZ7htA80i_dueyU8JYaU,24654
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=ho8Z_9GOL39H1jHL3Gaw5uc6av7J8ZBB6dR_X-nF_e0,7124
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=iF8BpBRBqPxlnXUa11cQJ3LEAstysl3r_J4280OQGJo,21705
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=OLJX1pc6ubTmNtKp9dW5fReetnka6X6JygWDN5HATPo,57086
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=EGVrj3aztU3PoL69Sq00GKr0PL8mTt6rFnPMOOY4jkA,515
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=ITYpWGiIJ9q0vIagoFfOa30vKDlcEbFUx-pVO2_Kkbw,71314
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=Azrlq572exd0WmX0XLOkr29mn9BsDtQDx0kkrFGt-2o,6226
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/Image.py,sha256=w36sCTy8QbsuKABjkK6PTWce2A4zFN_rMnEM2wi5WEc,11364
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=csXEqLaU43tN58RUG3oeD3nUYcdHl1OWSKaxpOhbTXk,2515
414
- arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=gGA2r9WdImWNwMZNKO8dvGSF3NtYLOhvNuyhzR3g9jY,26737
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=kKHZQxjl2MxKce93DXkHgd3uQhO6jHbVpUR-Jp_fXms,1397
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=-_BLeWGoZ_f56p5VO4X40S45Ny3Ej-WK6Srei1KVSxU,8170
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=BRu-h8CBkc1h59uO4aMoZlOMe6jhesvnbqBk2hlCeTY,58168
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=JOgsUP0_kvE6O3TuhzKxqKG1ZFP9LrUYZBgrar6JEm0,2178
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.22.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
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=LoAuqV3uMiQSfgQ34c_T70ph3YT7py5nu10podbIFRM,1322
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=Hqp_IntB1pz47dkcVaVjKpYtj22f3HLJSaxhyr4yLck,9626
801
- tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024_gaap_other.py,sha256=i-W3lMMI37i4RTQyo717khlnqL4Bc7EkDtbhCtqTu3U,31366
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=QyaFax_rnONGbGeGwCx-YUQifDp7Gws5csiDfjQuuFI,1105261
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=8DDHTpog8l9T8fHhHtrE9coPWTyFCgf-BCDm9nTtr6E,16163
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=XHABmejQt7RlZ0udh7v42f2Xb2STGk_fSaIaJ9i2xo0,878
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.22.dist-info/METADATA,sha256=RTAZoQZJzP3GXYEe6AmFVBSzpgLa833Xk8hY6qSVf2U,9134
1600
- arelle_release-2.37.22.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1601
- arelle_release-2.37.22.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
1602
- arelle_release-2.37.22.dist-info/top_level.txt,sha256=ZYmYGmhW5Jvo3vJ4iXBZPUI29LvYhntom04w90esJvU,13
1603
- arelle_release-2.37.22.dist-info/RECORD,,
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-73-250317.zip'
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='D6XVsgj8noOk9wzCTX91wqwQFq68d0bi',
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': 1,
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-4-2_1/index.xml:TC2_invalid', # Produces 'EFM.6.03.11' and 'NL.NL-KVK.3.4.2.1.htmlOrXmlBaseUsed'
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,