arelle-release 2.37.21__py3-none-any.whl → 2.37.23__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/ValidateDuplicateFacts.py +13 -7
  3. arelle/XbrlConst.py +3 -0
  4. arelle/_version.py +2 -2
  5. arelle/api/Session.py +88 -58
  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/DisclosureSystems.py +14 -0
  10. arelle/plugin/validate/NL/PluginValidationDataExtension.py +167 -3
  11. arelle/plugin/validate/NL/ValidationPluginExtension.py +10 -1
  12. arelle/plugin/validate/NL/resources/config.xml +12 -1
  13. arelle/plugin/validate/NL/rules/fr_kvk.py +1 -1
  14. arelle/plugin/validate/NL/rules/nl_kvk.py +680 -155
  15. arelle/utils/validate/DetectScriptsInXhtml.py +1 -4
  16. arelle/utils/validate/ESEFImage.py +274 -0
  17. {arelle_release-2.37.21.dist-info → arelle_release-2.37.23.dist-info}/METADATA +1 -1
  18. {arelle_release-2.37.21.dist-info → arelle_release-2.37.23.dist-info}/RECORD +27 -26
  19. tests/integration_tests/validation/conformance_suite_configs.py +2 -0
  20. tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py +30 -43
  21. tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024_gaap_other.py +244 -0
  22. tests/integration_tests/validation/discover_tests.py +2 -2
  23. tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py +10 -2
  24. arelle/plugin/validate/ESEF/ESEF_Current/Image.py +0 -213
  25. {arelle_release-2.37.21.dist-info → arelle_release-2.37.23.dist-info}/WHEEL +0 -0
  26. {arelle_release-2.37.21.dist-info → arelle_release-2.37.23.dist-info}/entry_points.txt +0 -0
  27. {arelle_release-2.37.21.dist-info → arelle_release-2.37.23.dist-info}/licenses/LICENSE.md +0 -0
  28. {arelle_release-2.37.21.dist-info → arelle_release-2.37.23.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.21
3
+ Version: 2.37.23
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
@@ -66,7 +66,7 @@ arelle/UiUtil.py,sha256=3G0xPclZI8xW_XQDbiFrmylB7Nd5muqi5n2x2oMkMZU,34218
66
66
  arelle/Updater.py,sha256=ho8Z_9GOL39H1jHL3Gaw5uc6av7J8ZBB6dR_X-nF_e0,7124
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=7Pk386ZP5-zeQspyajgl-y34hq9LxpaYHTKrHq5Km-8,56958
117
+ arelle/XbrlConst.py,sha256=qkujDn50-bDz_z6Uj-z53pFMQimdsiBCMARyY2NiB44,57164
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,9 +123,9 @@ 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=7J7GR3gzAoXDRoz2kLGCfdxRcD180tJLB4oVmPwBN4k,515
126
+ arelle/_version.py,sha256=m8X4i_J2wh9B847cmv_5hSkps2GlxoxEqwoZitrqqxk,515
127
127
  arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
128
- arelle/api/Session.py,sha256=DE45eTuhPkIPsLj0IFqDc9gMq2XoUf-aMBgW19MeGbE,6523
128
+ arelle/api/Session.py,sha256=5KPjCIPiNuanKrz1MdFdKIx8Bg40Pk9sf2cL9OU4x-E,7770
129
129
  arelle/archive/CustomLogger.py,sha256=v_JXOCQLDZcfaFWzxC9FRcEf9tQi4rCI4Sx7jCuAVQI,1231
130
130
  arelle/archive/LoadEFMvalidate.py,sha256=HR1ZJmOvWGUlWEsWd0tGCa2TTtZSNzeL6tgN1TFfrl0,986
131
131
  arelle/archive/LoadSavePreLbCsv.py,sha256=mekr1R6OE5d3xdUCZIVfSeolyet0HO8R6wsHnW4eyaA,767
@@ -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,26 +401,25 @@ 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
409
408
  arelle/plugin/validate/FERC/__init__.py,sha256=V4fXcFKBsjFFPs9_1NhvDjWpEQCoQM0tRQMS0I1Ua7U,11462
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
- arelle/plugin/validate/NL/DisclosureSystems.py,sha256=kTjpxkgwn58wHCbaLRBInirOy-2cpK9MLWEFJ_193y4,180
411
+ arelle/plugin/validate/NL/DisclosureSystems.py,sha256=urRmYJ8RnGPlTgSVKW7zGN4_4CtL3OVKlcI3LwTpBz4,561
413
412
  arelle/plugin/validate/NL/LinkbaseType.py,sha256=csXEqLaU43tN58RUG3oeD3nUYcdHl1OWSKaxpOhbTXk,2515
414
- arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=bvyz-GKCaHs-Y0ifIxIh5FqN73Eqd3OPW4O8HWtup5E,24065
415
- arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=0Ze1RFTlnHeAeDnMG-dAVT7WKrgNQ2iflMm87ZnVwLQ,15601
413
+ arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=trpeAekXGWourOMI-tFfzQIFJjTRrdIjNGKpxRKWCjs,32840
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=i_ns2wHmQYjhkRItevRR8tzfkl31ASfbWlc5t6pDB-w,1117
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=0jiagDyV1x7Qh6evVLz9eeJLbyAD9ZUI9Wk_yX0mVNU,50380
422
+ arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=xT3Hc-s3089HSkZC7_VpX-eGDU4vDNgdOXUXy-WSIA8,76762
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.21.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
745
+ arelle_release-2.37.23.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
@@ -771,9 +771,9 @@ tests/integration_tests/ui_tests/resources/workiva.zip,sha256=QtZzi1VcKkHhVa8J-I
771
771
  tests/integration_tests/validation/README.md,sha256=O6WYcMEk0x7ee7A9JnESHb6-UYceg_vrL4BhDIEDMI0,3008
772
772
  tests/integration_tests/validation/assets.py,sha256=Ag9qPYrodcC-Ly6aygqapV0vG2Cbn_Tigg4v4F9xX4U,8295
773
773
  tests/integration_tests/validation/conformance_suite_config.py,sha256=LgPO_8H_esM9kQS2o4jKd8CTNi0hiHugZ1hZn7whshI,10383
774
- tests/integration_tests/validation/conformance_suite_configs.py,sha256=IbrL-45QTsUSI5Usz-STqtRZsz8pLu83KXqx4aDL-1w,7327
774
+ tests/integration_tests/validation/conformance_suite_configs.py,sha256=vdKMEKQ0bgh1fhajS4B8Fgu59pgDWbJZ7fuaVfnbsLs,7500
775
775
  tests/integration_tests/validation/conftest.py,sha256=rVfmNX9y0JZ1VfoEepeYyIz-ZxzEZ1IJlmbcQSuxgUo,816
776
- tests/integration_tests/validation/discover_tests.py,sha256=EJ0AlxWqzFBTDfncE2dv-GsBNmO8lynNOJAn0uFgXgo,4649
776
+ tests/integration_tests/validation/discover_tests.py,sha256=dSzciVoGJNjw1NkPnAylncDy4_T-dBoZKR5YCmaZTgA,4653
777
777
  tests/integration_tests/validation/download_assets.py,sha256=muHklbrvYEbxqqAM8mU-8FpeemP0BLTWxD11xTYiCMc,7850
778
778
  tests/integration_tests/validation/run_conformance_suites.py,sha256=yBnPdtIiNKibjsrJxrvVA7NyAEWcoDg-sSjp1nFGQ2g,8496
779
779
  tests/integration_tests/validation/test_conformance_suites.py,sha256=VdwY0QtV6g00M9bv1XNs4qBTwxPxCh5-z4XoDdEhgeM,711
@@ -797,7 +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=K24GT014o_d3-cvuAkkkzGeo_JDxBh_pWuyYWXo9xLI,10470
800
+ tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py,sha256=cv_SuMgcc_bMDW5adagOKPChkhSp4x1rJWbV_CyV_pM,8884
801
+ tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024_gaap_other.py,sha256=i-W3lMMI37i4RTQyo717khlnqL4Bc7EkDtbhCtqTu3U,31366
801
802
  tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py,sha256=O_LFVBZPkjxmbrU7_C7VTLtrdoCUx2bYXOXw6_MlRtQ,846
802
803
  tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py,sha256=aTN3Ez6lPsZsuypHZP84DneOtYxUZSjUiGypHy6ofHQ,846
803
804
  tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py,sha256=sqHLjrHc95dTu0guTgKkphaKM1zNfKGnN4GKkZDLzeU,845
@@ -1593,10 +1594,10 @@ tests/unit_tests/arelle/conformance/test_csv_testcase_loader.py,sha256=u8AvJ-wUI
1593
1594
  tests/unit_tests/arelle/formula/test_fact_aspects_cache.py,sha256=4qtYSqSHYprihquj9orxcjHHaTE2jKDPQvm4QUhtUWk,6076
1594
1595
  tests/unit_tests/arelle/oim/test_load.py,sha256=NxiUauQwJVfWAHbbpsMHGSU2d3Br8Pki47JOxKmG83M,1216
1595
1596
  tests/unit_tests/arelle/plugin/test_plugin_imports.py,sha256=bdhIs9frAnFsdGU113yBk09_jis-z43dwUItMFYuSYM,1064
1596
- 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
1597
1598
  tests/unit_tests/arelle/utils/validate/test_decorator.py,sha256=ZS8FqIY1g-2FCbjF4UYm609dwViax6qBMRJSi0vfuhY,2482
1598
- arelle_release-2.37.21.dist-info/METADATA,sha256=XKmpRZx95BpPCfr3HGOZd2y9DH8Rypx2up7QJSp_bgY,9134
1599
- arelle_release-2.37.21.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1600
- arelle_release-2.37.21.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
1601
- arelle_release-2.37.21.dist-info/top_level.txt,sha256=ZYmYGmhW5Jvo3vJ4iXBZPUI29LvYhntom04w90esJvU,13
1602
- arelle_release-2.37.21.dist-info/RECORD,,
1599
+ arelle_release-2.37.23.dist-info/METADATA,sha256=xL-89sGS9HVrVvGtcDhtbYumAyJQIGQBoC7t3sNt9JI,9134
1600
+ arelle_release-2.37.23.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
1601
+ arelle_release-2.37.23.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
1602
+ arelle_release-2.37.23.dist-info/top_level.txt,sha256=ZYmYGmhW5Jvo3vJ4iXBZPUI29LvYhntom04w90esJvU,13
1603
+ arelle_release-2.37.23.dist-info/RECORD,,
@@ -25,6 +25,7 @@ from tests.integration_tests.validation.conformance_suite_configurations.nl_nt17
25
25
  from tests.integration_tests.validation.conformance_suite_configurations.nl_nt18 import config as nl_nt18
26
26
  from tests.integration_tests.validation.conformance_suite_configurations.nl_nt19 import config as nl_nt19
27
27
  from tests.integration_tests.validation.conformance_suite_configurations.nl_inline_2024 import config as nl_inline_2024
28
+ from tests.integration_tests.validation.conformance_suite_configurations.nl_inline_2024_gaap_other import config as nl_inline_2024_gaap_other
28
29
  from tests.integration_tests.validation.conformance_suite_configurations.ros_current import config as ros_current
29
30
  from tests.integration_tests.validation.conformance_suite_configurations.xbrl_2_1 import config as xbrl_2_1
30
31
  from tests.integration_tests.validation.conformance_suite_configurations.xbrl_calculations_1_1 import config as xbrl_calculations_1_1
@@ -74,6 +75,7 @@ ALL_CONFORMANCE_SUITE_CONFIGS: tuple[ConformanceSuiteConfig, ...] = (
74
75
  nl_nt18,
75
76
  nl_nt19,
76
77
  nl_inline_2024,
78
+ nl_inline_2024_gaap_other,
77
79
  ros_current,
78
80
  xbrl_2_1,
79
81
  xbrl_calculations_1_1,
@@ -22,9 +22,16 @@ 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
+ },
28
+ 'G3-5-1_5/index.xml:TC2_invalid': {
29
+ # This is the expected error, but we return two of them, slightly different.
30
+ 'imageFormatNotSupported': 1,
31
+ },
25
32
  'G3-5-3_1/index.xml:TC2_invalid': {
26
33
  'arelle:ixdsTargetNotDefined': 1,
27
- 'extensionTaxonomyWrongFilesStructure': 1,
34
+ 'extensionTaxonomyWrongFilesStructure': 2,
28
35
  # This test is looking at the usage of the target attribute and does not import the correct taxonomy urls
29
36
  'requiredEntryPointNotImported': 1,
30
37
  'incorrectKvkTaxonomyVersionUsed': 1,
@@ -38,32 +45,27 @@ config = ConformanceSuiteConfig(
38
45
  'message:valueKvKIdentifier': 13,
39
46
  'nonIdenticalIdentifier': 1,
40
47
  },
48
+ 'G4-1-1_1/index.xml:TC4_invalid': {
49
+ 'extensionTaxonomyWrongFilesStructure': 1,
50
+ },
41
51
  'G4-1-2_1/index.xml:TC2_valid': {
42
52
  'undefinedLanguageForTextFact': 1,
43
53
  'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
44
54
  },
55
+ 'G4-1-2_1/index.xml:TC3_invalid': {
56
+ 'extensionTaxonomyLineItemNotLinkedToAnyHypercube': 11,
57
+ },
45
58
  'G4-1-2_2/index.xml:TC2_invalid': {
59
+ 'anchoringRelationshipsForConceptsDefinedInElrContainingDimensionalRelationships': 1, # Also fails 4.3.2.1
46
60
  'incorrectSummationItemArcroleUsed': 1, # Also fails 4.4.1.1
47
61
  # 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
62
  'requiredEntryPointNotImported': 1,
63
+ 'UsableConceptsNotAppliedByTaggedFacts': 1, # Also fails 4.4.6.1
64
+ 'extensionTaxonomyLineItemNotLinkedToAnyHypercube': 10,
49
65
  },
50
66
  'G4-4-2_1/index.xml:TC2_invalid': {
51
67
  'closedNegativeHypercubeInDefinitionLinkbase': 1, # Also fails 4.4.2.3
52
68
  },
53
- 'G5-1-3_1/index.xml:TC1_valid': {
54
- 'extensionTaxonomyWrongFilesStructure': 1,
55
- # This test is looking at the import of the Other GAAP entry point and thus does not import
56
- # the standard GAAP or IFRS
57
- 'requiredEntryPointNotImported': 1,
58
- 'incorrectKvkTaxonomyVersionUsed': 1,
59
- },
60
- 'G5-1-3_2/index.xml:TC1_valid': {
61
- 'extensionTaxonomyWrongFilesStructure': 1,
62
- # This test is looking at the import of the Other GAAP entry point and thus does not import
63
- # the standard GAAP or IFRS
64
- 'requiredEntryPointNotImported': 1,
65
- 'incorrectKvkTaxonomyVersionUsed': 1,
66
- },
67
69
  'RTS_Annex_II_Par_1_RTS_Annex_IV_par_7/index.xml:TC2_valid': {
68
70
  'undefinedLanguageForTextFact': 1,
69
71
  'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
@@ -83,58 +85,43 @@ config = ConformanceSuiteConfig(
83
85
  'undefinedLanguageForTextFact': 1,
84
86
  'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
85
87
  },
88
+ 'RTS_Annex_IV_Par_6/index.xml:TC3_invalid': {
89
+ 'extensionTaxonomyWrongFilesStructure': 1,
90
+ },
91
+ 'RTS_Annex_IV_Par_6/index.xml:TC4_invalid': {
92
+ 'undefinedLanguageForTextFact': 1,
93
+ 'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
94
+ 'extensionTaxonomyWrongFilesStructure': 1,
95
+ }
86
96
  }.items()},
87
97
  expected_failure_ids=frozenset([
88
98
  # Conformance Suite Errors
89
99
  '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.
90
100
  '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
91
101
  'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-1_2/index.xml:TC2_invalid', # Expects fractionElementUsed”. Note the double quote at the end.
92
- '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'
102
+ 'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-6-2_1/index.xml:TC2_invalid', # Expects inlineXbrlDocumentSetContainsExternalReferences. Note incorrect "Set".
93
103
  'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-2-0_2/index.xml:TC2_invalid', # Expects fractionElementUsed”. Note the double quote at the end.
94
104
  'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-1_1/index.xml:TC2_invalid', # Expects IncorrectSummationItemArcroleUsed. Note the capital first character.
95
105
  '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)
96
106
 
97
107
 
98
108
  # Not Implemented
99
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_1/index.xml:TC3_invalid',
100
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_1/index.xml:TC4_invalid',
101
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_2/index.xml:TC2_invalid',
102
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_3/index.xml:TC2_invalid',
103
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_4/index.xml:TC2_invalid',
104
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_5/index.xml:TC2_invalid',
105
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_5/index.xml:TC3_invalid',
106
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-6-2_1/index.xml:TC2_invalid',
107
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-2-2_2/index.xml:TC2_invalid',
108
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-2-3_1/index.xml:TC2_invalid',
109
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-3-1_1/index.xml:TC2_invalid',
110
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-3-1_1/index.xml:TC3_invalid',
111
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-3-1_1/index.xml:TC4_invalid',
112
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-3-2_1/index.xml:TC2_invalid',
113
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-2_4/index.xml:TC2_invalid',
114
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-3_1/index.xml:TC2_invalid',
115
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-3_1/index.xml:TC3_invalid',
116
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-3_2/index.xml:TC2_invalid',
117
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-3_2/index.xml:TC3_invalid',
118
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-5_2/index.xml:TC2_invalid',
119
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-5_2/index.xml:TC3_invalid',
120
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G5-1-3_1/index.xml:TC2_invalid',
121
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/G5-1-3_2/index.xml:TC2_invalid',
109
+ '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
110
+ '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
111
+ '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
112
+ 'conformance-suite-2024-sbr-domein-handelsregister/tests/G5-1-3_2/index.xml:TC2_invalid', # Must be run with different disclosure system for GAAP Other
122
113
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_II_Par_1/index.xml:TC3_invalid',
123
114
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_II_Par_1_RTS_Annex_IV_par_7/index.xml:TC4_invalid',
124
115
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_III_Par_1/index.xml:TC2_invalid',
125
116
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_III_Par_1/index.xml:TC3_invalid',
126
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_11_G4-2-2_1/index.xml:TC2_invalid',
127
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_11_G4-2-2_1/index.xml:TC3_invalid',
128
117
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_12_G3-2-4_1/index.xml:TC4_invalid',
129
118
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_14_G3-5-1_1/index.xml:TC2_invalid',
130
119
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_1/index.xml:TC2_invalid',
131
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_2/index.xml:TC2_invalid',
132
120
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC3_invalid',
133
121
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC4_invalid',
134
122
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC5_invalid',
135
123
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_5/index.xml:TC2_invalid',
136
124
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_5/index.xml:TC3_invalid',
137
- 'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_6/index.xml:TC4_invalid',
138
125
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_8_G4-4-5/index.xml:TC2_invalid',
139
126
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_8_G4-4-5/index.xml:TC3_invalid',
140
127
  'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_9_Par_10/index.xml:TC3_invalid',