arelle-release 2.37.31__py3-none-any.whl → 2.37.32__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/_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.31'
21
- __version_tuple__ = version_tuple = (2, 37, 31)
20
+ __version__ = version = '2.37.32'
21
+ __version_tuple__ = version_tuple = (2, 37, 32)
@@ -1112,18 +1112,26 @@ def validateCssUrl(cssContent:str, normalizedUri:str, modelXbrl: ModelXbrl, val:
1112
1112
  _("Fonts SHOULD be included in the XHTML document as a base64 encoded string: %(file)s."),
1113
1113
  modelObject=elt, file=css_rule.value)
1114
1114
  if isinstance(css_element, tinycss2.ast.QualifiedRule):
1115
- validateCssUrlContent(css_element.content, normalizedUri, modelXbrl, val, elt, params)
1116
-
1117
-
1118
- def validateCssUrlContent(cssRules: list[Any], normalizedUri:str, modelXbrl: ModelXbrl, val: ValidateXbrl, elt: ModelObject, params: ImageValidationParameters) -> None:
1115
+ validateCssUrlContent(css_element.content, normalizedUri, modelXbrl, val, elt, params, css_element.prelude)
1116
+
1117
+
1118
+ def validateCssUrlContent(
1119
+ cssRules: list[Any],
1120
+ normalizedUri:str,
1121
+ modelXbrl: ModelXbrl,
1122
+ val: ValidateXbrl,
1123
+ elt: ModelObject,
1124
+ params: ImageValidationParameters,
1125
+ prelude: list[Any] | None = None,
1126
+ ) -> None:
1119
1127
  for css_rule in cssRules:
1120
1128
  if isinstance(css_rule, tinycss2.ast.FunctionBlock):
1121
1129
  if css_rule.lower_name == "url":
1122
1130
  if len(css_rule.arguments):
1123
1131
  css_rule_url = css_rule.arguments[0].value # url or base64
1124
1132
  evaluatedMsg = _('On line {line}').format(line=1) #css_element.source_line)
1125
- validateImageAndLog(normalizedUri, css_rule_url, modelXbrl, val, elt, evaluatedMsg, params)
1133
+ validateImageAndLog(normalizedUri, css_rule_url, modelXbrl, val, elt, evaluatedMsg, params, prelude)
1126
1134
  elif isinstance(css_rule, tinycss2.ast.URLToken):
1127
1135
  value = css_rule.value
1128
1136
  evaluatedMsg = _('On line {line}').format(line=1) #css_element.source_line)
1129
- validateImageAndLog(normalizedUri, value, modelXbrl, val, elt, evaluatedMsg, params)
1137
+ validateImageAndLog(normalizedUri, value, modelXbrl, val, elt, evaluatedMsg, params, prelude)
@@ -226,6 +226,9 @@ class PluginValidationDataExtension(PluginData):
226
226
  financialReportingPeriodPreviousStartDateQn: QName
227
227
  financialReportingPeriodPreviousEndDateQn: QName
228
228
  formattedExplanationItemTypeQn: QName
229
+ ifrsIdentifier: str
230
+ permissibleGAAPRootAbstracts: frozenset[QName]
231
+ permissibleIFRSRootAbstracts: frozenset[QName]
229
232
  textFormattingSchemaPath: str
230
233
  textFormattingWrapper: str
231
234
 
@@ -22,9 +22,11 @@ class ValidationPluginExtension(ValidationPlugin):
22
22
  def newPluginData(self, validateXbrl: ValidateXbrl) -> PluginValidationDataExtension:
23
23
  disclosureSystem = validateXbrl.disclosureSystem.name
24
24
  if disclosureSystem == DISCLOSURE_SYSTEM_NT16:
25
+ ifrsNamespace = None
25
26
  jenvNamespace = 'http://www.nltaxonomie.nl/nt16/jenv/20211208/dictionary/jenv-bw2-data'
26
27
  kvkINamespace = 'http://www.nltaxonomie.nl/nt16/kvk/20211208/dictionary/kvk-data'
27
28
  nlTypesNamespace = 'http://www.nltaxonomie.nl/nt16/sbr/20210301/dictionary/nl-types'
