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.

Files changed (25) hide show
  1. arelle/DisclosureSystem.py +10 -1
  2. arelle/FileSource.py +19 -7
  3. arelle/ModelDocument.py +29 -0
  4. arelle/Validate.py +1 -1
  5. arelle/_version.py +2 -2
  6. arelle/plugin/inlineXbrlDocumentSet.py +1 -1
  7. arelle/plugin/validate/NL/DisclosureSystems.py +1 -1
  8. arelle/plugin/validate/NL/PluginValidationDataExtension.py +30 -7
  9. arelle/plugin/validate/NL/ValidationPluginExtension.py +13 -8
  10. arelle/plugin/validate/NL/__init__.py +14 -0
  11. arelle/plugin/validate/NL/resources/config.xml +2 -2
  12. arelle/plugin/validate/NL/rules/nl_kvk.py +141 -12
  13. {arelle_release-2.37.4.dist-info → arelle_release-2.37.6.dist-info}/METADATA +1 -1
  14. {arelle_release-2.37.4.dist-info → arelle_release-2.37.6.dist-info}/RECORD +25 -24
  15. {arelle_release-2.37.4.dist-info → arelle_release-2.37.6.dist-info}/WHEEL +1 -1
  16. tests/integration_tests/validation/assets.py +43 -0
  17. tests/integration_tests/validation/conformance_suite_configs.py +2 -0
  18. tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py +118 -0
  19. tests/resources/conformance_suites/nl_nt16/fr_nl/1-04-invalid.xbrl +5 -0
  20. tests/resources/conformance_suites/nl_nt17/fr_nl/1-04-invalid.xbrl +5 -0
  21. tests/resources/conformance_suites/nl_nt18/fr_nl/1-04-invalid.xbrl +5 -0
  22. tests/resources/conformance_suites/nl_nt19/fr_nl/1-04-invalid.xbrl +5 -0
  23. {arelle_release-2.37.4.dist-info → arelle_release-2.37.6.dist-info}/entry_points.txt +0 -0
  24. {arelle_release-2.37.4.dist-info → arelle_release-2.37.6.dist-info}/licenses/LICENSE.md +0 -0
  25. {arelle_release-2.37.4.dist-info → arelle_release-2.37.6.dist-info}/top_level.txt +0 -0
@@ -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
- basefile = self.cntlr.webCache.getfilename(self.url) if self.cntlr is not None else self.url
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(self.url)
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(self.url, reload=reloadCache)
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
- return any(url.startswith(mapFrom)
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) # type: ignore[no-untyped-call]
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(filepath, normalize=True) # normalize is separate step in ModelDocument retrieval, combined here
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
@@ -17,5 +17,5 @@ __version__: str
17
17
  __version_tuple__: VERSION_TUPLE
18
18
  version_tuple: VERSION_TUPLE
19
19
 
20
- __version__ = version = '2.37.4'
21
- __version_tuple__ = version_tuple = (2, 37, 4)
20
+ __version__ = version = '2.37.6'
21
+ __version_tuple__ = version_tuple = (2, 37, 6)
@@ -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 == Type.INLINEXBRL for lP in linkPrototypes)):
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)
@@ -2,4 +2,4 @@ DISCLOSURE_SYSTEM_NT16 = 'NT16'
2
2
  DISCLOSURE_SYSTEM_NT17 = 'NT17'
3
3
  DISCLOSURE_SYSTEM_NT18 = 'NT18'
4
4
  DISCLOSURE_SYSTEM_NT19 = 'NT19'
5
- DISCLOSURE_SYSTEM_INLINE_NT19 = 'INLINE-NT19'
5
+ DISCLOSURE_SYSTEM_NL_INLINE_2024 = 'NL-INLINE-2024'
@@ -21,22 +21,25 @@ XBRLI_IDENTIFIER_SCHEMA = 'http://www.kvk.nl/kvk-id'
21
21
 
22
22
  @dataclass
23
23
  class PluginValidationDataExtension(PluginData):
24
- financialReportingPeriodCurrentStartDateQn: QName
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 getContextWithPeriodTime(self, modelXbrl: ModelXbrl) -> list[ModelContext | None]:
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 getContextWithPeriodTimeZone(self, modelXbrl: ModelXbrl) -> list[ModelContext | None]:
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, DISCLOSURE_SYSTEM_INLINE_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 == DISCLOSURE_SYSTEM_INLINE_NT19:
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
- financialReportingPeriodCurrentStartDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodCurrentStartDate'),
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, DISCLOSURE_SYSTEM_INLINE_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-NT19|inline-nt19|kvk-ixbrl-2024-preview"
8
- description="Checks for NT2024"
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
- DISCLOSURE_SYSTEM_INLINE_NT19
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
- DISCLOSURE_SYSTEM_INLINE_NT19
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
- DISCLOSURE_SYSTEM_INLINE_NT19
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.getContextWithPeriodTime(val.modelXbrl)
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
- DISCLOSURE_SYSTEM_INLINE_NT19
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.getContextWithPeriodTimeZone(val.modelXbrl)
137
- if len(pluginData.getContextWithPeriodTimeZone(val.modelXbrl)) !=0:
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
+ )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arelle-release
3
- Version: 2.37.4
3
+ Version: 2.37.6
4
4
  Summary: An open source XBRL platform.
