arelle-release 2.37.4__py3-none-any.whl → 2.37.6__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/DisclosureSystem.py +10 -1
- arelle/FileSource.py +19 -7
- arelle/ModelDocument.py +29 -0
- arelle/Validate.py +1 -1
- arelle/_version.py +2 -2
- arelle/plugin/inlineXbrlDocumentSet.py +1 -1
- arelle/plugin/validate/NL/DisclosureSystems.py +1 -1
- arelle/plugin/validate/NL/PluginValidationDataExtension.py +30 -7
- arelle/plugin/validate/NL/ValidationPluginExtension.py +13 -8
- arelle/plugin/validate/NL/__init__.py +14 -0
- arelle/plugin/validate/NL/resources/config.xml +2 -2
- arelle/plugin/validate/NL/rules/nl_kvk.py +141 -12
- {arelle_release-2.37.4.dist-info → arelle_release-2.37.6.dist-info}/METADATA +1 -1
- {arelle_release-2.37.4.dist-info → arelle_release-2.37.6.dist-info}/RECORD +25 -24
- {arelle_release-2.37.4.dist-info → arelle_release-2.37.6.dist-info}/WHEEL +1 -1
- tests/integration_tests/validation/assets.py +43 -0
- tests/integration_tests/validation/conformance_suite_configs.py +2 -0
- tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py +118 -0
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-04-invalid.xbrl +5 -0
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-04-invalid.xbrl +5 -0
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-04-invalid.xbrl +5 -0
- tests/resources/conformance_suites/nl_nt19/fr_nl/1-04-invalid.xbrl +5 -0
- {arelle_release-2.37.4.dist-info → arelle_release-2.37.6.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.4.dist-info → arelle_release-2.37.6.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.4.dist-info → arelle_release-2.37.6.dist-info}/top_level.txt +0 -0
arelle/DisclosureSystem.py
CHANGED
|
@@ -396,7 +396,7 @@ class DisclosureSystem:
|
|
|
396
396
|
level=logging.ERROR)
|
|
397
397
|
etree.clear_error_log()
|
|
398
398
|
|
|
399
|
-
def mappedUrl(self, url):
|
|
399
|
+
def mappedUrl(self, url: str) -> str:
|
|
400
400
|
if url in self.mappedFiles:
|
|
401
401
|
mappedUrl = self.mappedFiles[url]
|
|
402
402
|
else: # handle mapped paths
|
|
@@ -407,6 +407,15 @@ class DisclosureSystem:
|
|
|
407
407
|
break
|
|
408
408
|
return mappedUrl
|
|
409
409
|
|
|
410
|
+
def isMappedUrl(self, url: str) -> bool:
|
|
411
|
+
if url in self.mappedFiles:
|
|
412
|
+
return True
|
|
413
|
+
else: # handle mapped paths
|
|
414
|
+
for mapFrom, mapTo in self.mappedPaths:
|
|
415
|
+
if url.startswith(mapFrom):
|
|
416
|
+
return True
|
|
417
|
+
return False
|
|
418
|
+
|
|
410
419
|
def uriAuthorityValid(self, uri):
|
|
411
420
|
if self.standardTaxonomiesUrl:
|
|
412
421
|
return UrlUtil.authority(uri) in self.standardAuthorities
|
arelle/FileSource.py
CHANGED
|
@@ -191,7 +191,11 @@ class FileSource:
|
|
|
191
191
|
if not self.isZip:
|
|
192
192
|
# Try to detect zip files with unrecognized file extensions.
|
|
193
193
|
try:
|
|
194
|
-
|
|
194
|
+
if self.cntlr is not None and hasattr(self.cntlr, "modelManager"):
|
|
195
|
+
basefile = self.cntlr.webCache.getfilename( # cache remapping
|
|
196
|
+
self.cntlr.modelManager.disclosureSystem.mappedUrl(self.url)) # local remapping
|
|
197
|
+
else:
|
|
198
|
+
basefile = self.url
|
|
195
199
|
if basefile:
|
|
196
200
|
with openFileStream(self.cntlr, basefile, 'rb') as fileStream:
|
|
197
201
|
self.isZip = zipfile.is_zipfile(fileStream)
|
|
@@ -213,7 +217,8 @@ class FileSource:
|
|
|
213
217
|
elif checkIfXmlIsEis:
|
|
214
218
|
try:
|
|
215
219
|
assert self.cntlr is not None
|
|
216
|
-
_filename = self.cntlr.webCache.getfilename(
|
|
220
|
+
_filename = self.cntlr.webCache.getfilename(
|
|
221
|
+
self.cntlr.modelManager.disclosureSystem.mappedUrl(self.url))
|
|
217
222
|
assert _filename is not None
|
|
218
223
|
file = open(_filename, errors='replace')
|
|
219
224
|
l = file.read(256) # may have comments before first element
|
|
@@ -234,7 +239,8 @@ class FileSource:
|
|
|
234
239
|
if self.isValid and not self.isOpen:
|
|
235
240
|
if (self.isZip or self.isTarGz or self.isEis or self.isXfd or self.isRss or self.isInstalledTaxonomyPackage) and self.cntlr:
|
|
236
241
|
assert isinstance(self.url, str)
|
|
237
|
-
self.basefile = self.cntlr.webCache.getfilename(
|
|
242
|
+
self.basefile = self.cntlr.webCache.getfilename(
|
|
243
|
+
self.cntlr.modelManager.disclosureSystem.mappedUrl(self.url), reload=reloadCache)
|
|
238
244
|
else:
|
|
239
245
|
self.basefile = self.url
|
|
240
246
|
self.baseurl = self.url # url gets changed by selection
|
|
@@ -473,8 +479,11 @@ class FileSource:
|
|
|
473
479
|
|
|
474
480
|
def isMappedUrl(self, url: str) -> bool:
|
|
475
481
|
if self.mappedPaths is not None:
|
|
476
|
-
|
|
477
|
-
for mapFrom in self.mappedPaths)
|
|
482
|
+
if any(url.startswith(mapFrom)
|
|
483
|
+
for mapFrom in self.mappedPaths):
|
|
484
|
+
return True
|
|
485
|
+
if self.cntlr and self.cntlr.modelManager.disclosureSystem.isMappedUrl(url):
|
|
486
|
+
return True
|
|
478
487
|
return False
|
|
479
488
|
|
|
480
489
|
def mappedUrl(self, url: str) -> str:
|
|
@@ -483,6 +492,8 @@ class FileSource:
|
|
|
483
492
|
if url.startswith(mapFrom):
|
|
484
493
|
url = mapTo + url[len(mapFrom):]
|
|
485
494
|
break
|
|
495
|
+
if self.cntlr:
|
|
496
|
+
return self.cntlr.modelManager.disclosureSystem.mappedUrl(url)
|
|
486
497
|
return url
|
|
487
498
|
|
|
488
499
|
def fileSourceContainingFilepath(self, filepath: str | None) -> FileSource | None:
|
|
@@ -807,11 +818,12 @@ def openFileStream(
|
|
|
807
818
|
cntlr
|
|
808
819
|
and hasattr(cntlr, "modelManager")
|
|
809
820
|
): # may be called early in initialization for PluginManager
|
|
810
|
-
filepath = cntlr.modelManager.disclosureSystem.mappedUrl(filepath)
|
|
821
|
+
filepath = cntlr.modelManager.disclosureSystem.mappedUrl(filepath)
|
|
811
822
|
if archiveFilenameParts(filepath): # file is in an archive
|
|
812
823
|
return openFileSource(filepath, cntlr).file(filepath, binary='b' in mode, encoding=encoding)[0]
|
|
813
824
|
if isHttpUrl(filepath) and cntlr:
|
|
814
|
-
_cacheFilepath = cntlr.webCache.getfilename(
|
|
825
|
+
_cacheFilepath = cntlr.webCache.getfilename(
|
|
826
|
+
cntlr.modelManager.disclosureSystem.mappedUrl(filepath), normalize=True) # normalize is separate step in ModelDocument retrieval, combined here
|
|
815
827
|
if _cacheFilepath is None:
|
|
816
828
|
raise OSError(_("Unable to open file: {0}.").format(filepath))
|
|
817
829
|
filepath = _cacheFilepath
|
arelle/ModelDocument.py
CHANGED
|
@@ -1704,6 +1704,35 @@ def inlineIxdsDiscover(modelXbrl, modelIxdsDocument, setTargetModelXbrl=False, *
|
|
|
1704
1704
|
for _target in sourceFactTargets:
|
|
1705
1705
|
targetRoleUris[_target].add(footnoteRole)
|
|
1706
1706
|
|
|
1707
|
+
for htmlElement in modelXbrl.ixdsHtmlElements:
|
|
1708
|
+
# Discover iXBRL 1.0 footnote roles and arcroles.
|
|
1709
|
+
iXBRL1_0Footnotes = list(htmlElement.iterdescendants(tag=XbrlConst.qnIXbrlFootnote.clarkNotation))
|
|
1710
|
+
if not iXBRL1_0Footnotes:
|
|
1711
|
+
continue
|
|
1712
|
+
footnoteRefElems = (
|
|
1713
|
+
XbrlConst.qnIXbrlFraction.clarkNotation,
|
|
1714
|
+
XbrlConst.qnIXbrlNonFraction.clarkNotation,
|
|
1715
|
+
XbrlConst.qnIXbrlNonNumeric.clarkNotation,
|
|
1716
|
+
XbrlConst.qnIXbrlTuple.clarkNotation,
|
|
1717
|
+
)
|
|
1718
|
+
targetsByFootnoteId = defaultdict(set)
|
|
1719
|
+
for elem in htmlElement.iterdescendants(footnoteRefElems):
|
|
1720
|
+
if isinstance(elem, ModelObject):
|
|
1721
|
+
refs = elem.get("footnoteRefs")
|
|
1722
|
+
if refs:
|
|
1723
|
+
_target = elem.get("target")
|
|
1724
|
+
for footnoteRef in refs.split():
|
|
1725
|
+
targetsByFootnoteId[footnoteRef].add(_target)
|
|
1726
|
+
for modelInlineFootnote in iXBRL1_0Footnotes:
|
|
1727
|
+
arcrole = modelInlineFootnote.get("arcrole", XbrlConst.factFootnote)
|
|
1728
|
+
footnoteLinkRole = modelInlineFootnote.get("footnoteLinkRole", XbrlConst.defaultLinkRole)
|
|
1729
|
+
footnoteRole = modelInlineFootnote.get("footnoteRole")
|
|
1730
|
+
for _target in targetsByFootnoteId[modelInlineFootnote.footnoteID]:
|
|
1731
|
+
targetRoleUris[_target].add(footnoteLinkRole)
|
|
1732
|
+
targetArcroleUris[_target].add(arcrole)
|
|
1733
|
+
if footnoteRole:
|
|
1734
|
+
targetRoleUris[_target].add(footnoteRole)
|
|
1735
|
+
|
|
1707
1736
|
contextRefs = factTargetContextRefs[ixdsTarget]
|
|
1708
1737
|
unitRefs = factTargetUnitRefs[ixdsTarget]
|
|
1709
1738
|
allContextRefs = set.union(*factTargetContextRefs.values())
|
arelle/Validate.py
CHANGED
|
@@ -734,7 +734,7 @@ class Validate:
|
|
|
734
734
|
if not isinstance(expected, list):
|
|
735
735
|
expected = [expected]
|
|
736
736
|
for testErr in _errors:
|
|
737
|
-
if isinstance(testErr,str) and testErr.startswith("ESEF."): # compared as list of strings to QName localname
|
|
737
|
+
if isinstance(testErr, str) and testErr.startswith(("ESEF.", "NL.NL-KVK")): # compared as list of strings to QName localname
|
|
738
738
|
testErr = testErr.rpartition(".")[2]
|
|
739
739
|
for _exp in _expectedList:
|
|
740
740
|
_expMatched = False
|
arelle/_version.py
CHANGED
|
@@ -441,7 +441,7 @@ def createTargetInstance(
|
|
|
441
441
|
arcrole, linkrole, linkqname, arcqname = linkKey
|
|
442
442
|
if (linkrole and linkqname and arcqname and # fully specified roles
|
|
443
443
|
arcrole != "XBRL-footnotes" and
|
|
444
|
-
any(lP.modelDocument.type
|
|
444
|
+
any(lP.modelDocument.type in (Type.INLINEXBRL, Type.INLINEXBRLDOCUMENTSET) for lP in linkPrototypes)):
|
|
445
445
|
for linkPrototype in linkPrototypes:
|
|
446
446
|
if linkPrototype not in footnoteLinks[linkrole]:
|
|
447
447
|
footnoteLinks[linkrole].append(linkPrototype)
|
|
@@ -21,22 +21,25 @@ XBRLI_IDENTIFIER_SCHEMA = 'http://www.kvk.nl/kvk-id'
|
|
|
21
21
|
|
|
22
22
|
@dataclass
|
|
23
23
|
class PluginValidationDataExtension(PluginData):
|
|
24
|
-
|
|
25
|
-
financialReportingPeriodCurrentEndDateQn: QName
|
|
26
|
-
financialReportingPeriodPreviousStartDateQn: QName
|
|
27
|
-
financialReportingPeriodPreviousEndDateQn: QName
|
|
28
|
-
formattedExplanationItemTypeQn: QName
|
|
24
|
+
chamberOfCommerceRegistrationNumberQn: QName
|
|
29
25
|
documentAdoptionDateQn: QName
|
|
30
26
|
documentAdoptionStatusQn: QName
|
|
31
27
|
documentResubmissionUnsurmountableInaccuraciesQn: QName
|
|
32
28
|
entrypointRoot: str
|
|
33
29
|
entrypoints: set[str]
|
|
30
|
+
financialReportingPeriodCurrentStartDateQn: QName
|
|
31
|
+
financialReportingPeriodCurrentEndDateQn: QName
|
|
32
|
+
financialReportingPeriodPreviousStartDateQn: QName
|
|
33
|
+
financialReportingPeriodPreviousEndDateQn: QName
|
|
34
|
+
formattedExplanationItemTypeQn: QName
|
|
34
35
|
textFormattingSchemaPath: str
|
|
35
36
|
textFormattingWrapper: str
|
|
36
37
|
|
|
37
38
|
_contextsByDocument: dict[str, list[ModelContext]] | None = None
|
|
39
|
+
_contextsWithImproperContent: list[ModelContext | None] | None = None
|
|
38
40
|
_contextsWithPeriodTime: list[ModelContext | None] | None = None
|
|
39
41
|
_contextsWithPeriodTimeZone: list[ModelContext | None] | None = None
|
|
42
|
+
_contextsWithSegments: list[ModelContext | None] | None = None
|
|
40
43
|
_entityIdentifiers: set[tuple[str, str]] | None = None
|
|
41
44
|
_factsByDocument: dict[str, list[ModelFact]] | None = None
|
|
42
45
|
_unitsByDocument: dict[str, list[ModelUnit]] | None = None
|
|
@@ -51,8 +54,10 @@ class PluginValidationDataExtension(PluginData):
|
|
|
51
54
|
return self._contextsByDocument
|
|
52
55
|
|
|
53
56
|
def checkContexts(self, allContexts: dict[str, list[ModelContext]]) -> None:
|
|
57
|
+
contextsWithImproperContent: list[ModelContext | None] = []
|
|
54
58
|
contextsWithPeriodTime: list[ModelContext | None] = []
|
|
55
59
|
contextsWithPeriodTimeZone: list[ModelContext | None] = []
|
|
60
|
+
contextsWithSegments: list[ModelContext | None] = []
|
|
56
61
|
datetimePattern = lexicalPatterns["XBRLI_DATEUNION"]
|
|
57
62
|
for contexts in allContexts.values():
|
|
58
63
|
for context in contexts:
|
|
@@ -66,8 +71,14 @@ class PluginValidationDataExtension(PluginData):
|
|
|
66
71
|
contextsWithPeriodTime.append(context)
|
|
67
72
|
if m.group(3):
|
|
68
73
|
contextsWithPeriodTimeZone.append(context)
|
|
74
|
+
if context.hasSegment:
|
|
75
|
+
contextsWithSegments.append(context)
|
|
76
|
+
if context.nonDimValues("scenario"): # type: ignore[no-untyped-call]
|
|
77
|
+
contextsWithImproperContent.append(context)
|
|
78
|
+
self._contextsWithImproperContent = contextsWithImproperContent
|
|
69
79
|
self._contextsWithPeriodTime = contextsWithPeriodTime
|
|
70
80
|
self._contextsWithPeriodTimeZone = contextsWithPeriodTimeZone
|
|
81
|
+
self._contextsWithSegments = contextsWithSegments
|
|
71
82
|
|
|
72
83
|
def entityIdentifiersInDocument(self, modelXbrl: ModelXbrl) -> set[tuple[str, str]]:
|
|
73
84
|
if self._entityIdentifiers is not None:
|
|
@@ -84,18 +95,30 @@ class PluginValidationDataExtension(PluginData):
|
|
|
84
95
|
self._factsByDocument = dict(factsByDocument)
|
|
85
96
|
return self._factsByDocument
|
|
86
97
|
|
|
87
|
-
def
|
|
98
|
+
def getContextsWithImproperContent(self, modelXbrl: ModelXbrl) -> list[ModelContext | None]:
|
|
99
|
+
if self._contextsWithImproperContent is None:
|
|
100
|
+
self.checkContexts(self.contextsByDocument(modelXbrl))
|
|
101
|
+
assert(self._contextsWithImproperContent is not None)
|
|
102
|
+
return self._contextsWithImproperContent
|
|
103
|
+
|
|
104
|
+
def getContextsWithPeriodTime(self, modelXbrl: ModelXbrl) -> list[ModelContext | None]:
|
|
88
105
|
if self._contextsWithPeriodTime is None:
|
|
89
106
|
self.checkContexts(self.contextsByDocument(modelXbrl))
|
|
90
107
|
assert(self._contextsWithPeriodTime is not None)
|
|
91
108
|
return self._contextsWithPeriodTime
|
|
92
109
|
|
|
93
|
-
def
|
|
110
|
+
def getContextsWithPeriodTimeZone(self, modelXbrl: ModelXbrl) -> list[ModelContext | None]:
|
|
94
111
|
if self._contextsWithPeriodTimeZone is None:
|
|
95
112
|
self.checkContexts(self.contextsByDocument(modelXbrl))
|
|
96
113
|
assert (self._contextsWithPeriodTimeZone is not None)
|
|
97
114
|
return self._contextsWithPeriodTimeZone
|
|
98
115
|
|
|
116
|
+
def getContextsWithSegments(self, modelXbrl: ModelXbrl) -> list[ModelContext | None]:
|
|
117
|
+
if self._contextsWithSegments is None:
|
|
118
|
+
self.checkContexts(self.contextsByDocument(modelXbrl))
|
|
119
|
+
assert(self._contextsWithSegments is not None)
|
|
120
|
+
return self._contextsWithSegments
|
|
121
|
+
|
|
99
122
|
def unitsByDocument(self, modelXbrl: ModelXbrl) -> dict[str, list[ModelUnit]]:
|
|
100
123
|
if self._unitsByDocument is not None:
|
|
101
124
|
return self._unitsByDocument
|
|
@@ -10,7 +10,7 @@ from arelle.ModelXbrl import ModelXbrl
|
|
|
10
10
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
11
11
|
from arelle.typing import TypeGetText
|
|
12
12
|
from arelle.utils.validate.ValidationPlugin import ValidationPlugin
|
|
13
|
-
from .DisclosureSystems import DISCLOSURE_SYSTEM_NT16, DISCLOSURE_SYSTEM_NT17, DISCLOSURE_SYSTEM_NT18, DISCLOSURE_SYSTEM_NT19,
|
|
13
|
+
from .DisclosureSystems import DISCLOSURE_SYSTEM_NT16, DISCLOSURE_SYSTEM_NT17, DISCLOSURE_SYSTEM_NT18, DISCLOSURE_SYSTEM_NT19, DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
14
14
|
from .PluginValidationDataExtension import PluginValidationDataExtension
|
|
15
15
|
|
|
16
16
|
_: TypeGetText
|
|
@@ -23,6 +23,7 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
23
23
|
jenvNamespace = 'http://www.nltaxonomie.nl/nt16/jenv/20211208/dictionary/jenv-bw2-data'
|
|
24
24
|
kvkINamespace = 'http://www.nltaxonomie.nl/nt16/kvk/20211208/dictionary/kvk-data'
|
|
25
25
|
nlTypesNamespace = 'http://www.nltaxonomie.nl/nt16/sbr/20210301/dictionary/nl-types'
|
|
26
|
+
titel9Namespace = ''
|
|
26
27
|
entrypointRoot = 'http://www.nltaxonomie.nl/nt16/kvk/20211208/entrypoints/'
|
|
27
28
|
entrypoints = {entrypointRoot + e for e in [
|
|
28
29
|
'kvk-rpt-jaarverantwoording-2021-ifrs-full.xsd',
|
|
@@ -59,6 +60,7 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
59
60
|
jenvNamespace = 'http://www.nltaxonomie.nl/nt17/jenv/20221214/dictionary/jenv-bw2-data'
|
|
60
61
|
kvkINamespace = 'http://www.nltaxonomie.nl/nt17/kvk/20221214/dictionary/kvk-data'
|
|
61
62
|
nlTypesNamespace = 'http://www.nltaxonomie.nl/nt17/sbr/20220301/dictionary/nl-types'
|
|
63
|
+
titel9Namespace = ''
|
|
62
64
|
entrypointRoot = 'http://www.nltaxonomie.nl/nt17/kvk/20221214/entrypoints/'
|
|
63
65
|
entrypoints = {entrypointRoot + e for e in [
|
|
64
66
|
'kvk-rpt-jaarverantwoording-2022-ifrs-full.xsd',
|
|
@@ -96,6 +98,7 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
96
98
|
jenvNamespace = 'http://www.nltaxonomie.nl/nt18/jenv/20231213/dictionary/jenv-bw2-data'
|
|
97
99
|
kvkINamespace = 'http://www.nltaxonomie.nl/nt18/kvk/20231213/dictionary/kvk-data'
|
|
98
100
|
nlTypesNamespace = 'http://www.nltaxonomie.nl/nt18/sbr/20230301/dictionary/nl-types'
|
|
101
|
+
titel9Namespace = ''
|
|
99
102
|
entrypointRoot = 'http://www.nltaxonomie.nl/nt18/kvk/20231213/entrypoints/'
|
|
100
103
|
entrypoints = {entrypointRoot + e for e in [
|
|
101
104
|
'kvk-rpt-jaarverantwoording-2023-ifrs-full.xsd',
|
|
@@ -129,10 +132,11 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
129
132
|
'kvk-rpt-jaarverantwoording-2023-nlgaap-verzekeringsmaatschappijen.xsd',
|
|
130
133
|
'kvk-rpt-jaarverantwoording-2023-nlgaap-zorginstellingen.xsd',
|
|
131
134
|
]}
|
|
132
|
-
elif disclosureSystem == DISCLOSURE_SYSTEM_NT19 or disclosureSystem ==
|
|
135
|
+
elif disclosureSystem == DISCLOSURE_SYSTEM_NT19 or disclosureSystem == DISCLOSURE_SYSTEM_NL_INLINE_2024:
|
|
133
136
|
jenvNamespace = 'http://www.nltaxonomie.nl/nt19/jenv/20241211/dictionary/jenv-bw2-data'
|
|
134
137
|
kvkINamespace = 'http://www.nltaxonomie.nl/nt19/kvk/20241211/dictionary/kvk-data'
|
|
135
138
|
nlTypesNamespace = 'http://www.nltaxonomie.nl/nt19/sbr/20240301/dictionary/nl-types'
|
|
139
|
+
titel9Namespace = 'https://www.nltaxonomie.nl/jenv/2024-03-31/bw2-titel9-cor'
|
|
136
140
|
entrypointRoot = 'http://www.nltaxonomie.nl/nt19/kvk/20241211/entrypoints/'
|
|
137
141
|
entrypoints = {entrypointRoot + e for e in [
|
|
138
142
|
'kvk-rpt-jaarverantwoording-2024-ifrs-full.xsd',
|
|
@@ -170,16 +174,17 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
170
174
|
raise ValueError(f'Invalid NL disclosure system: {disclosureSystem}')
|
|
171
175
|
return PluginValidationDataExtension(
|
|
172
176
|
self.name,
|
|
173
|
-
|
|
174
|
-
financialReportingPeriodCurrentEndDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodCurrentEndDate'),
|
|
175
|
-
financialReportingPeriodPreviousStartDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodPreviousStartDate'),
|
|
176
|
-
financialReportingPeriodPreviousEndDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodPreviousEndDate'),
|
|
177
|
-
formattedExplanationItemTypeQn=qname(f'{{{nlTypesNamespace}}}formattedExplanationItemType'),
|
|
177
|
+
chamberOfCommerceRegistrationNumberQn=qname(f'{{{titel9Namespace}}}ChamberOfCommerceRegistrationNumber'),
|
|
178
178
|
documentAdoptionDateQn=qname(f'{{{jenvNamespace}}}DocumentAdoptionDate'),
|
|
179
179
|
documentAdoptionStatusQn=qname(f'{{{jenvNamespace}}}DocumentAdoptionStatus'),
|
|
180
180
|
documentResubmissionUnsurmountableInaccuraciesQn=qname(f'{{{kvkINamespace}}}DocumentResubmissionDueToUnsurmountableInaccuracies'),
|
|
181
181
|
entrypointRoot=entrypointRoot,
|
|
182
182
|
entrypoints=entrypoints,
|
|
183
|
+
financialReportingPeriodCurrentStartDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodCurrentStartDate'),
|
|
184
|
+
financialReportingPeriodCurrentEndDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodCurrentEndDate'),
|
|
185
|
+
financialReportingPeriodPreviousStartDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodPreviousStartDate'),
|
|
186
|
+
financialReportingPeriodPreviousEndDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodPreviousEndDate'),
|
|
187
|
+
formattedExplanationItemTypeQn=qname(f'{{{nlTypesNamespace}}}formattedExplanationItemType'),
|
|
183
188
|
textFormattingSchemaPath='sbr-text-formatting.xsd',
|
|
184
189
|
textFormattingWrapper='<formattedText xmlns="http://www.nltaxonomie.nl/2017/xbrl/sbr-text-formatting">{}</formattedText>',
|
|
185
190
|
)
|
|
@@ -187,7 +192,7 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
187
192
|
def modelXbrlLoadComplete(self, modelXbrl: ModelXbrl, *args: Any, **kwargs: Any) -> ModelDocument | LoadingException | None:
|
|
188
193
|
if self.disclosureSystemFromPluginSelected(modelXbrl):
|
|
189
194
|
disclosureSystem = modelXbrl.modelManager.disclosureSystem.name
|
|
190
|
-
if disclosureSystem in (DISCLOSURE_SYSTEM_NT16, DISCLOSURE_SYSTEM_NT17, DISCLOSURE_SYSTEM_NT18, DISCLOSURE_SYSTEM_NT19,
|
|
195
|
+
if disclosureSystem in (DISCLOSURE_SYSTEM_NT16, DISCLOSURE_SYSTEM_NT17, DISCLOSURE_SYSTEM_NT18, DISCLOSURE_SYSTEM_NT19, DISCLOSURE_SYSTEM_NL_INLINE_2024):
|
|
191
196
|
# Dutch taxonomies prior to 2025 incorrectly used hypercube linkrole for roots instead of dimension linkrole.
|
|
192
197
|
paramQName = qname('tlbDimRelsUseHcRoleForDomainRoots', noPrefixIsNoNamespace=True)
|
|
193
198
|
modelXbrl.modelManager.formulaOptions.parameterValues[paramQName] = (None, "true")
|
|
@@ -14,6 +14,8 @@ from pathlib import Path
|
|
|
14
14
|
from typing import Any
|
|
15
15
|
|
|
16
16
|
from arelle.ModelDocument import LoadingException, ModelDocument
|
|
17
|
+
from arelle.ModelXbrl import ModelXbrl
|
|
18
|
+
from arelle.ValidateXbrl import ValidateXbrl
|
|
17
19
|
from arelle.Version import authorLabel, copyrightLabel
|
|
18
20
|
from .ValidationPluginExtension import ValidationPluginExtension
|
|
19
21
|
from .rules import br_kvk, fg_nl, fr_kvk, fr_nl, nl_kvk
|
|
@@ -46,6 +48,16 @@ def validateXbrlFinally(*args: Any, **kwargs: Any) -> None:
|
|
|
46
48
|
return validationPlugin.validateXbrlFinally(*args, **kwargs)
|
|
47
49
|
|
|
48
50
|
|
|
51
|
+
def modelTestcaseVariationReportPackageIxdsOptions(
|
|
52
|
+
val: ValidateXbrl,
|
|
53
|
+
rptPkgIxdsOptions: dict[str, bool],
|
|
54
|
+
*args: Any,
|
|
55
|
+
**kwargs: Any,
|
|
56
|
+
) -> None:
|
|
57
|
+
rptPkgIxdsOptions["lookOutsideReportsDirectory"] = True
|
|
58
|
+
rptPkgIxdsOptions["combineIntoSingleIxds"] = True
|
|
59
|
+
|
|
60
|
+
|
|
49
61
|
__pluginInfo__ = {
|
|
50
62
|
"name": PLUGIN_NAME,
|
|
51
63
|
"version": "0.0.1",
|
|
@@ -53,8 +65,10 @@ __pluginInfo__ = {
|
|
|
53
65
|
"license": "Apache-2",
|
|
54
66
|
"author": authorLabel,
|
|
55
67
|
"copyright": copyrightLabel,
|
|
68
|
+
"import": ("inlineXbrlDocumentSet",), # import dependent modules
|
|
56
69
|
"DisclosureSystem.Types": disclosureSystemTypes,
|
|
57
70
|
"DisclosureSystem.ConfigURL": disclosureSystemConfigURL,
|
|
58
71
|
"ModelXbrl.LoadComplete": modelXbrlLoadComplete,
|
|
59
72
|
"Validate.XBRL.Finally": validateXbrlFinally,
|
|
73
|
+
"ModelTestcaseVariation.ReportPackageIxdsOptions": modelTestcaseVariationReportPackageIxdsOptions,
|
|
60
74
|
}
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
xsi:noNamespaceSchemaLocation="../../../../config/disclosuresystems.xsd">
|
|
5
5
|
<!-- see arelle/config/disclosuresystems.xml for full comments -->
|
|
6
6
|
<DisclosureSystem
|
|
7
|
-
names="INLINE-
|
|
8
|
-
description="Checks for
|
|
7
|
+
names="NL-INLINE-2024|nl-inline-2024|kvk-inline-2024-preview"
|
|
8
|
+
description="Checks for NL INLINE 2024"
|
|
9
9
|
validationType="NL"
|
|
10
10
|
/>
|
|
11
11
|
<DisclosureSystem
|
|
@@ -4,6 +4,8 @@ See COPYRIGHT.md for copyright information.
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
6
|
from datetime import date, timedelta
|
|
7
|
+
|
|
8
|
+
from arelle.XmlValidateConst import VALID
|
|
7
9
|
from dateutil import relativedelta
|
|
8
10
|
from collections.abc import Iterable
|
|
9
11
|
from typing import Any, cast, TYPE_CHECKING
|
|
@@ -18,9 +20,7 @@ from arelle.typing import TypeGetText
|
|
|
18
20
|
from arelle.utils.PluginHooks import ValidationHook
|
|
19
21
|
from arelle.utils.validate.Decorator import validation
|
|
20
22
|
from arelle.utils.validate.Validation import Validation
|
|
21
|
-
from ..DisclosureSystems import
|
|
22
|
-
DISCLOSURE_SYSTEM_INLINE_NT19
|
|
23
|
-
)
|
|
23
|
+
from ..DisclosureSystems import DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
24
24
|
from ..PluginValidationDataExtension import PluginValidationDataExtension, XBRLI_IDENTIFIER_PATTERN, XBRLI_IDENTIFIER_SCHEMA
|
|
25
25
|
|
|
26
26
|
if TYPE_CHECKING:
|
|
@@ -42,7 +42,7 @@ def _getReportingPeriodDateValue(modelXbrl: ModelXbrl, qname: QName) -> date | N
|
|
|
42
42
|
@validation(
|
|
43
43
|
hook=ValidationHook.XBRL_FINALLY,
|
|
44
44
|
disclosureSystems=[
|
|
45
|
-
|
|
45
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
46
46
|
],
|
|
47
47
|
)
|
|
48
48
|
def rule_nl_kvk_3_1_1_1(
|
|
@@ -70,7 +70,7 @@ def rule_nl_kvk_3_1_1_1(
|
|
|
70
70
|
@validation(
|
|
71
71
|
hook=ValidationHook.XBRL_FINALLY,
|
|
72
72
|
disclosureSystems=[
|
|
73
|
-
|
|
73
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
74
74
|
],
|
|
75
75
|
)
|
|
76
76
|
def rule_nl_kvk_3_1_1_2(
|
|
@@ -97,7 +97,7 @@ def rule_nl_kvk_3_1_1_2(
|
|
|
97
97
|
@validation(
|
|
98
98
|
hook=ValidationHook.XBRL_FINALLY,
|
|
99
99
|
disclosureSystems=[
|
|
100
|
-
|
|
100
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
101
101
|
],
|
|
102
102
|
)
|
|
103
103
|
def rule_nl_kvk_3_1_2_1(
|
|
@@ -109,10 +109,10 @@ def rule_nl_kvk_3_1_2_1(
|
|
|
109
109
|
"""
|
|
110
110
|
NL-KVK.3.1.2.1: xbrli:startDate, xbrli:endDate, xbrli:instant formatted as yyyy-mm-dd without time.
|
|
111
111
|
"""
|
|
112
|
-
contextsWithPeriodTime = pluginData.
|
|
112
|
+
contextsWithPeriodTime = pluginData.getContextsWithPeriodTime(val.modelXbrl)
|
|
113
113
|
if len(contextsWithPeriodTime) !=0:
|
|
114
114
|
yield Validation.error(
|
|
115
|
-
codes='NL.NL-KVK-3.1.2.1',
|
|
115
|
+
codes='NL.NL-KVK-3.1.2.1.periodWithTimeContent',
|
|
116
116
|
msg=_('xbrli:startDate, xbrli:endDate, xbrli:instant must be formatted as yyyy-mm-dd without time'),
|
|
117
117
|
modelObject = contextsWithPeriodTime
|
|
118
118
|
)
|
|
@@ -121,7 +121,7 @@ def rule_nl_kvk_3_1_2_1(
|
|
|
121
121
|
@validation(
|
|
122
122
|
hook=ValidationHook.XBRL_FINALLY,
|
|
123
123
|
disclosureSystems=[
|
|
124
|
-
|
|
124
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
125
125
|
],
|
|
126
126
|
)
|
|
127
127
|
def rule_nl_kvk_3_1_2_2(
|
|
@@ -133,10 +133,139 @@ def rule_nl_kvk_3_1_2_2(
|
|
|
133
133
|
"""
|
|
134
134
|
NL-KVK.3.1.2.1: xbrli:startDate, xbrli:endDate, xbrli:instant format to be formatted as yyyy-mm-dd without time zone.
|
|
135
135
|
"""
|
|
136
|
-
contextsWithPeriodTimeZone = pluginData.
|
|
137
|
-
if len(
|
|
136
|
+
contextsWithPeriodTimeZone = pluginData.getContextsWithPeriodTimeZone(val.modelXbrl)
|
|
137
|
+
if len(contextsWithPeriodTimeZone) !=0:
|
|
138
138
|
yield Validation.error(
|
|
139
|
-
codes='NL.NL-KVK-3.1.2.2',
|
|
139
|
+
codes='NL.NL-KVK-3.1.2.2.periodWithTimeZone',
|
|
140
140
|
msg=_('xbrli:startDate, xbrli:endDate, xbrli:instant must be formatted as yyyy-mm-dd without time zone'),
|
|
141
141
|
modelObject = contextsWithPeriodTimeZone
|
|
142
142
|
)
|
|
143
|
+
|
|
144
|
+
|
|
145
|
+
@validation(
|
|
146
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
147
|
+
disclosureSystems=[
|
|
148
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
149
|
+
],
|
|
150
|
+
)
|
|
151
|
+
def rule_nl_kvk_3_1_3_1 (
|
|
152
|
+
pluginData: PluginValidationDataExtension,
|
|
153
|
+
val: ValidateXbrl,
|
|
154
|
+
*args: Any,
|
|
155
|
+
**kwargs: Any,
|
|
156
|
+
) -> Iterable[Validation]:
|
|
157
|
+
"""
|
|
158
|
+
NL-KVK.3.1.3.1: xbrli:segment must not be used in contexts.
|
|
159
|
+
"""
|
|
160
|
+
contextsWithSegments = pluginData.getContextsWithSegments(val.modelXbrl)
|
|
161
|
+
if len(contextsWithSegments) !=0:
|
|
162
|
+
yield Validation.error(
|
|
163
|
+
codes='NL.NL-KVK-3.1.3.1.segmentUsed',
|
|
164
|
+
msg=_('xbrli:segment must not be used in contexts.'),
|
|
165
|
+
modelObject = contextsWithSegments
|
|
166
|
+
)
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
@validation(
|
|
170
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
171
|
+
disclosureSystems=[
|
|
172
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
173
|
+
],
|
|
174
|
+
)
|
|
175
|
+
def rule_nl_kvk_3_1_3_2 (
|
|
176
|
+
pluginData: PluginValidationDataExtension,
|
|
177
|
+
val: ValidateXbrl,
|
|
178
|
+
*args: Any,
|
|
179
|
+
**kwargs: Any,
|
|
180
|
+
) -> Iterable[Validation]:
|
|
181
|
+
"""
|
|
182
|
+
NL-KVK.3.1.3.2: xbrli:scenario must only contain content defined in XBRL Dimensions specification.
|
|
183
|
+
"""
|
|
184
|
+
contextsWithImproperContent = pluginData.getContextsWithImproperContent(val.modelXbrl)
|
|
185
|
+
if len(contextsWithImproperContent) !=0:
|
|
186
|
+
yield Validation.error(
|
|
187
|
+
codes='NL.NL-KVK-3.1.3.2.scenarioContainsNotAllowedContent',
|
|
188
|
+
msg=_('xbrli:scenario must only contain content defined in XBRL Dimensions specification.'),
|
|
189
|
+
modelObject = contextsWithImproperContent
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
@validation(
|
|
194
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
195
|
+
disclosureSystems=[
|
|
196
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
197
|
+
],
|
|
198
|
+
)
|
|
199
|
+
def rule_nl_kvk_3_1_4_1 (
|
|
200
|
+
pluginData: PluginValidationDataExtension,
|
|
201
|
+
val: ValidateXbrl,
|
|
202
|
+
*args: Any,
|
|
203
|
+
**kwargs: Any,
|
|
204
|
+
) -> Iterable[Validation]:
|
|
205
|
+
"""
|
|
206
|
+
NL-KVK.3.1.4.1: All entity identifiers and schemes must have identical content.
|
|
207
|
+
"""
|
|
208
|
+
entityIdentifierValues = pluginData.entityIdentifiersInDocument(val.modelXbrl)
|
|
209
|
+
if len(entityIdentifierValues) >1:
|
|
210
|
+
yield Validation.error(
|
|
211
|
+
codes='NL.NL-KVK-3.1.4.1',
|
|
212
|
+
msg=_('All entity identifiers and schemes must have identical content.'),
|
|
213
|
+
modelObject = entityIdentifierValues
|
|
214
|
+
)
|
|
215
|
+
|
|
216
|
+
|
|
217
|
+
|
|
218
|
+
@validation(
|
|
219
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
220
|
+
disclosureSystems=[
|
|
221
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
222
|
+
],
|
|
223
|
+
)
|
|
224
|
+
def rule_nl_kvk_3_1_4_2 (
|
|
225
|
+
pluginData: PluginValidationDataExtension,
|
|
226
|
+
val: ValidateXbrl,
|
|
227
|
+
*args: Any,
|
|
228
|
+
**kwargs: Any,
|
|
229
|
+
) -> Iterable[Validation]:
|
|
230
|
+
"""
|
|
231
|
+
NL-KVK.3.1.4.2: xbrli:identifier value must be identical to bw2-titel9:ChamberOfCommerceRegistrationNumber fact value.
|
|
232
|
+
"""
|
|
233
|
+
registrationNumberFacts = val.modelXbrl.factsByQname.get(pluginData.chamberOfCommerceRegistrationNumberQn, set())
|
|
234
|
+
if len(registrationNumberFacts) > 0:
|
|
235
|
+
regFact = next(iter(registrationNumberFacts))
|
|
236
|
+
if regFact.xValid >= VALID and regFact.xValue != regFact.context.entityIdentifier[1]:
|
|
237
|
+
yield Validation.error(
|
|
238
|
+
codes='NL-KVK.3.1.4.2',
|
|
239
|
+
msg=_("xbrli:identifier value must be identical to bw2-titel9:ChamberOfCommerceRegistrationNumber fact value.").format(
|
|
240
|
+
regFact.xValue,
|
|
241
|
+
regFact.context.entityIdentifier[1]
|
|
242
|
+
),
|
|
243
|
+
modelObject=regFact
|
|
244
|
+
)
|
|
245
|
+
|
|
246
|
+
|
|
247
|
+
@validation(
|
|
248
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
249
|
+
disclosureSystems=[
|
|
250
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
251
|
+
],
|
|
252
|
+
)
|
|
253
|
+
def rule_nl_kvk_3_2_1_1 (
|
|
254
|
+
pluginData: PluginValidationDataExtension,
|
|
255
|
+
val: ValidateXbrl,
|
|
256
|
+
*args: Any,
|
|
257
|
+
**kwargs: Any,
|
|
258
|
+
) -> Iterable[Validation]:
|
|
259
|
+
"""
|
|
260
|
+
NL-KVK.3.2.1.1: precision should not be used on numeric facts.
|
|
261
|
+
"""
|
|
262
|
+
factsWithPrecision = []
|
|
263
|
+
for fact in val.modelXbrl.facts:
|
|
264
|
+
if fact is not None and fact.isNumeric and fact.precision:
|
|
265
|
+
factsWithPrecision.append(fact)
|
|
266
|
+
if len(factsWithPrecision) >0:
|
|
267
|
+
yield Validation.error(
|
|
268
|
+
codes='NL.NL-KVK-3.2.1.1.precisionAttributeUsed',
|
|
269
|
+
msg=_('Precision should not be used on numeric facts.'),
|
|
270
|
+
modelObject = factsWithPrecision
|
|
271
|
+
)
|
|
@@ -20,8 +20,8 @@ arelle/DialogPluginManager.py,sha256=cr7GWNuYttg7H0pM5vaCPuxgDVgtZzR6ZamX957_1w8
|
|
|
20
20
|
arelle/DialogRssWatch.py,sha256=mjc4pqyFDISY4tQtME0uSRQ3NlcWnNsOsMu9Zj8tTd0,13789
|
|
21
21
|
arelle/DialogURL.py,sha256=JH88OPFf588E8RW90uMaieok7A_4kOAURQ8kHWVhnao,4354
|
|
22
22
|
arelle/DialogUserPassword.py,sha256=kWPlCCihhwvsykDjanME9qBDtv6cxZlsrJyoMqiRep4,13769
|
|
23
|
-
arelle/DisclosureSystem.py,sha256=
|
|
24
|
-
arelle/FileSource.py,sha256=
|
|
23
|
+
arelle/DisclosureSystem.py,sha256=g3XXMjuyKJk2eoqvHGqoyIs2bMfcODwOeISDRCcY9gc,24749
|
|
24
|
+
arelle/FileSource.py,sha256=FXqXCd7FZ7p7DH4yAYDHYYZ_43P8H3nreT8LJpoWu1M,46643
|
|
25
25
|
arelle/FunctionCustom.py,sha256=d1FsBG14eykvpLpgaXpN8IdxnlG54dfGcsXPYfdpA9Q,5880
|
|
26
26
|
arelle/FunctionFn.py,sha256=BcZKah1rpfquSVPwjvknM1pgFXOnK4Hr1e_ArG_mcJY,38058
|
|
27
27
|
arelle/FunctionIxt.py,sha256=8JELGh1l4o8Ul4_G7JgwX8Ebch9it2DblI6OkfL33Cw,80082
|
|
@@ -34,7 +34,7 @@ arelle/InstanceAspectsEvaluator.py,sha256=TePNIs_m0vCIbN5N4PXEyJm529T2WBFi2zmv-7
|
|
|
34
34
|
arelle/LeiUtil.py,sha256=tSPrbQrXEeH5pXgGA_6MAdgMZp20NaW5izJglIXyEQk,5095
|
|
35
35
|
arelle/LocalViewer.py,sha256=WVrfek_bLeFFxgWITi1EQb6xCQN8O9Ks-ZL16vRncSk,3080
|
|
36
36
|
arelle/Locale.py,sha256=aKC1Uaen_dbPGb92kZa_yUoo7On_QtWlvr5H_F9BNXg,33008
|
|
37
|
-
arelle/ModelDocument.py,sha256=
|
|
37
|
+
arelle/ModelDocument.py,sha256=Sq6umEdn-aNHjxIpEsXTT7A4V25nGY0JiylSnhr9zSI,130749
|
|
38
38
|
arelle/ModelDtsObject.py,sha256=JXPRiFOsbB5tZjEDc6rECuUtXMbF4oxfnwrQvKo-i5U,88656
|
|
39
39
|
arelle/ModelFormulaObject.py,sha256=beUSxEFm7aoa9iimmvXLYCHdizAtOmhDqk6wmvbc9Zg,122537
|
|
40
40
|
arelle/ModelInstanceObject.py,sha256=pAcwQBr85_fQCGT18JSOGGwzAZ3J-oWIU9sj9UUXLOk,73928
|
|
@@ -65,7 +65,7 @@ arelle/UITkTable.py,sha256=N83cXi5c0lLZLsDbwSKcPrlYoUoGsNavGN5YRx6d9XY,39810
|
|
|
65
65
|
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
|
-
arelle/Validate.py,sha256=
|
|
68
|
+
arelle/Validate.py,sha256=_7lDoGtUCyHgWK1Ak375D-kuPBZmDCNfSr_wsTLq10k,55328
|
|
69
69
|
arelle/ValidateDuplicateFacts.py,sha256=074y-VWCOBHoi6iV6wDL_IXBtdz9oeI1uPvjEcC1oDs,21717
|
|
70
70
|
arelle/ValidateFilingText.py,sha256=qBDrS3O9xtvGLn8Qfmjedg4iaClmeDA-ti7KM4JXY0A,54024
|
|
71
71
|
arelle/ValidateInfoset.py,sha256=Rz_XBi5Ha43KpxXYhjLolURcWVx5qmqyjLxw48Yt9Dg,20396
|
|
@@ -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=zRLSwKHPn00qQt28e4Gt4FsbXPxaiSo4UQK7riBk8OU,513
|
|
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
|
|
@@ -314,7 +314,7 @@ arelle/plugin/formulaLoader.py,sha256=_pPZQPAZeNjGj85rvH7QRl4gEjYD7Yhxl1JhuV9wOo
|
|
|
314
314
|
arelle/plugin/formulaSaver.py,sha256=STlKyDA-pVUxZoEW57MSu74RdpyHVTxaHvOZyOt0cyg,31385
|
|
315
315
|
arelle/plugin/formulaXPathChecker.py,sha256=sEEeLHx17XSj8eOgFdzYLBp9ZFk2UUYLOEKtaF_pq34,18795
|
|
316
316
|
arelle/plugin/functionsMath.py,sha256=Z8N7ok3w1aOusCQA9QvqYwQ8W1j80bb-_4lVclBnNQM,9037
|
|
317
|
-
arelle/plugin/inlineXbrlDocumentSet.py,sha256=
|
|
317
|
+
arelle/plugin/inlineXbrlDocumentSet.py,sha256=wdlEg9OLm81E_aOINeDsPVHi03_v-dC7F9HrqmrF9e8,55256
|
|
318
318
|
arelle/plugin/loadFromExcel.py,sha256=galvvaj9jTKMMRUasCSh1SQnCCBzoN_HEpYWv0fmUdM,124407
|
|
319
319
|
arelle/plugin/loadFromOIM.py,sha256=dJHnX56bmuY40f6vRMsQ7pJmIWcB5N_3jmYWGGnZSdM,903
|
|
320
320
|
arelle/plugin/profileCmdLine.py,sha256=uLL0fGshpiwtzyLKAtW0WuXAvcRtZgxQG6swM0e4BHA,2370
|
|
@@ -377,17 +377,17 @@ arelle/plugin/validate/ESEF/resources/config.xml,sha256=t3STU_-QYM7Ay8YwZRPapnoh
|
|
|
377
377
|
arelle/plugin/validate/FERC/__init__.py,sha256=V4fXcFKBsjFFPs9_1NhvDjWpEQCoQM0tRQMS0I1Ua7U,11462
|
|
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
|
-
arelle/plugin/validate/NL/DisclosureSystems.py,sha256=
|
|
381
|
-
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=
|
|
382
|
-
arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=
|
|
383
|
-
arelle/plugin/validate/NL/__init__.py,sha256=
|
|
384
|
-
arelle/plugin/validate/NL/resources/config.xml,sha256=
|
|
380
|
+
arelle/plugin/validate/NL/DisclosureSystems.py,sha256=kTjpxkgwn58wHCbaLRBInirOy-2cpK9MLWEFJ_193y4,180
|
|
381
|
+
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=WuCXeiCYlDWDrQ--lRkTVTTuD_KTemgYsiWMxs6psxM,6259
|
|
382
|
+
arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=8QL0_FL3kT-pMYqZxRI0BTN6ToJeU-wd800y_7fY3wM,15225
|
|
383
|
+
arelle/plugin/validate/NL/__init__.py,sha256=99uMv4ESHwyJqA-Xq_hBvHygm0BQ3NxcmAJnVYUkSgg,3104
|
|
384
|
+
arelle/plugin/validate/NL/resources/config.xml,sha256=i_ns2wHmQYjhkRItevRR8tzfkl31ASfbWlc5t6pDB-w,1117
|
|
385
385
|
arelle/plugin/validate/NL/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
386
386
|
arelle/plugin/validate/NL/rules/br_kvk.py,sha256=0SwKieWzTDm3YMsXPS6zTdgbk7_Z9CzqRkRmCRz1OiQ,15789
|
|
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=sqzHczrr5jLgb5ZHdMWBc2urH_eNb-eNLxU8UnGZyQs,9082
|
|
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
|
|
@@ -707,7 +707,7 @@ arelle/utils/validate/ValidationPlugin.py,sha256=_WeRPXZUTCcSN3FLbFwiAe_2pAUTxZZ
|
|
|
707
707
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
708
708
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
709
709
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
710
|
-
arelle_release-2.37.
|
|
710
|
+
arelle_release-2.37.6.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
711
711
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
712
712
|
tests/integration_tests/download_cache.py,sha256=jVMIVICsZjcVc9DCPPu3fCjF9_cWSS3tqSynhFs3oAM,4097
|
|
713
713
|
tests/integration_tests/integration_test_util.py,sha256=H7mncbv0T9ZeVyrtk9Hohe3k6jgcYykHkt-LGE-Q9aQ,10270
|
|
@@ -734,9 +734,9 @@ tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Tests.cs,sha256=_0T
|
|
|
734
734
|
tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Usings.cs,sha256=0IC7tQ27uAqlt8ZGBrJPK7BPj3kjiodPcHWB3v_JT-o,29
|
|
735
735
|
tests/integration_tests/ui_tests/resources/workiva.zip,sha256=QtZzi1VcKkHhVa8J-I1wVpQFy-p6tsV95Z0HmI6XbXc,223544
|
|
736
736
|
tests/integration_tests/validation/README.md,sha256=Fo3TpMmOlo4llngPKtdfnemS0TeI3ou-ceX8f4u1K-Y,2907
|
|
737
|
-
tests/integration_tests/validation/assets.py,sha256=
|
|
737
|
+
tests/integration_tests/validation/assets.py,sha256=Ag9qPYrodcC-Ly6aygqapV0vG2Cbn_Tigg4v4F9xX4U,8295
|
|
738
738
|
tests/integration_tests/validation/conformance_suite_config.py,sha256=fLur7EOoOdu6kKlkZ3tY3Sjn9G-gpB4OGbOKZkqa-fA,10383
|
|
739
|
-
tests/integration_tests/validation/conformance_suite_configs.py,sha256=
|
|
739
|
+
tests/integration_tests/validation/conformance_suite_configs.py,sha256=IbrL-45QTsUSI5Usz-STqtRZsz8pLu83KXqx4aDL-1w,7327
|
|
740
740
|
tests/integration_tests/validation/conftest.py,sha256=rVfmNX9y0JZ1VfoEepeYyIz-ZxzEZ1IJlmbcQSuxgUo,816
|
|
741
741
|
tests/integration_tests/validation/discover_tests.py,sha256=EJ0AlxWqzFBTDfncE2dv-GsBNmO8lynNOJAn0uFgXgo,4649
|
|
742
742
|
tests/integration_tests/validation/download_assets.py,sha256=muHklbrvYEbxqqAM8mU-8FpeemP0BLTWxD11xTYiCMc,7850
|
|
@@ -762,6 +762,7 @@ tests/integration_tests/validation/conformance_suite_configurations/kvk_nt16.py,
|
|
|
762
762
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt17.py,sha256=lmEZonthFm0YKFmp1dwXtdJ2T7txUeSpL4mbAo8fl4Y,1292
|
|
763
763
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt18.py,sha256=EG2RQVkvFENhzUF3fl3QvDnH7ZPYS1n1Fo8bhfmSczM,1205
|
|
764
764
|
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=CBfDHrQ59S9MLxTSN07bbIz8kAZGtb551RaQhyfbK3I,10279
|
|
765
766
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py,sha256=O_LFVBZPkjxmbrU7_C7VTLtrdoCUx2bYXOXw6_MlRtQ,846
|
|
766
767
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py,sha256=aTN3Ez6lPsZsuypHZP84DneOtYxUZSjUiGypHy6ofHQ,846
|
|
767
768
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py,sha256=sqHLjrHc95dTu0guTgKkphaKM1zNfKGnN4GKkZDLzeU,845
|
|
@@ -1154,7 +1155,7 @@ tests/resources/conformance_suites/nl_nt16/fr_nl/1-02-invalid.xbrl,sha256=Flu8pS
|
|
|
1154
1155
|
tests/resources/conformance_suites/nl_nt16/fr_nl/1-02-testcase.xml,sha256=TINl7JVLw6r6SkjgBagEH1MCFNaIBrnpl--IAoB4OMw,924
|
|
1155
1156
|
tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-invalid-doctype.xbrl,sha256=3Z3i7fLOjOFYj7tuX1w8lueek6bpQhj101Ephb6IVgE,129
|
|
1156
1157
|
tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-testcase.xml,sha256=kmlnCY0ZtdEVrpKyU3oSC_6RM1kKlOoG81sxtwPECwY,926
|
|
1157
|
-
tests/resources/conformance_suites/nl_nt16/fr_nl/1-04-invalid.xbrl,sha256=
|
|
1158
|
+
tests/resources/conformance_suites/nl_nt16/fr_nl/1-04-invalid.xbrl,sha256=9tRI4DoSXd7LHMLWLFnerIyOpxONPSsd-_0FsVozRlQ,1297
|
|
1158
1159
|
tests/resources/conformance_suites/nl_nt16/fr_nl/1-04-testcase.xml,sha256=Nkgds7HDnz7y1b6padzxfbMAMMKp2rNQhrfvlH_IaEs,889
|
|
1159
1160
|
tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-invalid-encoding.xbrl,sha256=dmjvwRnAM3ZiMlF0sDWAxa_Qb19sNtQ369kYEpDG7wU,194
|
|
1160
1161
|
tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-testcase.xml,sha256=dJi2elHTSN2wL3oTnFR3MbhWEmkl00EichkpP4wQLdg,936
|
|
@@ -1252,7 +1253,7 @@ tests/resources/conformance_suites/nl_nt17/fr_nl/1-02-invalid.xbrl,sha256=Flu8pS
|
|
|
1252
1253
|
tests/resources/conformance_suites/nl_nt17/fr_nl/1-02-testcase.xml,sha256=TINl7JVLw6r6SkjgBagEH1MCFNaIBrnpl--IAoB4OMw,924
|
|
1253
1254
|
tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-invalid-doctype.xbrl,sha256=3Z3i7fLOjOFYj7tuX1w8lueek6bpQhj101Ephb6IVgE,129
|
|
1254
1255
|
tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-testcase.xml,sha256=kmlnCY0ZtdEVrpKyU3oSC_6RM1kKlOoG81sxtwPECwY,926
|
|
1255
|
-
tests/resources/conformance_suites/nl_nt17/fr_nl/1-04-invalid.xbrl,sha256=
|
|
1256
|
+
tests/resources/conformance_suites/nl_nt17/fr_nl/1-04-invalid.xbrl,sha256=9tRI4DoSXd7LHMLWLFnerIyOpxONPSsd-_0FsVozRlQ,1297
|
|
1256
1257
|
tests/resources/conformance_suites/nl_nt17/fr_nl/1-04-testcase.xml,sha256=Nkgds7HDnz7y1b6padzxfbMAMMKp2rNQhrfvlH_IaEs,889
|
|
1257
1258
|
tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-invalid-encoding.xbrl,sha256=dmjvwRnAM3ZiMlF0sDWAxa_Qb19sNtQ369kYEpDG7wU,194
|
|
1258
1259
|
tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-testcase.xml,sha256=dJi2elHTSN2wL3oTnFR3MbhWEmkl00EichkpP4wQLdg,936
|
|
@@ -1350,7 +1351,7 @@ tests/resources/conformance_suites/nl_nt18/fr_nl/1-02-invalid.xbrl,sha256=Flu8pS
|
|
|
1350
1351
|
tests/resources/conformance_suites/nl_nt18/fr_nl/1-02-testcase.xml,sha256=TINl7JVLw6r6SkjgBagEH1MCFNaIBrnpl--IAoB4OMw,924
|
|
1351
1352
|
tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-invalid-doctype.xbrl,sha256=3Z3i7fLOjOFYj7tuX1w8lueek6bpQhj101Ephb6IVgE,129
|
|
1352
1353
|
tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-testcase.xml,sha256=kmlnCY0ZtdEVrpKyU3oSC_6RM1kKlOoG81sxtwPECwY,926
|
|
1353
|
-
tests/resources/conformance_suites/nl_nt18/fr_nl/1-04-invalid.xbrl,sha256=
|
|
1354
|
+
tests/resources/conformance_suites/nl_nt18/fr_nl/1-04-invalid.xbrl,sha256=9tRI4DoSXd7LHMLWLFnerIyOpxONPSsd-_0FsVozRlQ,1297
|
|
1354
1355
|
tests/resources/conformance_suites/nl_nt18/fr_nl/1-04-testcase.xml,sha256=Nkgds7HDnz7y1b6padzxfbMAMMKp2rNQhrfvlH_IaEs,889
|
|
1355
1356
|
tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-invalid-encoding.xbrl,sha256=dmjvwRnAM3ZiMlF0sDWAxa_Qb19sNtQ369kYEpDG7wU,194
|
|
1356
1357
|
tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-testcase.xml,sha256=dJi2elHTSN2wL3oTnFR3MbhWEmkl00EichkpP4wQLdg,936
|
|
@@ -1448,7 +1449,7 @@ tests/resources/conformance_suites/nl_nt19/fr_nl/1-02-invalid.xbrl,sha256=Flu8pS
|
|
|
1448
1449
|
tests/resources/conformance_suites/nl_nt19/fr_nl/1-02-testcase.xml,sha256=TINl7JVLw6r6SkjgBagEH1MCFNaIBrnpl--IAoB4OMw,924
|
|
1449
1450
|
tests/resources/conformance_suites/nl_nt19/fr_nl/1-03-invalid-doctype.xbrl,sha256=3Z3i7fLOjOFYj7tuX1w8lueek6bpQhj101Ephb6IVgE,129
|
|
1450
1451
|
tests/resources/conformance_suites/nl_nt19/fr_nl/1-03-testcase.xml,sha256=kmlnCY0ZtdEVrpKyU3oSC_6RM1kKlOoG81sxtwPECwY,926
|
|
1451
|
-
tests/resources/conformance_suites/nl_nt19/fr_nl/1-04-invalid.xbrl,sha256=
|
|
1452
|
+
tests/resources/conformance_suites/nl_nt19/fr_nl/1-04-invalid.xbrl,sha256=9tRI4DoSXd7LHMLWLFnerIyOpxONPSsd-_0FsVozRlQ,1297
|
|
1452
1453
|
tests/resources/conformance_suites/nl_nt19/fr_nl/1-04-testcase.xml,sha256=Nkgds7HDnz7y1b6padzxfbMAMMKp2rNQhrfvlH_IaEs,889
|
|
1453
1454
|
tests/resources/conformance_suites/nl_nt19/fr_nl/1-05-invalid-encoding.xbrl,sha256=dmjvwRnAM3ZiMlF0sDWAxa_Qb19sNtQ369kYEpDG7wU,194
|
|
1454
1455
|
tests/resources/conformance_suites/nl_nt19/fr_nl/1-05-testcase.xml,sha256=dJi2elHTSN2wL3oTnFR3MbhWEmkl00EichkpP4wQLdg,936
|
|
@@ -1555,8 +1556,8 @@ tests/unit_tests/arelle/oim/test_load.py,sha256=NxiUauQwJVfWAHbbpsMHGSU2d3Br8Pki
|
|
|
1555
1556
|
tests/unit_tests/arelle/plugin/test_plugin_imports.py,sha256=bdhIs9frAnFsdGU113yBk09_jis-z43dwUItMFYuSYM,1064
|
|
1556
1557
|
tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py,sha256=XHABmejQt7RlZ0udh7v42f2Xb2STGk_fSaIaJ9i2xo0,878
|
|
1557
1558
|
tests/unit_tests/arelle/utils/validate/test_decorator.py,sha256=ZS8FqIY1g-2FCbjF4UYm609dwViax6qBMRJSi0vfuhY,2482
|
|
1558
|
-
arelle_release-2.37.
|
|
1559
|
-
arelle_release-2.37.
|
|
1560
|
-
arelle_release-2.37.
|
|
1561
|
-
arelle_release-2.37.
|
|
1562
|
-
arelle_release-2.37.
|
|
1559
|
+
arelle_release-2.37.6.dist-info/METADATA,sha256=JUHetf5mfMb0WG0PzSwUmF2m112VfqSngeCEtAjhXvA,9064
|
|
1560
|
+
arelle_release-2.37.6.dist-info/WHEEL,sha256=0CuiUZ_p9E4cD6NyLD6UG80LBXYyiSYZOKDm5lp32xk,91
|
|
1561
|
+
arelle_release-2.37.6.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
1562
|
+
arelle_release-2.37.6.dist-info/top_level.txt,sha256=ZYmYGmhW5Jvo3vJ4iXBZPUI29LvYhntom04w90esJvU,13
|
|
1563
|
+
arelle_release-2.37.6.dist-info/RECORD,,
|
|
@@ -125,4 +125,47 @@ NL_PACKAGES: dict[str, list[ConformanceSuiteAssetConfig]] = {
|
|
|
125
125
|
),
|
|
126
126
|
NL_BASE,
|
|
127
127
|
],
|
|
128
|
+
'NL-INLINE-2024': [
|
|
129
|
+
ConformanceSuiteAssetConfig.public_taxonomy_package(
|
|
130
|
+
Path('kvk-2024_taxonomie.zip'),
|
|
131
|
+
public_download_url='https://www.sbr-nl.nl/sites/default/files/2025-01/kvk-2024_taxonomie.zip',
|
|
132
|
+
),
|
|
133
|
+
ConformanceSuiteAssetConfig.public_taxonomy_package(
|
|
134
|
+
Path('rj-2024_taxonomie.zip'),
|
|
135
|
+
public_download_url='https://www.sbr-nl.nl/sites/default/files/2025-01/rj-2024_taxonomie.zip',
|
|
136
|
+
),
|
|
137
|
+
ConformanceSuiteAssetConfig.public_taxonomy_package(
|
|
138
|
+
Path('bw2-titel9_taxonomie.zip'),
|
|
139
|
+
public_download_url='https://www.sbr-nl.nl/sites/default/files/2025-01/bw2-titel9_taxonomie.zip',
|
|
140
|
+
),
|
|
141
|
+
ConformanceSuiteAssetConfig.public_taxonomy_package(
|
|
142
|
+
Path('ncgc-2022_taxonomie.zip'),
|
|
143
|
+
public_download_url='https://www.sbr-nl.nl/sites/default/files/2025-01/ncgc-2022_taxonomie.zip',
|
|
144
|
+
),
|
|
145
|
+
ConformanceSuiteAssetConfig.public_taxonomy_package(
|
|
146
|
+
Path('ifrs-2024_taxonomie.zip'),
|
|
147
|
+
public_download_url='https://www.sbr-nl.nl/sites/default/files/2025-01/ifrs-2024_taxonomie.zip',
|
|
148
|
+
),
|
|
149
|
+
ConformanceSuiteAssetConfig.public_taxonomy_package(
|
|
150
|
+
Path('wnt-2024_taxonomie.zip'),
|
|
151
|
+
public_download_url='https://www.sbr-nl.nl/sites/default/files/2025-01/wnt-2024_taxonomie.zip',
|
|
152
|
+
),
|
|
153
|
+
ConformanceSuiteAssetConfig.public_taxonomy_package(
|
|
154
|
+
Path('IFRSAT-2024-03-27_29.08.24.zip'),
|
|
155
|
+
public_download_url='https://www.ifrs.org/content/dam/ifrs/standards/taxonomy/ifrs-taxonomies/IFRSAT-2024-03-27_29.08.24.zip',
|
|
156
|
+
),
|
|
157
|
+
ConformanceSuiteAssetConfig.public_taxonomy_package(
|
|
158
|
+
Path('KVK_taxonomie_2024_draft.zip'),
|
|
159
|
+
public_download_url='',
|
|
160
|
+
),
|
|
161
|
+
ConformanceSuiteAssetConfig.public_taxonomy_package(
|
|
162
|
+
Path('JenV_taxonomie_2024_draft.zip'),
|
|
163
|
+
public_download_url='',
|
|
164
|
+
),
|
|
165
|
+
ConformanceSuiteAssetConfig.public_taxonomy_package(
|
|
166
|
+
Path('RJ_taxonomie_2024_draft.zip'),
|
|
167
|
+
public_download_url='',
|
|
168
|
+
),
|
|
169
|
+
LEI_2020_07_02,
|
|
170
|
+
],
|
|
128
171
|
}
|
|
@@ -24,6 +24,7 @@ from tests.integration_tests.validation.conformance_suite_configurations.nl_nt16
|
|
|
24
24
|
from tests.integration_tests.validation.conformance_suite_configurations.nl_nt17 import config as 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
|
+
from tests.integration_tests.validation.conformance_suite_configurations.nl_inline_2024 import config as nl_inline_2024
|
|
27
28
|
from tests.integration_tests.validation.conformance_suite_configurations.ros_current import config as ros_current
|
|
28
29
|
from tests.integration_tests.validation.conformance_suite_configurations.xbrl_2_1 import config as xbrl_2_1
|
|
29
30
|
from tests.integration_tests.validation.conformance_suite_configurations.xbrl_calculations_1_1 import config as xbrl_calculations_1_1
|
|
@@ -72,6 +73,7 @@ ALL_CONFORMANCE_SUITE_CONFIGS: tuple[ConformanceSuiteConfig, ...] = (
|
|
|
72
73
|
nl_nt17,
|
|
73
74
|
nl_nt18,
|
|
74
75
|
nl_nt19,
|
|
76
|
+
nl_inline_2024,
|
|
75
77
|
ros_current,
|
|
76
78
|
xbrl_2_1,
|
|
77
79
|
xbrl_calculations_1_1,
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
from pathlib import PurePath, Path
|
|
2
|
+
|
|
3
|
+
from tests.integration_tests.validation.assets import NL_PACKAGES
|
|
4
|
+
from tests.integration_tests.validation.conformance_suite_config import ConformanceSuiteConfig, ConformanceSuiteAssetConfig, AssetSource
|
|
5
|
+
|
|
6
|
+
config = ConformanceSuiteConfig(
|
|
7
|
+
args=[
|
|
8
|
+
'--disclosureSystem', 'NL-INLINE-2024',
|
|
9
|
+
'--baseTaxonomyValidation', 'none',
|
|
10
|
+
],
|
|
11
|
+
assets=[
|
|
12
|
+
ConformanceSuiteAssetConfig.conformance_suite(
|
|
13
|
+
Path('conformance-suite-2024-sbr-domein-handelsregister.zip'),
|
|
14
|
+
entry_point=Path('conformance-suite-2024-sbr-domein-handelsregister/index.xml'),
|
|
15
|
+
public_download_url='https://www.sbr-nl.nl/sites/default/files/2025-04/conformance-suite-2024-sbr-domein-handelsregister.zip',
|
|
16
|
+
source=AssetSource.S3_PUBLIC,
|
|
17
|
+
),
|
|
18
|
+
*NL_PACKAGES['NL-INLINE-2024'],
|
|
19
|
+
],
|
|
20
|
+
expected_failure_ids=frozenset([
|
|
21
|
+
# Not Implemented
|
|
22
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-2-3_1/index.xml:TC3_invalid',
|
|
23
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-2-3_1/index.xml:TC4_invalid',
|
|
24
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-2-4_2/index.xml:TC4_invalid',
|
|
25
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-2-7_1/index.xml:TC4_invalid',
|
|
26
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-2-7_1/index.xml:TC5_invalid',
|
|
27
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-2-7_1/index.xml:TC6_invalid',
|
|
28
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-2-7_1/index.xml:TC7_invalid',
|
|
29
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-3-1_1/index.xml:TC2_invalid',
|
|
30
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-3-1_2/index.xml:TC3_invalid',
|
|
31
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-3-1_3/index.xml:TC2_invalid',
|
|
32
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-1_1/index.xml:TC2_invalid',
|
|
33
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-1_2/index.xml:TC2_invalid',
|
|
34
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-1_3/index.xml:TC2_invalid',
|
|
35
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-1_4/index.xml:TC2_invalid',
|
|
36
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-1_5/index.xml:TC2_invalid',
|
|
37
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-2_1/index.xml:TC2_invalid',
|
|
38
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-4-2_1/index.xml:TC3_invalid',
|
|
39
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_1/index.xml:TC3_invalid',
|
|
40
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_1/index.xml:TC4_invalid',
|
|
41
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_2/index.xml:TC2_invalid',
|
|
42
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_3/index.xml:TC2_invalid',
|
|
43
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_4/index.xml:TC2_invalid',
|
|
44
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_5/index.xml:TC2_invalid',
|
|
45
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_5/index.xml:TC3_invalid',
|
|
46
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-2_1/index.xml:TC3_invalid',
|
|
47
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-2_2/index.xml:TC2_invalid',
|
|
48
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-3_1/index.xml:TC2_invalid',
|
|
49
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-4_1/index.xml:TC2_invalid',
|
|
50
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-6-2_1/index.xml:TC2_invalid',
|
|
51
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-6-3_3/index.xml:TC2_invalid',
|
|
52
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-7-1_1/index.xml:TC2_invalid',
|
|
53
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-1-1_1/index.xml:TC3_invalid',
|
|
54
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-1-1_1/index.xml:TC4_invalid',
|
|
55
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-1-1_1/index.xml:TC5_invalid',
|
|
56
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-1-1_1/index.xml:TC6_invalid',
|
|
57
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-1-1_1/index.xml:TC7_invalid',
|
|
58
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-1-1_2/index.xml:TC2_invalid',
|
|
59
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-1-1_2/index.xml:TC3_invalid',
|
|
60
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-1-2_1/index.xml:TC3_invalid',
|
|
61
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-1-2_2/index.xml:TC2_invalid',
|
|
62
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-2-0_1/index.xml:TC2_invalid',
|
|
63
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-2-0_2/index.xml:TC2_invalid',
|
|
64
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-2-2_2/index.xml:TC2_invalid',
|
|
65
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-2-3_1/index.xml:TC2_invalid',
|
|
66
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-3-1_1/index.xml:TC2_invalid',
|
|
67
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-3-1_1/index.xml:TC3_invalid',
|
|
68
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-3-1_1/index.xml:TC4_invalid',
|
|
69
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-3-2_1/index.xml:TC2_invalid',
|
|
70
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-1_1/index.xml:TC2_invalid',
|
|
71
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-2_1/index.xml:TC2_invalid',
|
|
72
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-2_2/index.xml:TC2_invalid',
|
|
73
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-2_3/index.xml:TC2_invalid',
|
|
74
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-2_4/index.xml:TC2_invalid',
|
|
75
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-3_1/index.xml:TC2_invalid',
|
|
76
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-3_1/index.xml:TC3_invalid',
|
|
77
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-3_2/index.xml:TC2_invalid',
|
|
78
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-3_2/index.xml:TC3_invalid',
|
|
79
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-5_2/index.xml:TC2_invalid',
|
|
80
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-4-5_2/index.xml:TC3_invalid',
|
|
81
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G5-1-3_1/index.xml:TC1_valid',
|
|
82
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G5-1-3_1/index.xml:TC2_invalid',
|
|
83
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G5-1-3_2/index.xml:TC1_valid',
|
|
84
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G5-1-3_2/index.xml:TC2_invalid',
|
|
85
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/G6-1-1_1/index.xml:TC2_invalid',
|
|
86
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_II_Par_1/index.xml:TC3_invalid',
|
|
87
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_III_Par_1/index.xml:TC2_invalid',
|
|
88
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_III_Par_1/index.xml:TC3_invalid',
|
|
89
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_11_G4-2-2_1/index.xml:TC2_invalid',
|
|
90
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_11_G4-2-2_1/index.xml:TC3_invalid',
|
|
91
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_12_G3-2-4_1/index.xml:TC4_invalid',
|
|
92
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_14_G3-5-1_1/index.xml:TC2_invalid',
|
|
93
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_1_G3-1-4_1/index.xml:TC2_invalid',
|
|
94
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_1_G3-1-4_2/index.xml:TC2_invalid',
|
|
95
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_2_G3-1-1_1/index.xml:TC2_invalid',
|
|
96
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_2_G3-1-1_2/index.xml:TC2_invalid',
|
|
97
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_1/index.xml:TC2_invalid',
|
|
98
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_2/index.xml:TC2_invalid',
|
|
99
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC3_invalid',
|
|
100
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC4_invalid',
|
|
101
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC5_invalid',
|
|
102
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_5/index.xml:TC2_invalid',
|
|
103
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_5/index.xml:TC3_invalid',
|
|
104
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_6/index.xml:TC3_invalid',
|
|
105
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_6/index.xml:TC4_invalid',
|
|
106
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_8_G4-4-5/index.xml:TC2_invalid',
|
|
107
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_8_G4-4-5/index.xml:TC3_invalid',
|
|
108
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_9_Par_10/index.xml:TC3_invalid',
|
|
109
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Art_3/index.xml:TC4_invalid',
|
|
110
|
+
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Art_6_a/index.xml:TC2_invalid',
|
|
111
|
+
]),
|
|
112
|
+
info_url='https://www.sbr-nl.nl/sbr-domeinen/handelsregister/uitbreiding-elektronische-deponering-handelsregister',
|
|
113
|
+
name=PurePath(__file__).stem,
|
|
114
|
+
network_or_cache_required=False,
|
|
115
|
+
plugins=frozenset({'validate/NL'}),
|
|
116
|
+
shards=8,
|
|
117
|
+
test_case_result_options='match-any',
|
|
118
|
+
)
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE xbrl [
|
|
3
|
+
<!ENTITY reg "®">
|
|
4
|
+
<!ENTITY plus "+">
|
|
5
|
+
]>
|
|
1
6
|
<xbrl xmlns="http://www.xbrl.org/2003/instance" title="Test®"> <!-- CAUSE: disallowed named reference, in attribute -->
|
|
2
7
|
<!-- и й --> <!-- CAUSE: disallowed decimal numeric references, in comment -->
|
|
3
8
|
<!-- � ⃐ --> <!-- CAUSE: disallowed hexadecimal numeric references, in comment -->
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE xbrl [
|
|
3
|
+
<!ENTITY reg "®">
|
|
4
|
+
<!ENTITY plus "+">
|
|
5
|
+
]>
|
|
1
6
|
<xbrl xmlns="http://www.xbrl.org/2003/instance" title="Test®"> <!-- CAUSE: disallowed named reference, in attribute -->
|
|
2
7
|
<!-- и й --> <!-- CAUSE: disallowed decimal numeric references, in comment -->
|
|
3
8
|
<!-- � ⃐ --> <!-- CAUSE: disallowed hexadecimal numeric references, in comment -->
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE xbrl [
|
|
3
|
+
<!ENTITY reg "®">
|
|
4
|
+
<!ENTITY plus "+">
|
|
5
|
+
]>
|
|
1
6
|
<xbrl xmlns="http://www.xbrl.org/2003/instance" title="Test®"> <!-- CAUSE: disallowed named reference, in attribute -->
|
|
2
7
|
<!-- и й --> <!-- CAUSE: disallowed decimal numeric references, in comment -->
|
|
3
8
|
<!-- � ⃐ --> <!-- CAUSE: disallowed hexadecimal numeric references, in comment -->
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE xbrl [
|
|
3
|
+
<!ENTITY reg "®">
|
|
4
|
+
<!ENTITY plus "+">
|
|
5
|
+
]>
|
|
1
6
|
<xbrl xmlns="http://www.xbrl.org/2003/instance" title="Test®"> <!-- CAUSE: disallowed named reference, in attribute -->
|
|
2
7
|
<!-- и й --> <!-- CAUSE: disallowed decimal numeric references, in comment -->
|
|
3
8
|
<!-- � ⃐ --> <!-- CAUSE: disallowed hexadecimal numeric references, in comment -->
|
|
File without changes
|
|
File without changes
|
|
File without changes
|