arelle-release 2.37.23__py3-none-any.whl → 2.37.25__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of arelle-release might be problematic. Click here for more details.
- arelle/Updater.py +7 -3
- arelle/XbrlConst.py +21 -0
- arelle/_version.py +2 -2
- arelle/plugin/validate/NL/LinkbaseType.py +17 -0
- arelle/plugin/validate/NL/PluginValidationDataExtension.py +27 -0
- arelle/plugin/validate/NL/rules/nl_kvk.py +209 -10
- {arelle_release-2.37.23.dist-info → arelle_release-2.37.25.dist-info}/METADATA +1 -1
- {arelle_release-2.37.23.dist-info → arelle_release-2.37.25.dist-info}/RECORD +17 -17
- tests/integration_tests/validation/conformance_suite_configurations/efm_current.py +2 -2
- tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py +27 -8
- tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024_gaap_other.py +10 -0
- tests/resources/conformance_suites_timing/efm_current.json +8499 -8583
- tests/unit_tests/arelle/test_updater.py +43 -14
- {arelle_release-2.37.23.dist-info → arelle_release-2.37.25.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.23.dist-info → arelle_release-2.37.25.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.23.dist-info → arelle_release-2.37.25.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.23.dist-info → arelle_release-2.37.25.dist-info}/top_level.txt +0 -0
arelle/Updater.py
CHANGED
|
@@ -17,6 +17,7 @@ from urllib.error import URLError
|
|
|
17
17
|
import regex
|
|
18
18
|
|
|
19
19
|
from arelle import Version
|
|
20
|
+
from arelle.SystemInfo import getSystemInfo
|
|
20
21
|
from arelle.typing import TypeGetText
|
|
21
22
|
|
|
22
23
|
if TYPE_CHECKING:
|
|
@@ -90,7 +91,9 @@ def _getLatestArelleRelease(cntlr: CntlrWinMain) -> ArelleRelease:
|
|
|
90
91
|
|
|
91
92
|
def _getArelleReleaseDownloadUrl(assets: list[dict[str, Any]]) -> str | None:
|
|
92
93
|
if sys.platform == "darwin":
|
|
93
|
-
|
|
94
|
+
if getSystemInfo().get('arch') == 'arm64':
|
|
95
|
+
return _getArelleReleaseDownloadUrlByFileExtension(assets, ".dmg", nameIncludes='-arm64')
|
|
96
|
+
return _getArelleReleaseDownloadUrlByFileExtension(assets, ".dmg", nameIncludes='-x64')
|
|
94
97
|
elif sys.platform == "win32":
|
|
95
98
|
return _getArelleReleaseDownloadUrlByFileExtension(assets, ".exe")
|
|
96
99
|
else:
|
|
@@ -98,12 +101,13 @@ def _getArelleReleaseDownloadUrl(assets: list[dict[str, Any]]) -> str | None:
|
|
|
98
101
|
|
|
99
102
|
|
|
100
103
|
def _getArelleReleaseDownloadUrlByFileExtension(
|
|
101
|
-
assets: list[dict[str, Any]], fileExtension: str
|
|
104
|
+
assets: list[dict[str, Any]], fileExtension: str, nameIncludes: str | None = None,
|
|
102
105
|
) -> str | None:
|
|
103
106
|
for asset in assets:
|
|
104
107
|
downloadUrl = asset.get("browser_download_url")
|
|
105
108
|
if isinstance(downloadUrl, str) and downloadUrl.endswith(fileExtension):
|
|
106
|
-
|
|
109
|
+
if nameIncludes is None or nameIncludes in downloadUrl:
|
|
110
|
+
return downloadUrl
|
|
107
111
|
return None
|
|
108
112
|
|
|
109
113
|
|
arelle/XbrlConst.py
CHANGED
|
@@ -112,6 +112,9 @@ qnXbrldiTypedMember = qname("{http://xbrl.org/2006/xbrldi}xbrldi:typedMember")
|
|
|
112
112
|
xlink = "http://www.w3.org/1999/xlink"
|
|
113
113
|
qnXlinkArcRole = qname("{http://www.w3.org/1999/xlink}xlink:arcrole")
|
|
114
114
|
qnXlinkFrom = qname("{http://www.w3.org/1999/xlink}xlink:from")
|
|
115
|
+
qnXlinkHref = qname("{http://www.w3.org/1999/xlink}xlink:href")
|
|
116
|
+
qnXlinkLabel = qname("{http://www.w3.org/1999/xlink}xlink:label")
|
|
117
|
+
qnXlinkTo = qname("{http://www.w3.org/1999/xlink}xlink:to")
|
|
115
118
|
qnXlinkType = qname("{http://www.w3.org/1999/xlink}xlink:type")
|
|
116
119
|
xl = "http://www.xbrl.org/2003/XLink"
|
|
117
120
|
qnXlExtended = qname("{http://www.xbrl.org/2003/XLink}xl:extended")
|
|
@@ -832,6 +835,24 @@ def isNumericRole(role: str) -> bool:
|
|
|
832
835
|
}
|
|
833
836
|
|
|
834
837
|
|
|
838
|
+
standardDimensionArcroles = frozenset({
|
|
839
|
+
all,
|
|
840
|
+
notAll,
|
|
841
|
+
hypercubeDimension,
|
|
842
|
+
dimensionDomain,
|
|
843
|
+
domainMember,
|
|
844
|
+
dimensionDefault,
|
|
845
|
+
})
|
|
846
|
+
|
|
847
|
+
|
|
848
|
+
standardDefinitionArcroles = frozenset(standardDimensionArcroles | {
|
|
849
|
+
essenceAlias,
|
|
850
|
+
generalSpecial,
|
|
851
|
+
requiresElement,
|
|
852
|
+
similarTuples,
|
|
853
|
+
})
|
|
854
|
+
|
|
855
|
+
|
|
835
856
|
def isStandardArcrole(role: str) -> bool:
|
|
836
857
|
return role in {
|
|
837
858
|
"http://www.w3.org/1999/xlink/properties/linkbase",
|
arelle/_version.py
CHANGED
|
@@ -32,6 +32,12 @@ class LinkbaseType(Enum):
|
|
|
32
32
|
"""
|
|
33
33
|
return LINKBASE_ARC_QN[self]
|
|
34
34
|
|
|
35
|
+
def getArcroles(self) -> frozenset[str]:
|
|
36
|
+
"""
|
|
37
|
+
Returns the standard arcrole URIs associated with this LinkbaseType.
|
|
38
|
+
"""
|
|
39
|
+
return LINKBASE_ARCROLES[self]
|
|
40
|
+
|
|
35
41
|
def getLinkQn(self) -> QName:
|
|
36
42
|
"""
|
|
37
43
|
Returns the qname of the link associated with this LinkbaseType.
|
|
@@ -59,6 +65,17 @@ LINKBASE_ARC_QN = {
|
|
|
59
65
|
LinkbaseType.REFERENCE: XbrlConst.qnLinkReferenceArc,
|
|
60
66
|
}
|
|
61
67
|
|
|
68
|
+
LINKBASE_ARCROLES = {
|
|
69
|
+
LinkbaseType.CALCULATION: frozenset({
|
|
70
|
+
XbrlConst.summationItem,
|
|
71
|
+
XbrlConst.summationItem11,
|
|
72
|
+
}),
|
|
73
|
+
LinkbaseType.DEFINITION: XbrlConst.standardDefinitionArcroles,
|
|
74
|
+
LinkbaseType.LABEL: frozenset({XbrlConst.conceptLabel}),
|
|
75
|
+
LinkbaseType.PRESENTATION: frozenset({XbrlConst.parentChild}),
|
|
76
|
+
LinkbaseType.REFERENCE: frozenset({XbrlConst.conceptReference}),
|
|
77
|
+
}
|
|
78
|
+
|
|
62
79
|
LINKBASE_LINK_QN = {
|
|
63
80
|
LinkbaseType.CALCULATION: XbrlConst.qnLinkCalculationLink,
|
|
64
81
|
LinkbaseType.DEFINITION: XbrlConst.qnLinkDefinitionLink,
|
|
@@ -204,6 +204,8 @@ class LinkbaseData:
|
|
|
204
204
|
basename: str
|
|
205
205
|
element: _Element
|
|
206
206
|
linkbaseType: LinkbaseType | None
|
|
207
|
+
prohibitedBaseConcepts: list[ModelConcept]
|
|
208
|
+
prohibitingLabelElements: list[_Element]
|
|
207
209
|
|
|
208
210
|
@property
|
|
209
211
|
def hasArcs(self) -> bool:
|
|
@@ -641,11 +643,36 @@ class PluginValidationDataExtension(PluginData):
|
|
|
641
643
|
for linkElt in modelDocument.xmlRootElement.iterdescendants(tag=linkbaseType.getLinkQn().clarkNotation):
|
|
642
644
|
arcQn = linkbaseType.getArcQn()
|
|
643
645
|
arcs = list(linkElt.iterdescendants(tag=arcQn.clarkNotation))
|
|
646
|
+
prohibitingLabelElements = []
|
|
647
|
+
prohibitedBaseConcepts = []
|
|
648
|
+
if linkbaseType in (LinkbaseType.LABEL, LinkbaseType.REFERENCE):
|
|
649
|
+
prohibitedArcFroms = defaultdict(list)
|
|
650
|
+
prohibitedArcTos = defaultdict(list)
|
|
651
|
+
for arcElt in linkElt.iterchildren(
|
|
652
|
+
LinkbaseType.LABEL.getArcQn().clarkNotation,
|
|
653
|
+
LinkbaseType.REFERENCE.getArcQn().clarkNotation,
|
|
654
|
+
):
|
|
655
|
+
if arcElt.get("use") == "prohibited":
|
|
656
|
+
prohibitedArcFroms[arcElt.get(XbrlConst.qnXlinkFrom.clarkNotation)].append(arcElt)
|
|
657
|
+
prohibitedArcTos[arcElt.get(XbrlConst.qnXlinkTo.clarkNotation)].append(arcElt)
|
|
658
|
+
for locElt in linkElt.iterchildren(XbrlConst.qnLinkLoc.clarkNotation):
|
|
659
|
+
if self.isExtensionUri(locElt.get(XbrlConst.qnXlinkHref.clarkNotation), modelDocument.modelXbrl):
|
|
660
|
+
continue
|
|
661
|
+
prohibitingArcs = prohibitedArcTos.get(locElt.get(XbrlConst.qnXlinkLabel.clarkNotation))
|
|
662
|
+
if prohibitingArcs:
|
|
663
|
+
prohibitingLabelElements.extend(prohibitingArcs)
|
|
664
|
+
prohibitingArcs = prohibitedArcFroms.get(locElt.get(XbrlConst.qnXlinkLabel.clarkNotation))
|
|
665
|
+
if prohibitingArcs:
|
|
666
|
+
prohibitingLabelElements.extend(prohibitingArcs)
|
|
667
|
+
prohibitedBaseConcepts.append(locElt.dereference())
|
|
668
|
+
|
|
644
669
|
linkbases.append(LinkbaseData(
|
|
645
670
|
arcs=arcs,
|
|
646
671
|
basename=modelDocument.basename,
|
|
647
672
|
element=linkElt,
|
|
648
673
|
linkbaseType=linkbaseType,
|
|
674
|
+
prohibitedBaseConcepts=prohibitedBaseConcepts,
|
|
675
|
+
prohibitingLabelElements=prohibitingLabelElements,
|
|
649
676
|
))
|
|
650
677
|
return linkbases
|
|
651
678
|
|
|
@@ -3,6 +3,7 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
+
import re
|
|
6
7
|
from collections import defaultdict
|
|
7
8
|
from collections.abc import Iterable
|
|
8
9
|
from datetime import date
|
|
@@ -12,14 +13,14 @@ import zipfile
|
|
|
12
13
|
|
|
13
14
|
from lxml.etree import Element
|
|
14
15
|
|
|
15
|
-
from arelle.ModelDtsObject import ModelLink, ModelResource, ModelType
|
|
16
|
+
from arelle.ModelDtsObject import ModelConcept, ModelLink, ModelResource, ModelType
|
|
16
17
|
from arelle.ModelInstanceObject import ModelInlineFact
|
|
17
18
|
from arelle.ModelObject import ModelObject
|
|
18
19
|
from arelle.PrototypeDtsObject import PrototypeObject
|
|
19
20
|
from arelle.ValidateDuplicateFacts import getDuplicateFactSets
|
|
20
21
|
from arelle.XmlValidateConst import VALID
|
|
21
22
|
|
|
22
|
-
from arelle import XbrlConst, XmlUtil
|
|
23
|
+
from arelle import XbrlConst, XmlUtil, ModelDocument
|
|
23
24
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
24
25
|
from arelle.typing import TypeGetText
|
|
25
26
|
from arelle.utils.PluginHooks import ValidationHook
|
|
@@ -54,6 +55,8 @@ if TYPE_CHECKING:
|
|
|
54
55
|
|
|
55
56
|
_: TypeGetText
|
|
56
57
|
|
|
58
|
+
DOCTYPE_XHTML_PATTERN = re.compile(r"^<!(?:DOCTYPE\s+)\s*html(?:PUBLIC\s+)?(?:.*-//W3C//DTD\s+(X?HTML)\s)?.*>$", re.IGNORECASE)
|
|
59
|
+
|
|
57
60
|
|
|
58
61
|
def _getReportingPeriodDateValue(modelXbrl: ModelXbrl, qname: QName) -> date | None:
|
|
59
62
|
facts = modelXbrl.factsByQname.get(qname)
|
|
@@ -1477,13 +1480,18 @@ def rule_nl_kvk_4_4_2_4(
|
|
|
1477
1480
|
extended link role
|
|
1478
1481
|
"""
|
|
1479
1482
|
elrPrimaryItems = pluginData.getDimensionalData(val.modelXbrl).elrPrimaryItems
|
|
1480
|
-
errors = set(
|
|
1481
|
-
|
|
1482
|
-
if
|
|
1483
|
-
|
|
1484
|
-
if
|
|
1485
|
-
|
|
1486
|
-
|
|
1483
|
+
errors = set()
|
|
1484
|
+
for concept in val.modelXbrl.qnameConcepts.values():
|
|
1485
|
+
if concept.qname not in val.modelXbrl.factsByQname:
|
|
1486
|
+
continue
|
|
1487
|
+
if any(
|
|
1488
|
+
concept in elrPrimaryItems.get(lr, set())
|
|
1489
|
+
for lr in NON_DIMENSIONALIZED_LINE_ITEM_LINKROLES
|
|
1490
|
+
):
|
|
1491
|
+
continue
|
|
1492
|
+
if concept in elrPrimaryItems.get("*", set()):
|
|
1493
|
+
continue
|
|
1494
|
+
errors.add(concept)
|
|
1487
1495
|
for error in errors:
|
|
1488
1496
|
yield Validation.error(
|
|
1489
1497
|
codes='NL.NL-KVK.4.4.2.4.extensionTaxonomyLineItemNotLinkedToAnyHypercube',
|
|
@@ -1824,7 +1832,48 @@ def rule_nl_kvk_RTS_Annex_IV_Par_11_G4_2_2_1(
|
|
|
1824
1832
|
|
|
1825
1833
|
@validation(
|
|
1826
1834
|
hook=ValidationHook.XBRL_FINALLY,
|
|
1827
|
-
disclosureSystems=
|
|
1835
|
+
disclosureSystems=ALL_NL_INLINE_DISCLOSURE_SYSTEMS,
|
|
1836
|
+
)
|
|
1837
|
+
def rule_nl_kvk_RTS_Annex_IV_Par_4_1(
|
|
1838
|
+
pluginData: PluginValidationDataExtension,
|
|
1839
|
+
val: ValidateXbrl,
|
|
1840
|
+
*args: Any,
|
|
1841
|
+
**kwargs: Any,
|
|
1842
|
+
) -> Iterable[Validation]:
|
|
1843
|
+
"""
|
|
1844
|
+
NL-KVK.RTS_Annex_IV_Par_4_1: Extension elements must not duplicate the existing
|
|
1845
|
+
elements from the core taxonomy and be identifiable.
|
|
1846
|
+
"""
|
|
1847
|
+
for name, concepts in val.modelXbrl.nameConcepts.items():
|
|
1848
|
+
if len(concepts) < 2:
|
|
1849
|
+
continue
|
|
1850
|
+
coreConcepts = []
|
|
1851
|
+
extensionConcepts = []
|
|
1852
|
+
for concept in concepts:
|
|
1853
|
+
if pluginData.isExtensionUri(concept.modelDocument.uri, val.modelXbrl):
|
|
1854
|
+
extensionConcepts.append(concept)
|
|
1855
|
+
else:
|
|
1856
|
+
coreConcepts.append(concept)
|
|
1857
|
+
if len(coreConcepts) == 0:
|
|
1858
|
+
continue
|
|
1859
|
+
coreConcept = coreConcepts[0]
|
|
1860
|
+
for extensionConcept in extensionConcepts:
|
|
1861
|
+
if extensionConcept.balance != coreConcept.balance:
|
|
1862
|
+
continue
|
|
1863
|
+
if extensionConcept.periodType != coreConcept.periodType:
|
|
1864
|
+
continue
|
|
1865
|
+
yield Validation.error(
|
|
1866
|
+
codes='NL.NL-KVK.RTS_Annex_IV_Par_4_1.extensionElementDuplicatesCoreElement',
|
|
1867
|
+
msg=_('An extension element was found that is a duplicate to a core element (%(qname)s). '
|
|
1868
|
+
'Review use of element and update to core or revise extension element.'),
|
|
1869
|
+
modelObject=(coreConcept, extensionConcept),
|
|
1870
|
+
qname=coreConcept.qname,
|
|
1871
|
+
)
|
|
1872
|
+
|
|
1873
|
+
|
|
1874
|
+
@validation(
|
|
1875
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
1876
|
+
disclosureSystems=ALL_NL_INLINE_DISCLOSURE_SYSTEMS,
|
|
1828
1877
|
)
|
|
1829
1878
|
def rule_nl_kvk_RTS_Annex_IV_Par_4_2(
|
|
1830
1879
|
pluginData: PluginValidationDataExtension,
|
|
@@ -1847,6 +1896,54 @@ def rule_nl_kvk_RTS_Annex_IV_Par_4_2(
|
|
|
1847
1896
|
)
|
|
1848
1897
|
|
|
1849
1898
|
|
|
1899
|
+
@validation(
|
|
1900
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
1901
|
+
disclosureSystems=ALL_NL_INLINE_DISCLOSURE_SYSTEMS,
|
|
1902
|
+
)
|
|
1903
|
+
def rule_nl_kvk_RTS_Annex_IV_Par_5(
|
|
1904
|
+
pluginData: PluginValidationDataExtension,
|
|
1905
|
+
val: ValidateXbrl,
|
|
1906
|
+
*args: Any,
|
|
1907
|
+
**kwargs: Any,
|
|
1908
|
+
) -> Iterable[Validation]:
|
|
1909
|
+
"""
|
|
1910
|
+
NL-KVK.RTS_Annex_IV_Par_5: Each extension taxonomy element used in tagging
|
|
1911
|
+
must be included in at least one presentation and definition linkbase hierarchy.
|
|
1912
|
+
"""
|
|
1913
|
+
extensionData = pluginData.getExtensionData(val.modelXbrl)
|
|
1914
|
+
taggedExtensionConcepts = set(extensionData.extensionConcepts) & set(fact.concept for fact in val.modelXbrl.facts)
|
|
1915
|
+
|
|
1916
|
+
def getConceptsInLinkbase(arcroles: frozenset[str], concepts: set[ModelConcept]) -> None:
|
|
1917
|
+
for fromModelObject, toRels in val.modelXbrl.relationshipSet(tuple(arcroles)).fromModelObjects().items():
|
|
1918
|
+
if isinstance(fromModelObject, ModelConcept):
|
|
1919
|
+
concepts.add(fromModelObject)
|
|
1920
|
+
for toRel in toRels:
|
|
1921
|
+
if isinstance(toRel.toModelObject, ModelConcept):
|
|
1922
|
+
concepts.add(toRel.toModelObject)
|
|
1923
|
+
|
|
1924
|
+
conceptsInDefinition: set[ModelConcept] = set()
|
|
1925
|
+
getConceptsInLinkbase(LinkbaseType.DEFINITION.getArcroles(), conceptsInDefinition)
|
|
1926
|
+
conceptsMissingFromDefinition = taggedExtensionConcepts - conceptsInDefinition
|
|
1927
|
+
if len(conceptsMissingFromDefinition) > 0:
|
|
1928
|
+
yield Validation.error(
|
|
1929
|
+
codes='NL.NL-KVK.RTS_Annex_IV_Par_5.usableConceptsNotIncludedInDefinitionLink',
|
|
1930
|
+
msg=_('Extension elements are missing from definition linkbase. '
|
|
1931
|
+
'Review use of extension elements.'),
|
|
1932
|
+
modelObject=conceptsMissingFromDefinition
|
|
1933
|
+
)
|
|
1934
|
+
|
|
1935
|
+
conceptsInPresentation: set[ModelConcept] = set()
|
|
1936
|
+
getConceptsInLinkbase(LinkbaseType.PRESENTATION.getArcroles(), conceptsInPresentation)
|
|
1937
|
+
conceptsMissingFromPresentation = taggedExtensionConcepts - conceptsInPresentation
|
|
1938
|
+
if len(conceptsMissingFromPresentation) > 0:
|
|
1939
|
+
yield Validation.error(
|
|
1940
|
+
codes='NL.NL-KVK.RTS_Annex_IV_Par_5.usableConceptsNotIncludedInPresentationLink',
|
|
1941
|
+
msg=_('Extension elements are missing from presentation linkbase. '
|
|
1942
|
+
'Review use of extension elements.'),
|
|
1943
|
+
modelObject=conceptsMissingFromPresentation
|
|
1944
|
+
)
|
|
1945
|
+
|
|
1946
|
+
|
|
1850
1947
|
@validation(
|
|
1851
1948
|
hook=ValidationHook.XBRL_FINALLY,
|
|
1852
1949
|
disclosureSystems=NL_INLINE_GAAP_IFRS_DISCLOSURE_SYSTEMS,
|
|
@@ -1873,3 +1970,105 @@ def rule_nl_kvk_RTS_Annex_IV_Par_6(
|
|
|
1873
1970
|
msg=_('The filing package must include a calculation linkbase.'),
|
|
1874
1971
|
modelObject=val.modelXbrl.modelDocument
|
|
1875
1972
|
)
|
|
1973
|
+
|
|
1974
|
+
|
|
1975
|
+
@validation(
|
|
1976
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
1977
|
+
disclosureSystems=NL_INLINE_GAAP_IFRS_DISCLOSURE_SYSTEMS,
|
|
1978
|
+
)
|
|
1979
|
+
def rule_nl_kvk_RTS_Annex_IV_Par_8_G4_4_5(
|
|
1980
|
+
pluginData: PluginValidationDataExtension,
|
|
1981
|
+
val: ValidateXbrl,
|
|
1982
|
+
*args: Any,
|
|
1983
|
+
**kwargs: Any,
|
|
1984
|
+
) -> Iterable[Validation]:
|
|
1985
|
+
"""
|
|
1986
|
+
NL-KVK.RTS_Annex_IV_Par_8_G4-4-5: Labels and references of the core
|
|
1987
|
+
taxonomy elements in extension taxonomies of issuer shall not be replaced.
|
|
1988
|
+
"""
|
|
1989
|
+
extensionData = pluginData.getExtensionData(val.modelXbrl)
|
|
1990
|
+
for modelDocument, extensionDoc in extensionData.extensionDocuments.items():
|
|
1991
|
+
for linkbase in extensionDoc.linkbases:
|
|
1992
|
+
if linkbase.prohibitingLabelElements and \
|
|
1993
|
+
linkbase.prohibitedBaseConcepts:
|
|
1994
|
+
if linkbase.linkbaseType == LinkbaseType.LABEL:
|
|
1995
|
+
yield Validation.error(
|
|
1996
|
+
codes='NL.NL-KVK.RTS_Annex_IV_Par_8_G4-4-5.coreTaxonomyLabelModification',
|
|
1997
|
+
msg=_('Standard concept has a modified label from what was defined in the taxonomy. '
|
|
1998
|
+
'Labels from the taxonomy should not be modified.'),
|
|
1999
|
+
modelObject=modelDocument
|
|
2000
|
+
)
|
|
2001
|
+
else:
|
|
2002
|
+
# Assumed to be a reference linkbase.
|
|
2003
|
+
# If anything else, we should probably fire an error anyway.
|
|
2004
|
+
yield Validation.error(
|
|
2005
|
+
codes='NL.NL-KVK.RTS_Annex_IV_Par_8_G4-4-5.coreTaxonomyReferenceModification',
|
|
2006
|
+
msg=_('Standard concept has a modified reference from what was defined in the taxonomy. '
|
|
2007
|
+
'References from the taxonomy should not be modified.'),
|
|
2008
|
+
modelObject=modelDocument
|
|
2009
|
+
)
|
|
2010
|
+
|
|
2011
|
+
|
|
2012
|
+
@validation(
|
|
2013
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
2014
|
+
disclosureSystems=ALL_NL_INLINE_DISCLOSURE_SYSTEMS,
|
|
2015
|
+
)
|
|
2016
|
+
def rule_nl_kvk_RTS_Art_3(
|
|
2017
|
+
pluginData: PluginValidationDataExtension,
|
|
2018
|
+
val: ValidateXbrl,
|
|
2019
|
+
*args: Any,
|
|
2020
|
+
**kwargs: Any,
|
|
2021
|
+
) -> Iterable[Validation]:
|
|
2022
|
+
"""
|
|
2023
|
+
NL-KVK.RTS_Art_3: Legal entities shall file their annual reports in XHTML format
|
|
2024
|
+
"""
|
|
2025
|
+
for modelDocument in val.modelXbrl.urlDocs.values():
|
|
2026
|
+
docinfo = modelDocument.xmlRootElement.getroottree().docinfo
|
|
2027
|
+
docTypeMatch = DOCTYPE_XHTML_PATTERN.match(docinfo.doctype)
|
|
2028
|
+
if not docTypeMatch:
|
|
2029
|
+
continue
|
|
2030
|
+
if not docTypeMatch.group(1) or docTypeMatch.group(1).lower() == "html":
|
|
2031
|
+
yield Validation.error(
|
|
2032
|
+
codes='NL.NL-KVK.RTS_Art_3.htmlDoctype',
|
|
2033
|
+
msg=_('Doctype SHALL NOT specify html: %(doctype)s'),
|
|
2034
|
+
modelObject=val.modelXbrl.modelDocument,
|
|
2035
|
+
doctype=docinfo.doctype,
|
|
2036
|
+
)
|
|
2037
|
+
else:
|
|
2038
|
+
yield Validation.warning(
|
|
2039
|
+
codes='NL.NL-KVK.RTS_Art_3.xhtmlDoctype',
|
|
2040
|
+
msg=_('Doctype implies xhtml DTD validation but '
|
|
2041
|
+
'inline 1.1 requires schema validation: %(doctype)s'),
|
|
2042
|
+
modelObject=val.modelXbrl.modelDocument,
|
|
2043
|
+
doctype=docinfo.doctype,
|
|
2044
|
+
)
|
|
2045
|
+
|
|
2046
|
+
|
|
2047
|
+
@validation(
|
|
2048
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
2049
|
+
disclosureSystems=ALL_NL_INLINE_DISCLOSURE_SYSTEMS,
|
|
2050
|
+
)
|
|
2051
|
+
def rule_nl_kvk_RTS_Art_6_a(
|
|
2052
|
+
pluginData: PluginValidationDataExtension,
|
|
2053
|
+
val: ValidateXbrl,
|
|
2054
|
+
*args: Any,
|
|
2055
|
+
**kwargs: Any,
|
|
2056
|
+
) -> Iterable[Validation]:
|
|
2057
|
+
"""
|
|
2058
|
+
NL-KVK.RTS_Art_6_a: Legal entities shall embed markups in the annual reports
|
|
2059
|
+
in XHTML format using the Inline XBRL specifications
|
|
2060
|
+
"""
|
|
2061
|
+
for modelDocument in val.modelXbrl.urlDocs.values():
|
|
2062
|
+
if modelDocument.type != ModelDocument.Type.INLINEXBRL:
|
|
2063
|
+
continue
|
|
2064
|
+
factElements = list(modelDocument.xmlRootElement.iterdescendants(
|
|
2065
|
+
modelDocument.ixNStag + "nonNumeric",
|
|
2066
|
+
modelDocument.ixNStag + "nonFraction",
|
|
2067
|
+
modelDocument.ixNStag + "fraction"
|
|
2068
|
+
))
|
|
2069
|
+
if len(factElements) == 0:
|
|
2070
|
+
yield Validation.error(
|
|
2071
|
+
codes='NL.NL-KVK.RTS_Art_6_a.noInlineXbrlTags',
|
|
2072
|
+
msg=_('Annual report is using xhtml extension, but there are no inline mark up tags identified.'),
|
|
2073
|
+
modelObject=modelDocument,
|
|
2074
|
+
)
|
|
@@ -63,7 +63,7 @@ arelle/TableStructure.py,sha256=PABOHJiTa56cHyF9qRLD7TohmCHyDTrGEltW8toP_rk,2940
|
|
|
63
63
|
arelle/TkTableWrapper.py,sha256=Bdm-WmLdwIiudqfaVGZElip_92eeSKQdd7hCjlILm1A,33612
|
|
64
64
|
arelle/UITkTable.py,sha256=N83cXi5c0lLZLsDbwSKcPrlYoUoGsNavGN5YRx6d9XY,39810
|
|
65
65
|
arelle/UiUtil.py,sha256=3G0xPclZI8xW_XQDbiFrmylB7Nd5muqi5n2x2oMkMZU,34218
|
|
66
|
-
arelle/Updater.py,sha256=
|
|
66
|
+
arelle/Updater.py,sha256=IZ8cq44Rq88WbQcB1VOpMA6bxdfZxfYQ8rgu9Ehpbes,7448
|
|
67
67
|
arelle/UrlUtil.py,sha256=HrxZSG59EUMGMMGmWPuZkPi5-0BGqY3jAMkp7V4IdZo,32400
|
|
68
68
|
arelle/Validate.py,sha256=XBrKQHsSC7Qz5Fp-M3gODfxwW8a-PWyBzZkCekYrMZM,56920
|
|
69
69
|
arelle/ValidateDuplicateFacts.py,sha256=L556J1Dhz4ZmsMlRNoDCMpFgDQYiryd9vuBYDvE0Aq8,21769
|
|
@@ -114,7 +114,7 @@ arelle/ViewWinVersReport.py,sha256=aYfsOgynVZpMzl6f2EzQCBLzdihYGycwb5SiTghkgMQ,9
|
|
|
114
114
|
arelle/ViewWinXml.py,sha256=4ZGKtjaoCwU9etKYm9ZAS7jSmUxba1rqNEdv0OIyjTY,1250
|
|
115
115
|
arelle/WatchRss.py,sha256=5Ih4igH2MM4hpOuAXy9eO0QAyZ7jZR3S5bPzo2sdFpw,14097
|
|
116
116
|
arelle/WebCache.py,sha256=B62IxIHLX4hcDr_0MJGfmzUXau2ONqiMk6vLVLxAIhA,45057
|
|
117
|
-
arelle/XbrlConst.py,sha256=
|
|
117
|
+
arelle/XbrlConst.py,sha256=gKYJECjuOEn0z0RRAaHpVCqh2NnBMfPLGxoLohYGGH4,57657
|
|
118
118
|
arelle/XbrlUtil.py,sha256=s2Vmrh-sZI5TeuqsziKignOc3ao-uUgnCNoelP4dDj0,9212
|
|
119
119
|
arelle/XhtmlValidate.py,sha256=0gtm7N-kXK0RB5o3c1AQXjfFuRp1w2fKZZAeyruNANw,5727
|
|
120
120
|
arelle/XmlUtil.py,sha256=1VToOOylF8kbEorEdZLThmq35j9bmuF_DS2q9NthnHU,58774
|
|
@@ -123,7 +123,7 @@ arelle/XmlValidateConst.py,sha256=U_wN0Q-nWKwf6dKJtcu_83FXPn9c6P8JjzGA5b0w7P0,33
|
|
|
123
123
|
arelle/XmlValidateParticles.py,sha256=Mn6vhFl0ZKC_vag1mBwn1rH_x2jmlusJYqOOuxFPO2k,9231
|
|
124
124
|
arelle/XmlValidateSchema.py,sha256=6frtZOc1Yrx_5yYF6V6oHbScnglWrVbWr6xW4EHtLQI,7428
|
|
125
125
|
arelle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
|
-
arelle/_version.py,sha256=
|
|
126
|
+
arelle/_version.py,sha256=uRbec_j0ZhdrtZwA-ge3qPnm-hdyZFzvTqnuVbV5-z8,515
|
|
127
127
|
arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
|
|
128
128
|
arelle/api/Session.py,sha256=5KPjCIPiNuanKrz1MdFdKIx8Bg40Pk9sf2cL9OU4x-E,7770
|
|
129
129
|
arelle/archive/CustomLogger.py,sha256=v_JXOCQLDZcfaFWzxC9FRcEf9tQi4rCI4Sx7jCuAVQI,1231
|
|
@@ -409,8 +409,8 @@ arelle/plugin/validate/FERC/__init__.py,sha256=V4fXcFKBsjFFPs9_1NhvDjWpEQCoQM0tR
|
|
|
409
409
|
arelle/plugin/validate/FERC/config.xml,sha256=bn9b8eCqJA1J62rYq1Nz85wJrMGAahVmmnIUQZyerjo,1919
|
|
410
410
|
arelle/plugin/validate/FERC/resources/ferc-utr.xml,sha256=OCRj9IUpdXATCBXKbB71apYx9kxcNtZW-Hq4s-avsRY,2663
|
|
411
411
|
arelle/plugin/validate/NL/DisclosureSystems.py,sha256=urRmYJ8RnGPlTgSVKW7zGN4_4CtL3OVKlcI3LwTpBz4,561
|
|
412
|
-
arelle/plugin/validate/NL/LinkbaseType.py,sha256=
|
|
413
|
-
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=
|
|
412
|
+
arelle/plugin/validate/NL/LinkbaseType.py,sha256=BwRQl4XZFFCopufC2FEMLhYENNTk2JUWVQvnIUsaqtI,3108
|
|
413
|
+
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=en-x3J_sH9w-lIJzNwKRE6rRJ2fgovovVtq7n7QLo4E,34667
|
|
414
414
|
arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=suCNqrtC_IMndyS_mXaeujDvjgSduTQ9KPNRc9B0F6I,16098
|
|
415
415
|
arelle/plugin/validate/NL/__init__.py,sha256=23cF5ih2wu0RO_S0B52nVB7LrdlmnYcctOUezF0kKQ8,2874
|
|
416
416
|
arelle/plugin/validate/NL/resources/config.xml,sha256=qBE6zywFSmemBSWonuTII5iuOCUlNb1nvkpMbsZb5PM,1853
|
|
@@ -419,7 +419,7 @@ arelle/plugin/validate/NL/rules/br_kvk.py,sha256=0SwKieWzTDm3YMsXPS6zTdgbk7_Z9Cz
|
|
|
419
419
|
arelle/plugin/validate/NL/rules/fg_nl.py,sha256=4Puq5wAjtK_iNd4wisH_R0Z_EKJ7MT2OCai5g4t1MPE,10714
|
|
420
420
|
arelle/plugin/validate/NL/rules/fr_kvk.py,sha256=kYqXt45S6eM32Yg9ii7pUhOMfJaHurgYqQ73FyQALs8,8171
|
|
421
421
|
arelle/plugin/validate/NL/rules/fr_nl.py,sha256=-M1WtXp06khhtkfOVPCa-b8UbC281gk4YfDhvtAVlnI,31424
|
|
422
|
-
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=
|
|
422
|
+
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=2HA7S5YABZhy44mUehGkqypUCG1KxeY2pWWt_oyVzoo,85187
|
|
423
423
|
arelle/plugin/validate/ROS/DisclosureSystems.py,sha256=rJ81mwQDYTi6JecFZ_zhqjjz3VNQRgjHNSh0wcQWAQE,18
|
|
424
424
|
arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=IV7ILhNvgKwQXqbpSA6HRNt9kEnejCyMADI3wyyIgk0,4036
|
|
425
425
|
arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=FBhEp8t396vGdvCbMEimfcxmGiGnhXMen-yVLWnkFaI,758
|
|
@@ -742,7 +742,7 @@ arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txr
|
|
|
742
742
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
743
743
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
744
744
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
745
|
-
arelle_release-2.37.
|
|
745
|
+
arelle_release-2.37.25.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
746
746
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
747
747
|
tests/integration_tests/download_cache.py,sha256=jVMIVICsZjcVc9DCPPu3fCjF9_cWSS3tqSynhFs3oAM,4097
|
|
748
748
|
tests/integration_tests/integration_test_util.py,sha256=H7mncbv0T9ZeVyrtk9Hohe3k6jgcYykHkt-LGE-Q9aQ,10270
|
|
@@ -781,7 +781,7 @@ tests/integration_tests/validation/validation_util.py,sha256=_f0gd5BTts44Z9aEKi9
|
|
|
781
781
|
tests/integration_tests/validation/conformance_suite_configurations/cipc_current.py,sha256=oLXe3xIsEZLz3cv1cDdMQIuS_NgyI9Uimc9hy0NMWqg,642
|
|
782
782
|
tests/integration_tests/validation/conformance_suite_configurations/dba_current.py,sha256=j-7jCpzbGXbOzG8HGEyS0ciCYSPZzZLV44VQGhP3Hmc,875
|
|
783
783
|
tests/integration_tests/validation/conformance_suite_configurations/dba_multi_current.py,sha256=ICkP18Wu7aTDfszfYlrfVnBj9oe7ppXR-8wxQqCPqW0,837
|
|
784
|
-
tests/integration_tests/validation/conformance_suite_configurations/efm_current.py,sha256=
|
|
784
|
+
tests/integration_tests/validation/conformance_suite_configurations/efm_current.py,sha256=zbZ9c-LoZJDRp0Lobl_oH3xRw4g-2u6oQqU0-oo5NOE,1322
|
|
785
785
|
tests/integration_tests/validation/conformance_suite_configurations/efm_reg_dqc.py,sha256=HiT8OcRAOVKLsl95Y91L66FeOsIMMMAQCs-DLMG-Lb0,739
|
|
786
786
|
tests/integration_tests/validation/conformance_suite_configurations/efm_reg_pragmatic.py,sha256=U6dew0sIibjZe4r6na912qyIVAjxljh2HDix-8AwvhM,727
|
|
787
787
|
tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2021.py,sha256=KpXpm6kMYAp94K-J7-GZS47iRVE9Kr5cfxPniFFSI3A,1146
|
|
@@ -797,8 +797,8 @@ tests/integration_tests/validation/conformance_suite_configurations/kvk_nt16.py,
|
|
|
797
797
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt17.py,sha256=lmEZonthFm0YKFmp1dwXtdJ2T7txUeSpL4mbAo8fl4Y,1292
|
|
798
798
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt18.py,sha256=EG2RQVkvFENhzUF3fl3QvDnH7ZPYS1n1Fo8bhfmSczM,1205
|
|
799
799
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt19.py,sha256=FAzf9RhRmn_8yowpplJho2zEspX9FxJiVq8SjZT3Dsc,1199
|
|
800
|
-
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py,sha256=
|
|
801
|
-
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024_gaap_other.py,sha256=
|
|
800
|
+
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py,sha256=JM1RcC5QuweIEPk8HpzneE5VvaH8Gjqx_TJeBd97WbQ,9465
|
|
801
|
+
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024_gaap_other.py,sha256=vtzYSd0-vF9g6eHfrIUpMBz7D0HdR_gi8O0429lOaww,31667
|
|
802
802
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py,sha256=O_LFVBZPkjxmbrU7_C7VTLtrdoCUx2bYXOXw6_MlRtQ,846
|
|
803
803
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py,sha256=aTN3Ez6lPsZsuypHZP84DneOtYxUZSjUiGypHy6ofHQ,846
|
|
804
804
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py,sha256=sqHLjrHc95dTu0guTgKkphaKM1zNfKGnN4GKkZDLzeU,845
|
|
@@ -1551,7 +1551,7 @@ tests/resources/conformance_suites_expected/efm_current.csv,sha256=9YoKy-kYo_VAy
|
|
|
1551
1551
|
tests/resources/conformance_suites_expected/efm_reg_dqc.csv,sha256=0CEItNnnEE_s8uGHA8CidxEVyvOiTCv5nAWpc4dCUmE,9968847
|
|
1552
1552
|
tests/resources/conformance_suites_expected/efm_reg_pragmatic.csv,sha256=J_sDOjJGDjFnseMU7QIBttvvOjjnPp_WdmrCkjvCu4Y,196
|
|
1553
1553
|
tests/resources/conformance_suites_timing/dba_current.json,sha256=e5jmGVDcPbaXDbHNK3RQz-_gsozU1dL_J0gcNDzHnjg,1467
|
|
1554
|
-
tests/resources/conformance_suites_timing/efm_current.json,sha256=
|
|
1554
|
+
tests/resources/conformance_suites_timing/efm_current.json,sha256=iqqcBoDJVs2F_xW03gCirDyaLZoS9x482KAQgMhCvvg,1096604
|
|
1555
1555
|
tests/resources/conformance_suites_timing/efm_reg_dqc.json,sha256=4ry0JC8XA-8Bua2E75edknjxcL42Qj6nMZxvjCdW2uc,1708653
|
|
1556
1556
|
tests/resources/conformance_suites_timing/esef_ixbrl_2021.json,sha256=3UBEba0PStPkAHgYZc6_WAH3_pBTGOpDNRQ0X1hxH74,26836
|
|
1557
1557
|
tests/resources/conformance_suites_timing/esef_ixbrl_2022.json,sha256=1ifWHng_AENYMwug6h68pqK72EHk6nMq2ZLf7-U9Fh8,21740
|
|
@@ -1583,7 +1583,7 @@ tests/unit_tests/arelle/test_pluginmanager.py,sha256=_Gi03PP-6FZ7mWqe2ysS_N_suOQ
|
|
|
1583
1583
|
tests/unit_tests/arelle/test_qname.py,sha256=0aKh6jYWmY4Xg3wOS839Tdqa1SHwHuha6akv5T6qddY,4892
|
|
1584
1584
|
tests/unit_tests/arelle/test_runtimeoptions.py,sha256=OB4ds28ODYjzgm9wlojd_fIRf7iRGOmDaPgxm4kiCwM,1315
|
|
1585
1585
|
tests/unit_tests/arelle/test_system_info.py,sha256=G9VtKX9WCaas2D2s-Yw-4kcq6_zcY-LkjOveGvQNvZI,655
|
|
1586
|
-
tests/unit_tests/arelle/test_updater.py,sha256=
|
|
1586
|
+
tests/unit_tests/arelle/test_updater.py,sha256=4HJDlS5VRtShnT57NbioHtWzTMR34NguJ37HEWkKl4Y,17254
|
|
1587
1587
|
tests/unit_tests/arelle/test_urlutil.py,sha256=3WTHxic3XiiOGZQxkHm9m97kFbLHOc27oXypU8fFt1w,914
|
|
1588
1588
|
tests/unit_tests/arelle/test_validatexbrlcalcs.py,sha256=eMVYJkm6v1I2JswCTIKumU92jKdFeB_jxTGt9RkfBjU,2827
|
|
1589
1589
|
tests/unit_tests/arelle/test_version.py,sha256=5dxNN083Hw6pdVsY11DatBFVM8pMVttruCDgou870Og,2000
|
|
@@ -1596,8 +1596,8 @@ tests/unit_tests/arelle/oim/test_load.py,sha256=NxiUauQwJVfWAHbbpsMHGSU2d3Br8Pki
|
|
|
1596
1596
|
tests/unit_tests/arelle/plugin/test_plugin_imports.py,sha256=bdhIs9frAnFsdGU113yBk09_jis-z43dwUItMFYuSYM,1064
|
|
1597
1597
|
tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py,sha256=H0ndmQ0sFO5WVMzAxPCH1WciRhCg_HgKUtQCg0xlmtg,1238
|
|
1598
1598
|
tests/unit_tests/arelle/utils/validate/test_decorator.py,sha256=ZS8FqIY1g-2FCbjF4UYm609dwViax6qBMRJSi0vfuhY,2482
|
|
1599
|
-
arelle_release-2.37.
|
|
1600
|
-
arelle_release-2.37.
|
|
1601
|
-
arelle_release-2.37.
|
|
1602
|
-
arelle_release-2.37.
|
|
1603
|
-
arelle_release-2.37.
|
|
1599
|
+
arelle_release-2.37.25.dist-info/METADATA,sha256=qMoZayQIOklP4YadlKQ_DOpjVwBTCvWuNNvtVEcVgfY,9134
|
|
1600
|
+
arelle_release-2.37.25.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1601
|
+
arelle_release-2.37.25.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
1602
|
+
arelle_release-2.37.25.dist-info/top_level.txt,sha256=ZYmYGmhW5Jvo3vJ4iXBZPUI29LvYhntom04w90esJvU,13
|
|
1603
|
+
arelle_release-2.37.25.dist-info/RECORD,,
|
|
@@ -6,7 +6,7 @@ from tests.integration_tests.validation.conformance_suite_config import (
|
|
|
6
6
|
ConformanceSuiteConfig,
|
|
7
7
|
)
|
|
8
8
|
|
|
9
|
-
CONFORMANCE_SUITE_ZIP_NAME = 'efm-
|
|
9
|
+
CONFORMANCE_SUITE_ZIP_NAME = 'efm-74-250616.zip'
|
|
10
10
|
|
|
11
11
|
config = ConformanceSuiteConfig(
|
|
12
12
|
additional_plugins_by_prefix=[(f'conf/{t}', frozenset({'EDGAR/render'})) for t in [
|
|
@@ -27,7 +27,7 @@ config = ConformanceSuiteConfig(
|
|
|
27
27
|
source=AssetSource.S3_PUBLIC,
|
|
28
28
|
)
|
|
29
29
|
],
|
|
30
|
-
cache_version_id='
|
|
30
|
+
cache_version_id='fQUkcdNcy7HZxP3bfwn1v3DnJkc4aKKp',
|
|
31
31
|
info_url='https://www.sec.gov/structureddata/osdinteractivedatatestsuite',
|
|
32
32
|
name=PurePath(__file__).stem,
|
|
33
33
|
plugins=frozenset({
|
|
@@ -24,6 +24,7 @@ config = ConformanceSuiteConfig(
|
|
|
24
24
|
},
|
|
25
25
|
'G3-1-3_2/index.xml:TC2_invalid': {
|
|
26
26
|
'extensionTaxonomyLineItemNotLinkedToAnyHypercube': 1,
|
|
27
|
+
'usableConceptsNotIncludedInDefinitionLink': 1,
|
|
27
28
|
},
|
|
28
29
|
'G3-5-1_5/index.xml:TC2_invalid': {
|
|
29
30
|
# This is the expected error, but we return two of them, slightly different.
|
|
@@ -48,6 +49,12 @@ config = ConformanceSuiteConfig(
|
|
|
48
49
|
'G4-1-1_1/index.xml:TC4_invalid': {
|
|
49
50
|
'extensionTaxonomyWrongFilesStructure': 1,
|
|
50
51
|
},
|
|
52
|
+
'G4-1-1_1/index.xml:TC5_invalid': {
|
|
53
|
+
'usableConceptsNotIncludedInPresentationLink': 1,
|
|
54
|
+
},
|
|
55
|
+
'G4-1-1_1/index.xml:TC7_invalid': {
|
|
56
|
+
'usableConceptsNotIncludedInPresentationLink': 1,
|
|
57
|
+
},
|
|
51
58
|
'G4-1-2_1/index.xml:TC2_valid': {
|
|
52
59
|
'undefinedLanguageForTextFact': 1,
|
|
53
60
|
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
|
|
@@ -63,9 +70,15 @@ config = ConformanceSuiteConfig(
|
|
|
63
70
|
'UsableConceptsNotAppliedByTaggedFacts': 1, # Also fails 4.4.6.1
|
|
64
71
|
'extensionTaxonomyLineItemNotLinkedToAnyHypercube': 10,
|
|
65
72
|
},
|
|
73
|
+
'G4-2-3_1/index.xml:TC2_invalid': {
|
|
74
|
+
'extensionTaxonomyLineItemNotLinkedToAnyHypercube': 1,
|
|
75
|
+
},
|
|
66
76
|
'G4-4-2_1/index.xml:TC2_invalid': {
|
|
67
77
|
'closedNegativeHypercubeInDefinitionLinkbase': 1, # Also fails 4.4.2.3
|
|
68
78
|
},
|
|
79
|
+
'G4-4-2_4/index.xml:TC2_invalid': {
|
|
80
|
+
'usableConceptsNotIncludedInDefinitionLink': 1,
|
|
81
|
+
},
|
|
69
82
|
'RTS_Annex_II_Par_1_RTS_Annex_IV_par_7/index.xml:TC2_valid': {
|
|
70
83
|
'undefinedLanguageForTextFact': 1,
|
|
71
84
|
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
|
|
@@ -92,7 +105,20 @@ config = ConformanceSuiteConfig(
|
|
|
92
105
|
'undefinedLanguageForTextFact': 1,
|
|
93
106
|
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
|
|
94
107
|
'extensionTaxonomyWrongFilesStructure': 1,
|
|
95
|
-
}
|
|
108
|
+
},
|
|
109
|
+
'RTS_Art_6_a/index.xml:TC2_invalid': {
|
|
110
|
+
'UsableConceptsNotAppliedByTaggedFacts': 1,
|
|
111
|
+
'incorrectKvkTaxonomyVersionUsed': 1,
|
|
112
|
+
'message:existsAtLeastOnce_ChamberOfCommerceRegistrationNumber': 1,
|
|
113
|
+
'message:existsAtLeastOnce_FinancialReportingPeriod': 1,
|
|
114
|
+
'message:existsAtLeastOnce_FinancialReportingPeriodEndDate': 1,
|
|
115
|
+
'message:existsAtLeastOnce_LegalEntityLegalForm': 1,
|
|
116
|
+
'message:existsAtLeastOnce_LegalEntityName': 1,
|
|
117
|
+
'message:existsAtLeastOnce_LegalEntityRegisteredOffice': 1,
|
|
118
|
+
'message:existsOnlyOnce_AuditorsReportFinancialStatementsPresent': 1,
|
|
119
|
+
'message:existsOnlyOnce_DocumentAdoptionStatus': 1,
|
|
120
|
+
'message:existsOnlyOnce_FinancialStatementsConsolidated': 1,
|
|
121
|
+
},
|
|
96
122
|
}.items()},
|
|
97
123
|
expected_failure_ids=frozenset([
|
|
98
124
|
# Conformance Suite Errors
|
|
@@ -116,17 +142,10 @@ config = ConformanceSuiteConfig(
|
|
|
116
142
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_III_Par_1/index.xml:TC3_invalid',
|
|
117
143
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_12_G3-2-4_1/index.xml:TC4_invalid',
|
|
118
144
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_14_G3-5-1_1/index.xml:TC2_invalid',
|
|
119
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_1/index.xml:TC2_invalid',
|
|
120
145
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC3_invalid',
|
|
121
146
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC4_invalid',
|
|
122
147
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_4_3/index.xml:TC5_invalid',
|
|
123
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_5/index.xml:TC2_invalid',
|
|
124
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_5/index.xml:TC3_invalid',
|
|
125
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_8_G4-4-5/index.xml:TC2_invalid',
|
|
126
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_8_G4-4-5/index.xml:TC3_invalid',
|
|
127
148
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Annex_IV_Par_9_Par_10/index.xml:TC3_invalid',
|
|
128
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Art_3/index.xml:TC4_invalid',
|
|
129
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/RTS_Art_6_a/index.xml:TC2_invalid',
|
|
130
149
|
]),
|
|
131
150
|
info_url='https://www.sbr-nl.nl/sbr-domeinen/handelsregister/uitbreiding-elektronische-deponering-handelsregister',
|
|
132
151
|
name=PurePath(__file__).stem,
|