29
+ rjNamespace = None
28
30
  entrypointRoot = 'http://www.nltaxonomie.nl/nt16/kvk/20211208/entrypoints/'
29
31
  entrypoints = {entrypointRoot + e for e in [
30
32
  'kvk-rpt-jaarverantwoording-2021-ifrs-full.xsd',
@@ -58,9 +60,11 @@ class ValidationPluginExtension(ValidationPlugin):
58
60
  'kvk-rpt-jaarverantwoording-2021-nlgaap-zorginstellingen.xsd',
59
61
  ]}
60
62
  elif disclosureSystem == DISCLOSURE_SYSTEM_NT17:
63
+ ifrsNamespace = None
61
64
  jenvNamespace = 'http://www.nltaxonomie.nl/nt17/jenv/20221214/dictionary/jenv-bw2-data'
62
65
  kvkINamespace = 'http://www.nltaxonomie.nl/nt17/kvk/20221214/dictionary/kvk-data'
63
66
  nlTypesNamespace = 'http://www.nltaxonomie.nl/nt17/sbr/20220301/dictionary/nl-types'
67
+ rjNamespace = None
64
68
  entrypointRoot = 'http://www.nltaxonomie.nl/nt17/kvk/20221214/entrypoints/'
65
69
  entrypoints = {entrypointRoot + e for e in [
66
70
  'kvk-rpt-jaarverantwoording-2022-ifrs-full.xsd',
@@ -95,9 +99,11 @@ class ValidationPluginExtension(ValidationPlugin):
95
99
  'kvk-rpt-jaarverantwoording-2022-nlgaap-zorginstellingen.xsd',
96
100
  ]}
97
101
  elif disclosureSystem == DISCLOSURE_SYSTEM_NT18:
102
+ ifrsNamespace = None
98
103
  jenvNamespace = 'http://www.nltaxonomie.nl/nt18/jenv/20231213/dictionary/jenv-bw2-data'
99
104
  kvkINamespace = 'http://www.nltaxonomie.nl/nt18/kvk/20231213/dictionary/kvk-data'
100
105
  nlTypesNamespace = 'http://www.nltaxonomie.nl/nt18/sbr/20230301/dictionary/nl-types'
106
+ rjNamespace = None
101
107
  entrypointRoot = 'http://www.nltaxonomie.nl/nt18/kvk/20231213/entrypoints/'
102
108
  entrypoints = {entrypointRoot + e for e in [
103
109
  'kvk-rpt-jaarverantwoording-2023-ifrs-full.xsd',
@@ -132,9 +138,11 @@ class ValidationPluginExtension(ValidationPlugin):
132
138
  'kvk-rpt-jaarverantwoording-2023-nlgaap-zorginstellingen.xsd',
133
139
  ]}
134
140
  elif disclosureSystem == DISCLOSURE_SYSTEM_NT19:
141
+ ifrsNamespace = None
135
142
  jenvNamespace = 'http://www.nltaxonomie.nl/nt19/jenv/20241211/dictionary/jenv-bw2-data'
136
143
  kvkINamespace = 'http://www.nltaxonomie.nl/nt19/kvk/20241211/dictionary/kvk-data'
137
144
  nlTypesNamespace = 'http://www.nltaxonomie.nl/nt19/sbr/20240301/dictionary/nl-types'
145
+ rjNamespace = None
138
146
  entrypointRoot = 'http://www.nltaxonomie.nl/nt19/kvk/20241211/entrypoints/'
139
147
  entrypoints = {entrypointRoot + e for e in [
140
148
  'kvk-rpt-jaarverantwoording-2024-ifrs-full.xsd',
@@ -169,18 +177,22 @@ class ValidationPluginExtension(ValidationPlugin):
169
177
  'kvk-rpt-jaarverantwoording-2024-nlgaap-zorginstellingen.xsd',
170
178
  ]}
171
179
  elif disclosureSystem == DISCLOSURE_SYSTEM_NL_INLINE_2024:
180
+ ifrsNamespace = 'https://xbrl.ifrs.org/taxonomy/2024-03-27/ifrs-full'
172
181
  jenvNamespace = 'https://www.nltaxonomie.nl/bw2-titel9/2024-12-31/bw2-titel9-cor'
