arelle-release 2.37.22__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.
- arelle/ModelRelationshipSet.py +3 -0
- arelle/ValidateDuplicateFacts.py +13 -7
- arelle/XbrlConst.py +1 -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/PluginValidationDataExtension.py +128 -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 +457 -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.23.dist-info}/METADATA +1 -1
- {arelle_release-2.37.22.dist-info → arelle_release-2.37.23.dist-info}/RECORD +21 -21
- tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py +26 -21
- tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py +10 -2
- arelle/plugin/validate/ESEF/ESEF_Current/Image.py +0 -213
- {arelle_release-2.37.22.dist-info → arelle_release-2.37.23.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.22.dist-info → arelle_release-2.37.23.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.22.dist-info → arelle_release-2.37.23.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.22.dist-info → arelle_release-2.37.23.dist-info}/top_level.txt +0 -0
|
@@ -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
|
|
@@ -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=
|
|
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=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,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=m8X4i_J2wh9B847cmv_5hSkps2GlxoxEqwoZitrqqxk,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
|
|
@@ -411,16 +410,16 @@ arelle/plugin/validate/FERC/config.xml,sha256=bn9b8eCqJA1J62rYq1Nz85wJrMGAahVmmn
|
|
|
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
412
|
arelle/plugin/validate/NL/LinkbaseType.py,sha256=csXEqLaU43tN58RUG3oeD3nUYcdHl1OWSKaxpOhbTXk,2515
|
|
414
|
-
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=
|
|
413
|
+
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=trpeAekXGWourOMI-tFfzQIFJjTRrdIjNGKpxRKWCjs,32840
|
|
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=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=
|
|
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.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
|
|
@@ -797,7 +797,7 @@ 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=
|
|
800
|
+
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py,sha256=cv_SuMgcc_bMDW5adagOKPChkhSp4x1rJWbV_CyV_pM,8884
|
|
801
801
|
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024_gaap_other.py,sha256=i-W3lMMI37i4RTQyo717khlnqL4Bc7EkDtbhCtqTu3U,31366
|
|
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
|
|
@@ -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.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,,
|
|
@@ -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':
|
|
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,14 +45,23 @@ 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
|
|
@@ -69,34 +85,27 @@ config = ConformanceSuiteConfig(
|
|
|
69
85
|
'undefinedLanguageForTextFact': 1,
|
|
70
86
|
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
|
|
71
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
|
+
}
|
|
72
96
|
}.items()},
|
|
73
97
|
expected_failure_ids=frozenset([
|
|
74
98
|
# Conformance Suite Errors
|
|
75
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.
|
|
76
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
|
|
77
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.
|
|
78
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-
|
|
102
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-6-2_1/index.xml:TC2_invalid', # Expects inlineXbrlDocumentSetContainsExternalReferences. Note incorrect "Set".
|
|
79
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.
|
|
80
104
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-1_1/index.xml:TC2_invalid', # Expects IncorrectSummationItemArcroleUsed. Note the capital first character.
|
|
81
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)
|
|
82
106
|
|
|
83
107
|
|
|
84
108
|
# 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
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
|
|
101
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
|
|
102
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
|
|
@@ -105,18 +114,14 @@ config = ConformanceSuiteConfig(
|
|
|
105
114
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_II_Par_1_RTS_Annex_IV_par_7/index.xml:TC4_invalid',
|
|
106
115
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_III_Par_1/index.xml:TC2_invalid',
|
|
107
116
|
'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
117
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_12_G3-2-4_1/index.xml:TC4_invalid',
|
|
111
118
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_14_G3-5-1_1/index.xml:TC2_invalid',
|
|
112
119
|
'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
120
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC3_invalid',
|
|
115
121
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC4_invalid',
|
|
116
122
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC5_invalid',
|
|
117
123
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_5/index.xml:TC2_invalid',
|
|
118
124
|
'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
125
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_8_G4-4-5/index.xml:TC2_invalid',
|
|
121
126
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_8_G4-4-5/index.xml:TC3_invalid',
|
|
122
127
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_9_Par_10/index.xml:TC3_invalid',
|
|
@@ -9,11 +9,19 @@ class TestValidateCssUrl(TestCase):
|
|
|
9
9
|
validateCssUrl(
|
|
10
10
|
'* { background: url("http://example.com") }',
|
|
11
11
|
MagicMock(), modelXbrl, MagicMock(), MagicMock(), MagicMock())
|
|
12
|
-
|
|
12
|
+
expected = dict(
|
|
13
|
+
level='ERROR',
|
|
14
|
+
codes=('ESEF.3.5.1.inlineXbrlDocumentContainsExternalReferences', 'NL.NL-KVK.3.6.2.1.inlineXbrlDocumentContainsExternalReferences'),
|
|
15
|
+
)
|
|
16
|
+
self.assertLessEqual(expected.items(), modelXbrl.log.call_args.kwargs.items())
|
|
13
17
|
|
|
14
18
|
def test_url_token(self) -> None:
|
|
15
19
|
modelXbrl = MagicMock()
|
|
16
20
|
validateCssUrl(
|
|
17
21
|
'* { background: url(http://example.com) }',
|
|
18
22
|
MagicMock(), modelXbrl, MagicMock(), MagicMock(), MagicMock())
|
|
19
|
-
|
|
23
|
+
expected = dict(
|
|
24
|
+
level='ERROR',
|
|
25
|
+
codes=('ESEF.3.5.1.inlineXbrlDocumentContainsExternalReferences', 'NL.NL-KVK.3.6.2.1.inlineXbrlDocumentContainsExternalReferences'),
|
|
26
|
+
)
|
|
27
|
+
self.assertLessEqual(expected.items(), modelXbrl.log.call_args.kwargs.items())
|