5
5
  Author-email: "arelle.org" <support@arelle.org>
6
6
  License: Apache-2.0
@@ -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=hz3fWQ1Rh9iwOPevhTQwXUD_uUa5Q6w8sCg5XHYYJFs,24445
24
- arelle/FileSource.py,sha256=taHsKayOlZPOYXDsFPbTz7qTaPBgYNaXkczRh2is8r0,46012
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=l5HcggS5948YQpDXhvDv2NG0LnUIfTMNmdzrFlEL-bE,129222
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=JNjlgA8On4Ero2DjRNxCYKAs6L8DyJlmZD24Ch712bQ,55312
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=5SpVYrjJ8HXJESb6Hj4zVwSMneHW2U31a6HFjEleIz4,513
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=hAIuRG6vugWEpqpWvx80ELfoKl1pinnNbpX8X4ERe-4,55226
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=VFMcO8GJ8kIqhOV5McyEejaGJOR5JrmeF8GdFuS9IZw,174
381
- arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=kqXQIj3HKadldzDSvTkAF70hAWaLfqZSkmCx0Zkr1Ss,4930
382
- arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=VuvveUzLJ-1oTB394MSD2c2JeoLyys8y2Z13COHEnPs,14909
383
- arelle/plugin/validate/NL/__init__.py,sha256=9NkkfosHnAzJhBa84KDAsoyU7vd4_DO3GYKTSvKuOk8,2554
384
- arelle/plugin/validate/NL/resources/config.xml,sha256=vu5pA-Iw6cgb5aep8LNLNPCkmG1QF6RTw3TCgEIest8,1102
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=WVPUTAnfkCyAsDGW7p5QTXjAuafyy0PDkK2hCy3ILrg,4811
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.4.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
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=KLiv3HJTXn_tZW6icEaEtvcr9MrfMh-bHe27V5LLssE,6153
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=b1-iQc0ZBzq_G6mCLIk2URYaoI5pWp6QGENavOHZNr8,7187
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=nGr5voxDxGbS-VBXnMc_yByJEQSQXhESamogtuGu3p8,1188
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=nGr5voxDxGbS-VBXnMc_yByJEQSQXhESamogtuGu3p8,1188
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=nGr5voxDxGbS-VBXnMc_yByJEQSQXhESamogtuGu3p8,1188
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=nGr5voxDxGbS-VBXnMc_yByJEQSQXhESamogtuGu3p8,1188
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.4.dist-info/METADATA,sha256=RBTxyp_I3ftToxojuqIQI1eN2Agy53wcni_WikFT8ac,9064
1559
- arelle_release-2.37.4.dist-info/WHEEL,sha256=SmOxYU7pzNKBqASvQJ7DjX3XGUF92lrGhMb3R6_iiqI,91
1560
- arelle_release-2.37.4.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
1561
- arelle_release-2.37.4.dist-info/top_level.txt,sha256=ZYmYGmhW5Jvo3vJ4iXBZPUI29LvYhntom04w90esJvU,13
1562
- arelle_release-2.37.4.dist-info/RECORD,,
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,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (79.0.1)
2
+ Generator: setuptools (80.3.1)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5
 
@@ -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 "&#174;">
4
+ <!ENTITY plus "&#43;">
5
+ ]>
1
6
  <xbrl xmlns="http://www.xbrl.org/2003/instance" title="Test&reg;"> <!-- CAUSE: disallowed named reference, in attribute -->
2
7
  <!-- &#1080; &#1081; --> <!-- CAUSE: disallowed decimal numeric references, in comment -->
3
8
  <!-- &#x0000; &#x20D0; --> <!-- 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 "&#174;">
4
+ <!ENTITY plus "&#43;">
5
+ ]>
1
6
  <xbrl xmlns="http://www.xbrl.org/2003/instance" title="Test&reg;"> <!-- CAUSE: disallowed named reference, in attribute -->
2
7
  <!-- &#1080; &#1081; --> <!-- CAUSE: disallowed decimal numeric references, in comment -->
3
8
  <!-- &#x0000; &#x20D0; --> <!-- 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 "&#174;">
4
+ <!ENTITY plus "&#43;">
5
+ ]>
1
6
  <xbrl xmlns="http://www.xbrl.org/2003/instance" title="Test&reg;"> <!-- CAUSE: disallowed named reference, in attribute -->
2
7
  <!-- &#1080; &#1081; --> <!-- CAUSE: disallowed decimal numeric references, in comment -->
3
8
  <!-- &#x0000; &#x20D0; --> <!-- 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 "&#174;">
4
+ <!ENTITY plus "&#43;">
5
+ ]>
1
6
  <xbrl xmlns="http://www.xbrl.org/2003/instance" title="Test&reg;"> <!-- CAUSE: disallowed named reference, in attribute -->
2
7
  <!-- &#1080; &#1081; --> <!-- CAUSE: disallowed decimal numeric references, in comment -->
3
8
  <!-- &#x0000; &#x20D0; --> <!-- CAUSE: disallowed hexadecimal numeric references, in comment -->