173
- kvkINamespace = None
182
+ kvkINamespace = 'https://www.nltaxonomie.nl/kvk/2024-12-31/kvk-cor'
174
183
  nlTypesNamespace = None
184
+ rjNamespace = 'https://www.nltaxonomie.nl/rj/2024-12-31/rj-cor'
175
185
  entrypointRoot = 'http://www.nltaxonomie.nl/kvk/2024-12-31/'
176
186
  entrypoints = {entrypointRoot + e for e in [
177
187
  'kvk-annual-report-ifrs-ext.xsd',
178
188
  'kvk-annual-report-nlgaap-ext.xsd',
179
189
  ]}
180
190
  elif disclosureSystem == DISCLOSURE_SYSTEM_NL_INLINE_2024_GAAP_OTHER:
191
+ ifrsNamespace = 'https://xbrl.ifrs.org/taxonomy/2024-03-27/ifrs-full'
181
192
  jenvNamespace = 'https://www.nltaxonomie.nl/bw2-titel9/2024-12-31/bw2-titel9-cor'
182
- kvkINamespace = None
193
+ kvkINamespace = 'https://www.nltaxonomie.nl/kvk/2024-12-31/kvk-cor'
183
194
  nlTypesNamespace = None
195
+ rjNamespace = 'https://www.nltaxonomie.nl/rj/2024-12-31/rj-cor'
184
196
  entrypointRoot = 'http://www.nltaxonomie.nl/kvk/2024-12-31/'
