arelle-release 2.37.10__py3-none-any.whl → 2.37.11__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/CntlrWinMain.py +33 -27
- arelle/_version.py +2 -2
- arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +3 -1
- arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +2 -1
- arelle/plugin/validate/ESEF/Util.py +1 -11
- arelle/plugin/validate/NL/PluginValidationDataExtension.py +32 -0
- arelle/plugin/validate/NL/rules/nl_kvk.py +58 -0
- arelle/utils/validate/ValidationUtil.py +23 -0
- {arelle_release-2.37.10.dist-info → arelle_release-2.37.11.dist-info}/METADATA +1 -1
- {arelle_release-2.37.10.dist-info → arelle_release-2.37.11.dist-info}/RECORD +15 -14
- {arelle_release-2.37.10.dist-info → arelle_release-2.37.11.dist-info}/WHEEL +1 -1
- tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py +20 -6
- {arelle_release-2.37.10.dist-info → arelle_release-2.37.11.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.10.dist-info → arelle_release-2.37.11.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.10.dist-info → arelle_release-2.37.11.dist-info}/top_level.txt +0 -0
arelle/CntlrWinMain.py
CHANGED
|
@@ -467,6 +467,8 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
467
467
|
if not self.modelManager.disclosureSystem.select(self.config.setdefault("disclosureSystem", None)):
|
|
468
468
|
self.validateDisclosureSystem.set(False)
|
|
469
469
|
self.modelManager.validateDisclosureSystem = False
|
|
470
|
+
self.config["validateDisclosureSystem"] = False
|
|
471
|
+
self.config["disclosureSystem"] = None
|
|
470
472
|
|
|
471
473
|
# load argv overrides for modelManager options
|
|
472
474
|
lastArg = None
|
|
@@ -1111,36 +1113,40 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
1111
1113
|
self.fileOpenFile(fileHistory[0])
|
|
1112
1114
|
|
|
1113
1115
|
def validate(self):
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1116
|
+
if not self.modelManager.loadedModelXbrls:
|
|
1117
|
+
tkinter.messagebox.showwarning(
|
|
1118
|
+
_("arelle - Warning"),
|
|
1119
|
+
_("No XBRL loaded to validate"),
|
|
1120
|
+
parent=self.parent,
|
|
1121
|
+
)
|
|
1122
|
+
return
|
|
1123
|
+
if self.modelManager.validateDisclosureSystem and not self.modelManager.disclosureSystem.selection:
|
|
1124
|
+
tkinter.messagebox.showwarning(
|
|
1125
|
+
_("arelle - Warning"),
|
|
1126
|
+
_("Validation - disclosure system checks requested but no disclosure system is selected, please select one by validation - select disclosure system."),
|
|
1127
|
+
parent=self.parent,
|
|
1128
|
+
)
|
|
1129
|
+
return
|
|
1130
|
+
threading.Thread(target=self.backgroundValidate, daemon=True).start()
|
|
1126
1131
|
|
|
1127
1132
|
def backgroundValidate(self):
|
|
1128
1133
|
from arelle import Validate
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1134
|
+
for loadedModelXbrl in self.modelManager.loadedModelXbrls:
|
|
1135
|
+
if loadedModelXbrl.modelDocument:
|
|
1136
|
+
startedAt = time.time()
|
|
1137
|
+
if loadedModelXbrl.modelDocument.type in ModelDocument.Type.TESTCASETYPES:
|
|
1138
|
+
for pluginXbrlMethod in pluginClassMethods("Testcases.Start"):
|
|
1139
|
+
pluginXbrlMethod(self, None, loadedModelXbrl)
|
|
1140
|
+
for modelXbrl in [loadedModelXbrl] + getattr(loadedModelXbrl, "supplementalModelXbrls", []):
|
|
1141
|
+
priorOutputInstance = modelXbrl.formulaOutputInstance
|
|
1142
|
+
modelXbrl.formulaOutputInstance = None # prevent closing on background thread by validateFormula
|
|
1143
|
+
try:
|
|
1144
|
+
Validate.validate(modelXbrl)
|
|
1145
|
+
except Exception as err:
|
|
1146
|
+
self.addToLog(_("[exception] Validation exception: {0} at {1}").format(err, traceback.format_tb(sys.exc_info()[2])))
|
|
1147
|
+
self.addToLog(format_string(self.modelManager.locale, _("validated in %.2f secs: %s"), (time.time() - startedAt, modelXbrl.displayUri)))
|
|
1148
|
+
if not modelXbrl.isClosed and (priorOutputInstance or modelXbrl.formulaOutputInstance):
|
|
1149
|
+
self.uiThreadQueue.put((self.showFormulaOutputInstance, [priorOutputInstance, modelXbrl.formulaOutputInstance]))
|
|
1144
1150
|
|
|
1145
1151
|
self.uiThreadQueue.put((self.logSelect, []))
|
|
1146
1152
|
|
arelle/_version.py
CHANGED
|
@@ -22,6 +22,7 @@ from arelle.ModelInstanceObject import ModelInlineFootnote
|
|
|
22
22
|
from arelle.ModelObject import ModelObject
|
|
23
23
|
from arelle.ModelRelationshipSet import ModelRelationshipSet
|
|
24
24
|
from arelle.ModelValue import QName, qname
|
|
25
|
+
from arelle.utils.validate.ValidationUtil import etreeIterWithDepth
|
|
25
26
|
from arelle.PythonUtil import isLegacyAbs, strTruncate
|
|
26
27
|
from arelle.utils.validate.DetectScriptsInXhtml import containsScriptMarkers
|
|
27
28
|
from arelle.UrlUtil import decodeBase64DataImage, isHttpUrl, scheme
|
|
@@ -61,7 +62,8 @@ from ..Const import (
|
|
|
61
62
|
untransformableTypes,
|
|
62
63
|
)
|
|
63
64
|
from ..Dimensions import checkFilingDimensions
|
|
64
|
-
from ..Util import
|
|
65
|
+
from ..Util import isExtension
|
|
66
|
+
|
|
65
67
|
|
|
66
68
|
_: TypeGetText # Handle gettext
|
|
67
69
|
|
|
@@ -26,6 +26,7 @@ from arelle.ModelValue import QName
|
|
|
26
26
|
from arelle.ModelValue import qname
|
|
27
27
|
from arelle.ModelXbrl import ModelXbrl
|
|
28
28
|
|
|
29
|
+
from arelle.utils.validate.ValidationUtil import etreeIterWithDepth
|
|
29
30
|
from arelle.PythonUtil import isLegacyAbs, normalizeSpace
|
|
30
31
|
from arelle.PythonUtil import strTruncate
|
|
31
32
|
from arelle.utils.validate.DetectScriptsInXhtml import containsScriptMarkers
|
|
@@ -66,7 +67,7 @@ from ..Const import (
|
|
|
66
67
|
untransformableTypes,
|
|
67
68
|
)
|
|
68
69
|
from ..Dimensions import checkFilingDimensions
|
|
69
|
-
from ..Util import checkForMultiLangDuplicates,
|
|
70
|
+
from ..Util import checkForMultiLangDuplicates, getEsefNotesStatementConcepts, isExtension, getDisclosureSystemYear
|
|
70
71
|
|
|
71
72
|
_: TypeGetText # Handle gettext
|
|
72
73
|
|
|
@@ -6,7 +6,7 @@ from __future__ import annotations
|
|
|
6
6
|
import json
|
|
7
7
|
import os
|
|
8
8
|
from collections import defaultdict
|
|
9
|
-
from collections.abc import Collection
|
|
9
|
+
from collections.abc import Collection
|
|
10
10
|
from typing import Any, Union, cast
|
|
11
11
|
import regex as re
|
|
12
12
|
|
|
@@ -177,13 +177,3 @@ def _hasEventAttributes(elt: Any, attributes: Collection[str]) -> bool:
|
|
|
177
177
|
if isinstance(elt, _Element):
|
|
178
178
|
return any(a in attributes for a in elt.keys())
|
|
179
179
|
return False
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
def etreeIterWithDepth(
|
|
183
|
-
node: ModelObject | _Element,
|
|
184
|
-
depth: int = 0,
|
|
185
|
-
) -> Generator[tuple[ModelObject | _Element, int], None, None]:
|
|
186
|
-
yield node, depth
|
|
187
|
-
for child in node.iterchildren():
|
|
188
|
-
for n_d in etreeIterWithDepth(child, depth + 1):
|
|
189
|
-
yield n_d
|
|
@@ -14,9 +14,12 @@ from arelle.FunctionIxt import ixtNamespaces
|
|
|
14
14
|
from arelle.ModelInstanceObject import ModelUnit, ModelContext, ModelFact, ModelInlineFootnote
|
|
15
15
|
from arelle.ModelValue import QName
|
|
16
16
|
from arelle.ModelXbrl import ModelXbrl
|
|
17
|
+
from arelle.utils.validate.ValidationUtil import etreeIterWithDepth
|
|
17
18
|
from arelle.utils.PluginData import PluginData
|
|
18
19
|
from arelle.XmlValidate import lexicalPatterns
|
|
19
20
|
|
|
21
|
+
from lxml.etree import EntityBase, _Comment, _ElementTree, _ProcessingInstruction
|
|
22
|
+
|
|
20
23
|
XBRLI_IDENTIFIER_PATTERN = re.compile(r"^(?!00)\d{8}$")
|
|
21
24
|
XBRLI_IDENTIFIER_SCHEMA = 'http://www.kvk.nl/kvk-id'
|
|
22
25
|
|
|
@@ -37,6 +40,7 @@ class ContextData:
|
|
|
37
40
|
class FootnoteData:
|
|
38
41
|
noMatchLangFootnotes: set[ModelInlineFootnote]
|
|
39
42
|
orphanedFootnotes: set[ModelInlineFootnote]
|
|
43
|
+
factLangFootnotes: dict[ModelInlineFootnote, set[str]]
|
|
40
44
|
|
|
41
45
|
@dataclass
|
|
42
46
|
class PluginValidationDataExtension(PluginData):
|
|
@@ -103,6 +107,7 @@ class PluginValidationDataExtension(PluginData):
|
|
|
103
107
|
footnotesRelationshipSet = modelXbrl.relationshipSet("XBRL-footnotes")
|
|
104
108
|
orphanedFootnotes = set()
|
|
105
109
|
noMatchLangFootnotes = set()
|
|
110
|
+
factLangFootnotes = defaultdict(set)
|
|
106
111
|
for elts in modelXbrl.ixdsEltById.values(): # type: ignore[attr-defined]
|
|
107
112
|
for elt in elts:
|
|
108
113
|
if isinstance(elt, ModelInlineFootnote):
|
|
@@ -112,9 +117,14 @@ class PluginValidationDataExtension(PluginData):
|
|
|
112
117
|
orphanedFootnotes.add(elt)
|
|
113
118
|
if elt.xmlLang not in factLangs:
|
|
114
119
|
noMatchLangFootnotes.add(elt)
|
|
120
|
+
for rel in footnotesRelationshipSet.toModelObject(elt):
|
|
121
|
+
if rel.fromModelObject is not None:
|
|
122
|
+
factLangFootnotes[rel.fromModelObject].add(elt.xmlLang)
|
|
123
|
+
factLangFootnotes.default_factory = None
|
|
115
124
|
return FootnoteData(
|
|
116
125
|
noMatchLangFootnotes=noMatchLangFootnotes,
|
|
117
126
|
orphanedFootnotes=orphanedFootnotes,
|
|
127
|
+
factLangFootnotes=dict(factLangFootnotes),
|
|
118
128
|
)
|
|
119
129
|
|
|
120
130
|
@lru_cache(1)
|
|
@@ -155,6 +165,28 @@ class PluginValidationDataExtension(PluginData):
|
|
|
155
165
|
def getOrphanedFootnotes(self, modelXbrl: ModelXbrl) -> set[ModelInlineFootnote]:
|
|
156
166
|
return self.checkFootnotes(modelXbrl).orphanedFootnotes
|
|
157
167
|
|
|
168
|
+
def getFactLangFootnotes(self, modelXbrl: ModelXbrl) -> dict[ModelInlineFootnote, set[str]]:
|
|
169
|
+
return self.checkFootnotes(modelXbrl).factLangFootnotes
|
|
170
|
+
|
|
171
|
+
@lru_cache(1)
|
|
172
|
+
def getReportXmlLang(self, modelXbrl: ModelXbrl) -> str | None:
|
|
173
|
+
firstIxdsDoc = True
|
|
174
|
+
reportXmlLang = None
|
|
175
|
+
firstRootmostXmlLangDepth = 9999999
|
|
176
|
+
for ixdsHtmlRootElt in modelXbrl.ixdsHtmlElements:
|
|
177
|
+
for uncast_elt, depth in etreeIterWithDepth(ixdsHtmlRootElt):
|
|
178
|
+
elt = cast(Any, uncast_elt)
|
|
179
|
+
eltTag = elt.tag
|
|
180
|
+
if isinstance(elt, (_ElementTree, _Comment, _ProcessingInstruction, EntityBase)):
|
|
181
|
+
continue
|
|
182
|
+
if firstIxdsDoc and (not reportXmlLang or depth < firstRootmostXmlLangDepth):
|
|
183
|
+
xmlLang = elt.get("{http://www.w3.org/XML/1998/namespace}lang")
|
|
184
|
+
if xmlLang:
|
|
185
|
+
reportXmlLang = xmlLang
|
|
186
|
+
firstRootmostXmlLangDepth = depth
|
|
187
|
+
firstIxdsDoc = False
|
|
188
|
+
return reportXmlLang
|
|
189
|
+
|
|
158
190
|
@lru_cache(1)
|
|
159
191
|
def unitsByDocument(self, modelXbrl: ModelXbrl) -> dict[str, list[ModelUnit]]:
|
|
160
192
|
unitsByDocument = defaultdict(list)
|
|
@@ -401,3 +401,61 @@ def rule_nl_kvk_3_3_1_2 (
|
|
|
401
401
|
msg=_('The xml:lang attribute of each footnote matches the language of at least one textual fact.'),
|
|
402
402
|
modelObject = noMatchLangFootnotes
|
|
403
403
|
)
|
|
404
|
+
|
|
405
|
+
|
|
406
|
+
@validation(
|
|
407
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
408
|
+
disclosureSystems=[
|
|
409
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
410
|
+
],
|
|
411
|
+
)
|
|
412
|
+
def rule_nl_kvk_3_3_1_3 (
|
|
413
|
+
pluginData: PluginValidationDataExtension,
|
|
414
|
+
val: ValidateXbrl,
|
|
415
|
+
*args: Any,
|
|
416
|
+
**kwargs: Any,
|
|
417
|
+
) -> Iterable[Validation]:
|
|
418
|
+
"""
|
|
419
|
+
NL-KVK.3.3.1.3: At least one footnote in the footnote relationship is in the language of the report.
|
|
420
|
+
"""
|
|
421
|
+
factLangFootnotes = pluginData.getFactLangFootnotes(val.modelXbrl)
|
|
422
|
+
reportXmlLang = pluginData.getReportXmlLang(val.modelXbrl)
|
|
423
|
+
nonDefLangFtFacts = set(f for f,langs in factLangFootnotes.items() if reportXmlLang not in langs)
|
|
424
|
+
if len(nonDefLangFtFacts) > 0:
|
|
425
|
+
yield Validation.error(
|
|
426
|
+
codes='NL.NL-KVK.3.3.1.3.footnoteOnlyInLanguagesOtherThanLanguageOfAReport',
|
|
427
|
+
msg=_('At least one footnote must have the same language as the report\'s language.'),
|
|
428
|
+
modelObject=nonDefLangFtFacts
|
|
429
|
+
)
|
|
430
|
+
|
|
431
|
+
|
|
432
|
+
@validation(
|
|
433
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
434
|
+
disclosureSystems=[
|
|
435
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
436
|
+
],
|
|
437
|
+
)
|
|
438
|
+
def rule_nl_kvk_3_5_2_2(
|
|
439
|
+
pluginData: PluginValidationDataExtension,
|
|
440
|
+
val: ValidateXbrl,
|
|
441
|
+
*args: Any,
|
|
442
|
+
**kwargs: Any,
|
|
443
|
+
) -> Iterable[Validation]:
|
|
444
|
+
"""
|
|
445
|
+
NL-KVK.3.5.2.2: All tagged text facts MUST be provided in at least the language of the report.
|
|
446
|
+
"""
|
|
447
|
+
reportXmlLang = pluginData.getReportXmlLang(val.modelXbrl)
|
|
448
|
+
factsWithWrongLang = set()
|
|
449
|
+
for fact in val.modelXbrl.facts:
|
|
450
|
+
if (fact is not None and
|
|
451
|
+
fact.concept is not None and
|
|
452
|
+
fact.concept.type is not None and
|
|
453
|
+
fact.concept.type.isOimTextFactType and
|
|
454
|
+
fact.xmlLang != reportXmlLang):
|
|
455
|
+
factsWithWrongLang.add(fact)
|
|
456
|
+
if len(factsWithWrongLang) > 0:
|
|
457
|
+
yield Validation.error(
|
|
458
|
+
codes='NL.NL-KVK.3.5.2.2.taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport',
|
|
459
|
+
msg=_('Tagged text facts MUST be provided in the language of the report.'),
|
|
460
|
+
modelObject=factsWithWrongLang
|
|
461
|
+
)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""
|
|
2
|
+
See COPYRIGHT.md for copyright information.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from collections.abc import Generator
|
|
7
|
+
|
|
8
|
+
from lxml.etree import _Element
|
|
9
|
+
|
|
10
|
+
from arelle.ModelObject import ModelObject
|
|
11
|
+
from arelle.typing import TypeGetText
|
|
12
|
+
|
|
13
|
+
_: TypeGetText
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def etreeIterWithDepth(
|
|
17
|
+
node: ModelObject | _Element,
|
|
18
|
+
depth: int = 0,
|
|
19
|
+
) -> Generator[tuple[ModelObject | _Element, int], None, None]:
|
|
20
|
+
yield node, depth
|
|
21
|
+
for child in node.iterchildren():
|
|
22
|
+
for n_d in etreeIterWithDepth(child, depth + 1):
|
|
23
|
+
yield n_d
|
|
@@ -6,7 +6,7 @@ arelle/CntlrComServer.py,sha256=h1KPf31uMbErpxTZn_iklDqUMGFgQnjZkFkFjd8gtLQ,1888
|
|
|
6
6
|
arelle/CntlrProfiler.py,sha256=2VQJudiUhxryVypxjODx2ccP1-n60icTiWs5lSEokhQ,972
|
|
7
7
|
arelle/CntlrQuickBooks.py,sha256=BMqd5nkNQOZyNFPefkTeWUUDCYNS6BQavaG8k1Lepu4,31543
|
|
8
8
|
arelle/CntlrWebMain.py,sha256=x5vtiopqGdp6L5s7PrUTEABXCGqtb5oy7yqWIVePtgE,50860
|
|
9
|
-
arelle/CntlrWinMain.py,sha256=
|
|
9
|
+
arelle/CntlrWinMain.py,sha256=h30F1aNj1Mggsaqe6__d1JCQe6wIfBI_z_4rCfc-eQc,96894
|
|
10
10
|
arelle/CntlrWinTooltip.py,sha256=6MzoAIfkYnNu_bl_je8n0adhwmKxAIcymkg9Tij9Z4M,7951
|
|
11
11
|
arelle/DialogAbout.py,sha256=XXzMV0fO4BQ3-l1Puirzmn7EZEdmgJg7JNYdJm1FueM,1987
|
|
12
12
|
arelle/DialogArcroleGroup.py,sha256=r81OT3LFmMkoROpFenk97oVEyQhibKZ1QgDHvMsyCl0,7547
|
|
@@ -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=UX5PNNTrOLUsl7iAia9CpK-Esl9BSjjx3ISlTR1ywcY,515
|
|
127
127
|
arelle/typing.py,sha256=Ct5lrNKRow_o9CraMEXNza8nFsJ_iGIKoUeGfPs2dxI,1084
|
|
128
128
|
arelle/api/Session.py,sha256=O8zpg7MJys9uxwwHf8OsSlZxpPdq7A3ONyY39Q4A3Kc,6218
|
|
129
129
|
arelle/archive/CustomLogger.py,sha256=v_JXOCQLDZcfaFWzxC9FRcEf9tQi4rCI4Sx7jCuAVQI,1231
|
|
@@ -362,15 +362,15 @@ arelle/plugin/validate/EBA/__init__.py,sha256=1kW-04W32sStSAL8wvW1ZpXnjlFv6KLbfE
|
|
|
362
362
|
arelle/plugin/validate/EBA/config.xml,sha256=37wMVUAObK-XEqakqD8zPNog20emYt4a_yfL1AKubF8,2022
|
|
363
363
|
arelle/plugin/validate/ESEF/Const.py,sha256=JujF_XV-_TNsxjGbF-8SQS4OOZIcJ8zhCMnr-C1O5Ho,22660
|
|
364
364
|
arelle/plugin/validate/ESEF/Dimensions.py,sha256=MOJM7vwNPEmV5cu-ZzPrhx3347ZvxgD6643OB2HRnIk,10597
|
|
365
|
-
arelle/plugin/validate/ESEF/Util.py,sha256=
|
|
365
|
+
arelle/plugin/validate/ESEF/Util.py,sha256=QH3btcGqBpr42M7WSKZLSdNXygZaZLfEiEjlxoG21jE,7950
|
|
366
366
|
arelle/plugin/validate/ESEF/__init__.py,sha256=LL7uYOcGPHgjwTlcfW2oWMqWiqrZ5yABzcKkJZFrZis,20391
|
|
367
367
|
arelle/plugin/validate/ESEF/ESEF_2021/DTS.py,sha256=6Za7BANwwc_egxLCgbgWzwUGOXZv9IF1I7JCkDNt2Tw,26277
|
|
368
368
|
arelle/plugin/validate/ESEF/ESEF_2021/Image.py,sha256=4bnhuy5viBU0viPjb4FhcRRjVVKlNdnKLFdSGg3sZvs,4871
|
|
369
|
-
arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py,sha256=
|
|
369
|
+
arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py,sha256=wrIjd1XsA3iAGwlULca4LxrEaeDj5vB7aldyPG9ycZE,62871
|
|
370
370
|
arelle/plugin/validate/ESEF/ESEF_2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
371
371
|
arelle/plugin/validate/ESEF/ESEF_Current/DTS.py,sha256=epp-PBh1NJzQqgxUE6C468HmoDc2w3j54rMwfiOAry4,29334
|
|
372
372
|
arelle/plugin/validate/ESEF/ESEF_Current/Image.py,sha256=w36sCTy8QbsuKABjkK6PTWce2A4zFN_rMnEM2wi5WEc,11364
|
|
373
|
-
arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py,sha256=
|
|
373
|
+
arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py,sha256=aP4tVQudMAXDXLD3M121BAfQ1DtH2dox6kdBvhlyDho,73157
|
|
374
374
|
arelle/plugin/validate/ESEF/ESEF_Current/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
375
375
|
arelle/plugin/validate/ESEF/resources/authority-validations.json,sha256=JriLZ45KmUYlQiPbXJCAahobqdrst64Ay77bofZhB5Q,14940
|
|
376
376
|
arelle/plugin/validate/ESEF/resources/config.xml,sha256=t3STU_-QYM7Ay8YwZRPapnohiWVWhjfr4L2Rjx9xN9U,3902
|
|
@@ -378,7 +378,7 @@ arelle/plugin/validate/FERC/__init__.py,sha256=V4fXcFKBsjFFPs9_1NhvDjWpEQCoQM0tR
|
|
|
378
378
|
arelle/plugin/validate/FERC/config.xml,sha256=bn9b8eCqJA1J62rYq1Nz85wJrMGAahVmmnIUQZyerjo,1919
|
|
379
379
|
arelle/plugin/validate/FERC/resources/ferc-utr.xml,sha256=OCRj9IUpdXATCBXKbB71apYx9kxcNtZW-Hq4s-avsRY,2663
|
|
380
380
|
arelle/plugin/validate/NL/DisclosureSystems.py,sha256=kTjpxkgwn58wHCbaLRBInirOy-2cpK9MLWEFJ_193y4,180
|
|
381
|
-
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=
|
|
381
|
+
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=0zdBf1mTfR9YCquvk1p_t67Guhjb7XgM8bwBgMpmcvs,8730
|
|
382
382
|
arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=2qvvOqBkgk2LwERTHDuxtrRupYz3yRyhH71XQLbl9F4,15507
|
|
383
383
|
arelle/plugin/validate/NL/__init__.py,sha256=99uMv4ESHwyJqA-Xq_hBvHygm0BQ3NxcmAJnVYUkSgg,3104
|
|
384
384
|
arelle/plugin/validate/NL/resources/config.xml,sha256=i_ns2wHmQYjhkRItevRR8tzfkl31ASfbWlc5t6pDB-w,1117
|
|
@@ -387,7 +387,7 @@ arelle/plugin/validate/NL/rules/br_kvk.py,sha256=0SwKieWzTDm3YMsXPS6zTdgbk7_Z9Cz
|
|
|
387
387
|
arelle/plugin/validate/NL/rules/fg_nl.py,sha256=4Puq5wAjtK_iNd4wisH_R0Z_EKJ7MT2OCai5g4t1MPE,10714
|
|
388
388
|
arelle/plugin/validate/NL/rules/fr_kvk.py,sha256=-_BLeWGoZ_f56p5VO4X40S45Ny3Ej-WK6Srei1KVSxU,8170
|
|
389
389
|
arelle/plugin/validate/NL/rules/fr_nl.py,sha256=-M1WtXp06khhtkfOVPCa-b8UbC281gk4YfDhvtAVlnI,31424
|
|
390
|
-
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=
|
|
390
|
+
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=gCmOZP3sYJBBzuFoZSg4T4M5bB2MnThduS1no4BWSqc,16062
|
|
391
391
|
arelle/plugin/validate/ROS/DisclosureSystems.py,sha256=rJ81mwQDYTi6JecFZ_zhqjjz3VNQRgjHNSh0wcQWAQE,18
|
|
392
392
|
arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=IV7ILhNvgKwQXqbpSA6HRNt9kEnejCyMADI3wyyIgk0,4036
|
|
393
393
|
arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=FBhEp8t396vGdvCbMEimfcxmGiGnhXMen-yVLWnkFaI,758
|
|
@@ -704,10 +704,11 @@ arelle/utils/validate/Decorator.py,sha256=8LGmA171HZgKrALtsMKyHqMNM-XCdwJOv6KpZz
|
|
|
704
704
|
arelle/utils/validate/DetectScriptsInXhtml.py,sha256=JOgsUP0_kvE6O3TuhzKxqKG1ZFP9LrUYZBgrar6JEm0,2178
|
|
705
705
|
arelle/utils/validate/Validation.py,sha256=n6Ag7VeCj_VO5nqzw_P53hOfXXeT2APK0Enb3UQqBns,832
|
|
706
706
|
arelle/utils/validate/ValidationPlugin.py,sha256=_WeRPXZUTCcSN3FLbFwiAe_2pAUTxZZk1061qMoDW8w,11527
|
|
707
|
+
arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txrxRFgh8FxIs,548
|
|
707
708
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
708
709
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
709
710
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
710
|
-
arelle_release-2.37.
|
|
711
|
+
arelle_release-2.37.11.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
711
712
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
712
713
|
tests/integration_tests/download_cache.py,sha256=jVMIVICsZjcVc9DCPPu3fCjF9_cWSS3tqSynhFs3oAM,4097
|
|
713
714
|
tests/integration_tests/integration_test_util.py,sha256=H7mncbv0T9ZeVyrtk9Hohe3k6jgcYykHkt-LGE-Q9aQ,10270
|
|
@@ -762,7 +763,7 @@ tests/integration_tests/validation/conformance_suite_configurations/kvk_nt16.py,
|
|
|
762
763
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt17.py,sha256=lmEZonthFm0YKFmp1dwXtdJ2T7txUeSpL4mbAo8fl4Y,1292
|
|
763
764
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt18.py,sha256=EG2RQVkvFENhzUF3fl3QvDnH7ZPYS1n1Fo8bhfmSczM,1205
|
|
764
765
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt19.py,sha256=FAzf9RhRmn_8yowpplJho2zEspX9FxJiVq8SjZT3Dsc,1199
|
|
765
|
-
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py,sha256=
|
|
766
|
+
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py,sha256=5WbjM571b4Va8JbW8nuBp_XU7K-LecvNxFfpVyKfVM0,11095
|
|
766
767
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py,sha256=O_LFVBZPkjxmbrU7_C7VTLtrdoCUx2bYXOXw6_MlRtQ,846
|
|
767
768
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py,sha256=aTN3Ez6lPsZsuypHZP84DneOtYxUZSjUiGypHy6ofHQ,846
|
|
768
769
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py,sha256=sqHLjrHc95dTu0guTgKkphaKM1zNfKGnN4GKkZDLzeU,845
|
|
@@ -1556,8 +1557,8 @@ tests/unit_tests/arelle/oim/test_load.py,sha256=NxiUauQwJVfWAHbbpsMHGSU2d3Br8Pki
|
|
|
1556
1557
|
tests/unit_tests/arelle/plugin/test_plugin_imports.py,sha256=bdhIs9frAnFsdGU113yBk09_jis-z43dwUItMFYuSYM,1064
|
|
1557
1558
|
tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py,sha256=XHABmejQt7RlZ0udh7v42f2Xb2STGk_fSaIaJ9i2xo0,878
|
|
1558
1559
|
tests/unit_tests/arelle/utils/validate/test_decorator.py,sha256=ZS8FqIY1g-2FCbjF4UYm609dwViax6qBMRJSi0vfuhY,2482
|
|
1559
|
-
arelle_release-2.37.
|
|
1560
|
-
arelle_release-2.37.
|
|
1561
|
-
arelle_release-2.37.
|
|
1562
|
-
arelle_release-2.37.
|
|
1563
|
-
arelle_release-2.37.
|
|
1560
|
+
arelle_release-2.37.11.dist-info/METADATA,sha256=Oo7fwuP5YONoSo93bQ9Kv9yPSXy-9PSG1SxlzYVk_D8,9065
|
|
1561
|
+
arelle_release-2.37.11.dist-info/WHEEL,sha256=Nw36Djuh_5VDukK0H78QzOX-_FQEo6V37m3nkm96gtU,91
|
|
1562
|
+
arelle_release-2.37.11.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
1563
|
+
arelle_release-2.37.11.dist-info/top_level.txt,sha256=ZYmYGmhW5Jvo3vJ4iXBZPUI29LvYhntom04w90esJvU,13
|
|
1564
|
+
arelle_release-2.37.11.dist-info/RECORD,,
|
|
@@ -18,9 +18,17 @@ config = ConformanceSuiteConfig(
|
|
|
18
18
|
*NL_PACKAGES['NL-INLINE-2024'],
|
|
19
19
|
],
|
|
20
20
|
expected_additional_testcase_errors={f"conformance-suite-2024-sbr-domein-handelsregister/tests/{s}": val for s, val in {
|
|
21
|
-
'
|
|
22
|
-
'
|
|
23
|
-
|
|
21
|
+
'G3-2-4_2/index.xml:TC3_valid': {
|
|
22
|
+
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 1,
|
|
23
|
+
},
|
|
24
|
+
'G4-1-2_1/index.xml:TC2_valid': {
|
|
25
|
+
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 1,
|
|
26
|
+
},
|
|
27
|
+
'RTS_Annex_II_Par_1_RTS_Annex_IV_par_7/index.xml:TC2_valid': {
|
|
28
|
+
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 1,
|
|
29
|
+
},
|
|
30
|
+
'RTS_Annex_II_Par_1_RTS_Annex_IV_par_7/index.xml:TC4_invalid': {
|
|
31
|
+
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 1,
|
|
24
32
|
},
|
|
25
33
|
'RTS_Annex_IV_Par_1_G3-1-4_1/index.xml:TC2_invalid': {
|
|
26
34
|
'message:valueKvKIdentifier': 13,
|
|
@@ -29,18 +37,25 @@ config = ConformanceSuiteConfig(
|
|
|
29
37
|
'RTS_Annex_IV_Par_1_G3-1-4_2/index.xml:TC2_invalid': {
|
|
30
38
|
'message:valueKvKIdentifier': 13,
|
|
31
39
|
},
|
|
40
|
+
'RTS_Annex_IV_Par_2_G3-1-1_2/index.xml:TC2_invalid': {
|
|
41
|
+
'message:lei-identifier-format': 105,
|
|
42
|
+
'message:valueKvKIdentifierScheme': 105,
|
|
43
|
+
},
|
|
44
|
+
'RTS_Annex_IV_Par_6/index.xml:TC2_valid': {
|
|
45
|
+
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 1,
|
|
46
|
+
},
|
|
32
47
|
}.items()},
|
|
33
48
|
expected_failure_ids=frozenset([
|
|
34
49
|
# Conformance Suite Errors
|
|
50
|
+
'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.
|
|
35
51
|
'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)
|
|
36
52
|
|
|
53
|
+
|
|
37
54
|
# Not Implemented
|
|
38
55
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-2-7_1/index.xml:TC4_invalid',
|
|
39
56
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-2-7_1/index.xml:TC5_invalid',
|
|
40
57
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-2-7_1/index.xml:TC6_invalid',
|
|
41
58
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-2-7_1/index.xml:TC7_invalid',
|
|
42
|
-
'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.
|
|
43
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-3-1_3/index.xml:TC2_invalid',
|
|
44
59
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-1_1/index.xml:TC2_invalid',
|
|
45
60
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-1_2/index.xml:TC2_invalid',
|
|
46
61
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-1_3/index.xml:TC2_invalid',
|
|
@@ -56,7 +71,6 @@ config = ConformanceSuiteConfig(
|
|
|
56
71
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_5/index.xml:TC2_invalid',
|
|
57
72
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_5/index.xml:TC3_invalid',
|
|
58
73
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-2_1/index.xml:TC3_invalid',
|
|
59
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-2_2/index.xml:TC2_invalid',
|
|
60
74
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-3_1/index.xml:TC2_invalid',
|
|
61
75
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-4_1/index.xml:TC2_invalid',
|
|
62
76
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-6-2_1/index.xml:TC2_invalid',
|
|
File without changes
|
|
File without changes
|
|
File without changes
|