185
197
  entrypoints = {entrypointRoot + e for e in [
186
198
  'kvk-annual-report-other-gaap.xsd',
@@ -201,6 +213,23 @@ class ValidationPluginExtension(ValidationPlugin):
201
213
  financialReportingPeriodPreviousStartDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodPreviousStartDate'),
202
214
  financialReportingPeriodPreviousEndDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodPreviousEndDate'),
203
215
  formattedExplanationItemTypeQn=qname(f'{{{nlTypesNamespace}}}formattedExplanationItemType'),
216
+ ifrsIdentifier = 'https://xbrl.ifrs.org',
217
+ permissibleGAAPRootAbstracts=frozenset([
218
+ qname(f'{{{jenvNamespace}}}BalanceSheetTitle'),
219
+ qname(f'{{{jenvNamespace}}}IncomeStatementTitle'),
220
+ qname(f'{{{jenvNamespace}}}StatementOfComprehensiveIncomeTitle'),
221
+ qname(f'{{{jenvNamespace}}}EquityStatementOfChangesTitle'),
222
+ qname(f'{{{kvkINamespace}}}AnnualReportFilingInformationTitle'),
223
+ qname(f'{{{rjNamespace}}}StatementOfCashFlowsTitle'),
224
+ ]),
225
+ permissibleIFRSRootAbstracts=frozenset([
226
+ qname(f'{{{ifrsNamespace}}}StatementOfFinancialPositionAbstract'),
227
+ qname(f'{{{ifrsNamespace}}}IncomeStatementAbstract'),
228
+ qname(f'{{{ifrsNamespace}}}StatementOfComprehensiveIncomeAbstract'),
229
+ qname(f'{{{ifrsNamespace}}}StatementOfCashFlowsAbstract'),
230
+ qname(f'{{{ifrsNamespace}}}StatementOfChangesInEquityAbstract'),
231
+ qname(f'{{{kvkINamespace}}}AnnualReportFilingInformationTitle'),
232
+ ]),
204
233
  textFormattingSchemaPath='sbr-text-formatting.xsd',
205
234
  textFormattingWrapper='<formattedText xmlns="http://www.nltaxonomie.nl/2017/xbrl/sbr-text-formatting">{}</formattedText>',
206
235
  )
@@ -18,7 +18,7 @@ from arelle.ModelInstanceObject import ModelInlineFact
18
18
  from arelle.ModelObject import ModelObject
19
19
  from arelle.PrototypeDtsObject import PrototypeObject
20
20
  from arelle.ValidateDuplicateFacts import getDuplicateFactSets
21
- from arelle.XbrlConst import standardLabel
21
+ from arelle.XbrlConst import parentChild, standardLabel
22
22
  from arelle.XmlValidateConst import VALID
23
23
 
24
24
  from arelle import XbrlConst, XmlUtil, ModelDocument
@@ -1798,6 +1798,41 @@ def rule_nl_kvk_6_1_1_1(
1798
1798
  )
1799
1799
 
1800
1800
 
1801
+ @validation(
1802
+ hook=ValidationHook.XBRL_FINALLY,
1803
+ disclosureSystems=NL_INLINE_GAAP_IFRS_DISCLOSURE_SYSTEMS,
1804
+ )
1805
+ def rule_nl_kvk_RTS_Annex_II_Par_1_RTS_Annex_IV_par_7(
1806
+ pluginData: PluginValidationDataExtension,
1807
+ val: ValidateXbrl,
1808
+ *args: Any,
1809
+ **kwargs: Any,
1810
+ ) -> Iterable[Validation]:
1811
+ """
1812
+ NL-KVK.RTS_Annex_II_Par_1_RTS_Annex_IV_par_7: Legal entities should mark all amounts in a designated currency included in a. the balance sheet, income statement, cash flow statement,
1813
+ statement of comprehensive income and statement of changes in equity of the (consolidated) financial statements based on NL-GAAP; or b. the statement of financial position,
1814
+ the income statement (separately or as part of the statement of comprehensive income), the statement of comprehensive income, the statement of changes in equity and
1815
+ the statement of cash flows of the (consolidated) financial statements based on IFRS.
1816
+ """
1817
+ warnings = []
1818
+ permissibleAbstracts = pluginData.permissibleGAAPRootAbstracts
1819
+ ifrsMatch = any(k.startswith(pluginData.ifrsIdentifier) for k in val.modelXbrl.namespaceDocs.keys())
1820
+ if ifrsMatch:
1821
+ permissibleAbstracts = pluginData.permissibleIFRSRootAbstracts
1822
+ for ELR in val.modelXbrl.relationshipSet(parentChild).linkRoleUris:
1823
+ relSet = val.modelXbrl.relationshipSet(parentChild, ELR)
1824
+ for rootConcept in relSet.rootConcepts:
1825
+ if relSet.fromModelObject(rootConcept):
1826
+ if not rootConcept.qname in permissibleAbstracts:
1827
+ warnings.append(rootConcept)
1828
+ if len(warnings) > 0:
1829
+ yield Validation.warning(
1830
+ codes='NL.NL-KVK.RTS_Annex_II_Par_1_RTS_Annex_IV_par_7.missingRelevantPlaceholder',
1831
+ msg=_('A root abstract is being used that is not one of the starting abstracts defined by the regulator. Review abstracts in use and update to defined abstracts.'),
1832
+ modelObject=warnings
1833
+ )
1834
+
1835
+
1801
1836
  @validation(
1802
1837
  hook=ValidationHook.XBRL_FINALLY,
1803
1838
  disclosureSystems=NL_INLINE_GAAP_IFRS_DISCLOSURE_SYSTEMS,
@@ -454,7 +454,7 @@ def validateXbrlFinally(val, *args, **kwargs):
454
454
  _("Image scope must be base-64 encoded string (starting with data:image/*;base64), *=gif, jpeg or png. src disallowed: %(src)s."),
455
455
  modelObject=elt, src=attrValue[:128])
456
456
  for elt in rootElt.iterdescendants(tag="{http://www.w3.org/1999/xhtml}style"):
457
- _validateScriptElement(elt, modelXbrl)
457
+ _validateStyleElement(elt, modelXbrl)
458
458
  for elt in rootElt.xpath("//xhtml:*[@style]", namespaces={"xhtml": "http://www.w3.org/1999/xhtml"}):
459
459
  _validateStyleAttribute(elt, modelXbrl)
460
460
 
@@ -468,7 +468,7 @@ def validateXbrlFinally(val, *args, **kwargs):
468
468
  modelXbrl.modelManager.showStatus(None)
469
469
 
470
470
 
471
- def _validateScriptElement(elt, modelXbrl):
471
+ def _validateStyleElement(elt, modelXbrl):
472
472
  cssElements = tinycss2.parse_stylesheet(elt.text)
473
473
  for css_element in cssElements:
474
474
  if isinstance(css_element, tinycss2.ast.QualifiedRule):
@@ -479,9 +479,10 @@ def _validateScriptElement(elt, modelXbrl):
479
479
  elif _isExternalImageUrl(cssProperty, elem):
480
480
  modelXbrl.error(
481
481
  "HMRC.SG.3.8",
482
- _("Style element has disallowed image reference: %(styleImage)s."),
482
+ _("Style element has disallowed image reference: %(cssSelectors)s, %(styleImage)s."),
483
483
  modelObject=elt,
484
- styleImage=elem.arguments[0].value
484
+ cssSelectors=tinycss2.serialize(css_element.prelude).strip(),
485
+ styleImage=elem.arguments[0].value,
485
486
  )
486
487
  return
487
488
  elif isinstance(css_element, tinycss2.ast.ParseError):
@@ -5,22 +5,22 @@ from __future__ import annotations
5
5
 
6
6
  import binascii
7
7
  import os
8
-
8
+ from collections.abc import Iterable
9
9
  from dataclasses import dataclass
10
- from typing import cast, Iterable
10
+ from typing import Any, cast
11
11
  from urllib.parse import unquote
12
12
 
13
- from lxml.etree import XML, XMLSyntaxError
14
- from lxml.etree import _Element
13
+ import tinycss2 # type: ignore[import-untyped]
14
+ from lxml.etree import XML, XMLSyntaxError, _Element
15
15
 
16
16
  from arelle import ModelDocument
17
17
  from arelle.ModelObjectFactory import parser
18
18
  from arelle.ModelXbrl import ModelXbrl
19
+ from arelle.typing import TypeGetText
19
20
  from arelle.UrlUtil import decodeBase64DataImage, scheme
21
+ from arelle.utils.validate.Validation import Validation
20
22
  from arelle.ValidateFilingText import parseImageDataURL, validateGraphicHeaderType
21
23
  from arelle.ValidateXbrl import ValidateXbrl
22
- from arelle.typing import TypeGetText
23
- from arelle.utils.validate.Validation import Validation
24
24
 
25
25
  _: TypeGetText # Handle gettext
26
26
 
@@ -61,7 +61,9 @@ def validateImageAndLog(
61
61
  elts: _Element | list[_Element],
62
62
  evaluatedMsg: str,
63
63
  params: ImageValidationParameters,
64
+ prelude: list[Any] | None = None,
64
65
  ) -> None:
66
+ cssSelectors = None
65
67
  for validation in validateImage(
66
68
  baseUrl=baseUrl,
67
69
  image=image,
@@ -71,7 +73,14 @@ def validateImageAndLog(
71
73
  evaluatedMsg=evaluatedMsg,
72
74
  params=params,
73
75
  ):
74
- modelXbrl.log(level=validation.level.name, codes=validation.codes, msg=validation.msg, **validation.args)
76
+ if cssSelectorsArg := validation.args.get("cssSelectors"):
77
+ raise ValueError(_("The 'cssSelectors' argument is reserved to record the CSS selector. It should not be present in the validation arguments: {}").format(cssSelectorsArg))
78
+ if prelude and cssSelectors is None:
79
+ cssSelectors = tinycss2.serialize(prelude).strip()
80
+ args = validation.args.copy()
81
+ if cssSelectors:
82
+ args["cssSelectors"] = cssSelectors
83
+ modelXbrl.log(level=validation.level.name, codes=validation.codes, msg=validation.msg, **args)
75
84
 
76
85
  # check image contents against mime/file ext and for Steganography
77
86
  def validateImage(
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arelle-release
3
- Version: 2.37.31
3
+ Version: 2.37.32
4
4
  Summary: An open source XBRL platform.
5
5
  Author-email: "arelle.org" <support@arelle.org>
6
6
  License-Expression: Apache-2.0
@@ -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=LXwm4N6xleTL-6YANibNIENFoy1W4bsQPlh3mMEUrok,515
126
+ arelle/_version.py,sha256=m-gO1caTwfeHVfdBB-QTMwoN7CB9yG_i_tAd7ghMNoo,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,7 +409,7 @@ arelle/plugin/validate/ESEF/ESEF_2021/Image.py,sha256=4bnhuy5viBU0viPjb4FhcRRjVV
409
409
  arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py,sha256=l4Nl-QuYJlM4WDpg87YjTwMUh05VP7tNq86gLFhWHyE,63380
410
410
  arelle/plugin/validate/ESEF/ESEF_2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
411
411
  arelle/plugin/validate/ESEF/ESEF_Current/DTS.py,sha256=epp-PBh1NJzQqgxUE6C468HmoDc2w3j54rMwfiOAry4,29334
412
- arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py,sha256=tWgBYHtnEosZTOBN3p-DguhYwCCNhf8xvk5K5qcZK_I,73637
412
+ arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py,sha256=tGoQSorcO-lhuL37aqrfSDBBRtsMyHQuwILAiFbzwHs,73769
413
413
  arelle/plugin/validate/ESEF/ESEF_Current/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
414
414
  arelle/plugin/validate/ESEF/resources/authority-validations.json,sha256=JriLZ45KmUYlQiPbXJCAahobqdrst64Ay77bofZhB5Q,14940
415
415
  arelle/plugin/validate/ESEF/resources/config.xml,sha256=t3STU_-QYM7Ay8YwZRPapnohiWVWhjfr4L2Rjx9xN9U,3902
@@ -418,8 +418,8 @@ arelle/plugin/validate/FERC/config.xml,sha256=bn9b8eCqJA1J62rYq1Nz85wJrMGAahVmmn
418
418
  arelle/plugin/validate/FERC/resources/ferc-utr.xml,sha256=OCRj9IUpdXATCBXKbB71apYx9kxcNtZW-Hq4s-avsRY,2663
419
419
  arelle/plugin/validate/NL/DisclosureSystems.py,sha256=urRmYJ8RnGPlTgSVKW7zGN4_4CtL3OVKlcI3LwTpBz4,561
420
420
  arelle/plugin/validate/NL/LinkbaseType.py,sha256=BwRQl4XZFFCopufC2FEMLhYENNTk2JUWVQvnIUsaqtI,3108
421
- arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=en-x3J_sH9w-lIJzNwKRE6rRJ2fgovovVtq7n7QLo4E,34667
422
- arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=suCNqrtC_IMndyS_mXaeujDvjgSduTQ9KPNRc9B0F6I,16098
421
+ arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=PQFQmJWLDqe4LXBMQ0u1VyaCejoUCaFzURrsyADZ-0Y,34793
422
+ arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=Pjg-tOTTn3qi5G-Ue1i8AmCXz5uGeFZlemdeL1O8HCA,17872
423
423
  arelle/plugin/validate/NL/__init__.py,sha256=W-SHohiAWM7Yi77gAbt-D3vvZNAB5s1j16mHCTFta6w,3158
424
424
  arelle/plugin/validate/NL/resources/config.xml,sha256=qBE6zywFSmemBSWonuTII5iuOCUlNb1nvkpMbsZb5PM,1853
425
425
  arelle/plugin/validate/NL/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
@@ -427,7 +427,7 @@ arelle/plugin/validate/NL/rules/br_kvk.py,sha256=0SwKieWzTDm3YMsXPS6zTdgbk7_Z9Cz
427
427
  arelle/plugin/validate/NL/rules/fg_nl.py,sha256=4Puq5wAjtK_iNd4wisH_R0Z_EKJ7MT2OCai5g4t1MPE,10714
428
428
  arelle/plugin/validate/NL/rules/fr_kvk.py,sha256=kYqXt45S6eM32Yg9ii7pUhOMfJaHurgYqQ73FyQALs8,8171
429
429
  arelle/plugin/validate/NL/rules/fr_nl.py,sha256=-M1WtXp06khhtkfOVPCa-b8UbC281gk4YfDhvtAVlnI,31424
430
- arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=mMPMeGhhlYEhC9LMHVaFfHzIpqJObl9ukU8cuuitaRU,88446
430
+ arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=oDEFuHtrTsHyTFncJ0haWYifNxr6LcQ7Q4JDm0cUxWQ,90426
431
431
  arelle/plugin/validate/ROS/DisclosureSystems.py,sha256=rJ81mwQDYTi6JecFZ_zhqjjz3VNQRgjHNSh0wcQWAQE,18
432
432
  arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=IV7ILhNvgKwQXqbpSA6HRNt9kEnejCyMADI3wyyIgk0,4036
433
433
  arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=FBhEp8t396vGdvCbMEimfcxmGiGnhXMen-yVLWnkFaI,758
@@ -437,7 +437,7 @@ arelle/plugin/validate/ROS/resources/config.xml,sha256=HXWume5HlrAqOx5AtiWWqgADb
437
437
  arelle/plugin/validate/ROS/rules/__init__.py,sha256=wW7BUAIb7sRkOxC1Amc_ZKrz03FM-Qh1TyZe6wxYaAU,1567
438
438
  arelle/plugin/validate/ROS/rules/ros.py,sha256=6DciQvv3H9QCEaDgINfHejZd196pEulUcQHk2qqMWhs,19921
439
439
  arelle/plugin/validate/UK/ValidateUK.py,sha256=0UhSwsY1lrY-EAEBJJR9QY38YXGBZ6PEgmuC5gQfBlI,57813
440
- arelle/plugin/validate/UK/__init__.py,sha256=WOAbzcogxP2hD3HmNnVIrvUO4w0Cv36447AoPrMa7KU,30548
440
+ arelle/plugin/validate/UK/__init__.py,sha256=KE6s_B-EvrHDCtWQz2N_wQwyx_ZbWhYNV2GfQnluxMw,30655
441
441
  arelle/plugin/validate/UK/config.xml,sha256=mUFhWDfBzGTn7v0ZSmf4HaweQTMJh_4ZcJmD9mzCHrA,1547
442
442
  arelle/plugin/validate/UK/consistencyChecksByName.json,sha256=BgB9YAWzmcsX-_rU74RBkABwEsS75vrMlwBHsYCz2R0,25247
443
443
  arelle/plugin/validate/UK/hmrc-taxonomies.xml,sha256=3lR-wb2sooAddQkVqqRzG_VqLuHq_MQ8kIaXAQs1KVk,9623
@@ -743,16 +743,16 @@ arelle/utils/PluginHooks.py,sha256=CeVxti23VjERQl4xWFucDVTW63TCG2PUdnxpjd3x_Ms,3
743
743
  arelle/utils/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
744
744
  arelle/utils/validate/Decorator.py,sha256=8LGmA171HZgKrALtsMKyHqMNM-XCdwJOv6KpZz4pC2c,3161
745
745
  arelle/utils/validate/DetectScriptsInXhtml.py,sha256=RFBh_Z24OjR69s71qQzSzbxdU-WCTWuvYlONN-BgpZ0,2098
746
- arelle/utils/validate/ESEFImage.py,sha256=qel9_DgZGAQnCM45YQ93HLspuIK0JEUg4uotj82UarI,14907
746
+ arelle/utils/validate/ESEFImage.py,sha256=eEPoe8h6KYi_4YNjWXuvYHmoEvCT-JB7KQLJPDhpIgQ,15485
747
747
  arelle/utils/validate/Validation.py,sha256=n6Ag7VeCj_VO5nqzw_P53hOfXXeT2APK0Enb3UQqBns,832
748
748
  arelle/utils/validate/ValidationPlugin.py,sha256=_WeRPXZUTCcSN3FLbFwiAe_2pAUTxZZk1061qMoDW8w,11527
749
749
  arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txrxRFgh8FxIs,548
750
750
  arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
751
751
  arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
752
752
  arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
753
- arelle_release-2.37.31.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
754
- arelle_release-2.37.31.dist-info/METADATA,sha256=bL6O3WLyWJ64s470luXZ7e5-pQIB54EbXSOpMrnsaAM,9137
755
- arelle_release-2.37.31.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
756
- arelle_release-2.37.31.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
757
- arelle_release-2.37.31.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
758
- arelle_release-2.37.31.dist-info/RECORD,,
753
+ arelle_release-2.37.32.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
754
+ arelle_release-2.37.32.dist-info/METADATA,sha256=iMCJccDRHFwxm12EgJp0s1_-vKC9Z77dQUKe1Pc5MzQ,9137
755
+ arelle_release-2.37.32.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
756
+ arelle_release-2.37.32.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
757
+ arelle_release-2.37.32.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
758
+ arelle_release-2.37.32.dist-info/RECORD,,