arelle-release 2.37.36__py3-none-any.whl → 2.37.37__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.36'
21
- __version_tuple__ = version_tuple = (2, 37, 36)
20
+ __version__ = version = '2.37.37'
21
+ __version_tuple__ = version_tuple = (2, 37, 37)
@@ -3,10 +3,11 @@ See COPYRIGHT.md for copyright information.
3
3
  """
4
4
  from __future__ import annotations
5
5
 
6
- from collections.abc import Iterable
7
- from typing import Any
6
+ from collections import defaultdict
7
+ from typing import Any, Iterable
8
8
 
9
9
  from arelle import XbrlConst
10
+ from arelle.ModelDtsObject import ModelResource, ModelConcept
10
11
  from arelle.ValidateXbrl import ValidateXbrl
11
12
  from arelle.typing import TypeGetText
12
13
  from arelle.utils.PluginHooks import ValidationHook
@@ -40,9 +41,83 @@ def rule_frta_2_1_9(
40
41
  for elt in rootElt.iterdescendants(XbrlConst.qnXsdDocumentation.clarkNotation):
41
42
  errors.append(elt)
42
43
  if len(errors) > 0:
43
- yield Validation.error(
44
+ yield Validation.warning(
44
45
  codes='EDINET.EC5710W.FRTA.2.1.9',
45
46
  msg=_("All documentation of a concept must be contained in XBRL linkbases. "
46
47
  "Taxonomy element declarations should not use the XML Schema documentation element."),
47
48
  modelObject=errors,
48
49
  )
50
+
51
+
52
+ @validation(
53
+ hook=ValidationHook.XBRL_FINALLY,
54
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
55
+ )
56
+ def rule_frta_2_1_11(
57
+ pluginData: PluginValidationDataExtension,
58
+ val: ValidateXbrl,
59
+ *args: Any,
60
+ **kwargs: Any,
61
+ ) -> Iterable[Validation]:
62
+ """
63
+ EDINET.EC5710W: [FRTA.2.1.11] All concepts within a taxonomy schema should have a
64
+ unique label for the standard or verbose role in each language used.
65
+ """
66
+ labelsRelationshipSet = val.modelXbrl.relationshipSet(XbrlConst.conceptLabel)
67
+ labelGroupsByLang: dict[str, dict[str, dict[str, set[ModelConcept]]]] = (
68
+ defaultdict(lambda: defaultdict(lambda: defaultdict(set)))
69
+ )
70
+ relevantRoles = frozenset({
71
+ XbrlConst.standardLabel,
72
+ XbrlConst.verboseLabel
73
+ })
74
+ for concept, modelLabelRels in labelsRelationshipSet.fromModelObjects().items():
75
+ if pluginData.isStandardTaxonomyUrl(concept.modelDocument.uri, val.modelXbrl):
76
+ continue
77
+ for modelLabelRel in modelLabelRels:
78
+ modelLabel = modelLabelRel.toModelObject
79
+ if not isinstance(modelLabel, ModelResource):
80
+ continue
81
+ if modelLabel.role not in relevantRoles:
82
+ continue
83
+ if not modelLabel.modelDocument.inDTS:
84
+ continue
85
+ if not modelLabel.xmlLang:
86
+ continue
87
+ labelGroupsByLang[modelLabel.xmlLang][modelLabel.role][modelLabel.textValue].add(concept)
88
+ for lang, labelGroupsByRole in labelGroupsByLang.items():
89
+ duplicateLabelsByRole = defaultdict(list)
90
+ conceptsWithVerboseLabel = {
91
+ concept: False
92
+ for concept in val.modelXbrl.qnameConcepts.values()
93
+ if not pluginData.isStandardTaxonomyUrl(concept.modelDocument.uri, val.modelXbrl)
94
+ }
95
+ for role, labelGroupsByValue in labelGroupsByRole.items():
96
+ for value, concepts in labelGroupsByValue.items():
97
+ if role == XbrlConst.verboseLabel:
98
+ for concept in concepts:
99
+ conceptsWithVerboseLabel[concept] = True
100
+ if len(concepts) < 2:
101
+ continue
102
+ duplicateLabelsByRole[role].append((value, concepts))
103
+ if len(duplicateLabelsByRole[XbrlConst.standardLabel]) == 0:
104
+ # There are no duplicate standard labels, so we don't need to check verbose labels
105
+ continue
106
+ conceptsWithoutVerboseLabel = {concept for concept, value in conceptsWithVerboseLabel.items() if not value}
107
+ if len(duplicateLabelsByRole[XbrlConst.verboseLabel]) == 0 and len(conceptsWithoutVerboseLabel) == 0:
108
+ # All concepts have a verbose label, and there are no duplicate verbose labels,
109
+ return
110
+ for role, duplicateLabels in duplicateLabelsByRole.items():
111
+ for value, concepts in duplicateLabels:
112
+ yield Validation.warning(
113
+ codes='EDINET.EC5710W.FRTA.2.1.11',
114
+ msg=_("All concepts within a taxonomy schema should have a unique label for the "
115
+ "standard or verbose role in each language used. "
116
+ "The %(role)s label contains a duplicate label ('%(value)s') in the same "
117
+ "language ('%(lang)s'). Define either the standard label or the verbose label "
118
+ "so that they are unique in the same language."),
119
+ role='standard' if role == XbrlConst.standardLabel else 'verbose',
120
+ value=value,
121
+ lang=lang,
122
+ modelObject=concepts,
123
+ )
@@ -268,3 +268,26 @@ def rule_gfm_1_2_26(
268
268
  "decimals attribute."),
269
269
  modelObject=errors,
270
270
  )
271
+
272
+
273
+ @validation(
274
+ hook=ValidationHook.XBRL_FINALLY,
275
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
276
+ )
277
+ def rule_gfm_1_2_27(
278
+ pluginData: PluginValidationDataExtension,
279
+ val: ValidateXbrl,
280
+ *args: Any,
281
+ **kwargs: Any,
282
+ ) -> Iterable[Validation]:
283
+ """
284
+ EDINET.EC5700W: [GFM 1.2.27] An instance must not contain unused units.
285
+ """
286
+ # TODO: Consolidate validations involving unused units
287
+ unusedUnits = set(val.modelXbrl.units.values()) - {fact.unit for fact in val.modelXbrl.facts if fact.unit is not None}
288
+ if len(unusedUnits) > 0:
289
+ yield Validation.warning(
290
+ codes='EDINET.EC5700W.GFM.1.2.27',
291
+ msg=_("Delete unused units from the instance."),
292
+ modelObject=list(unusedUnits)
293
+ )
@@ -344,10 +344,19 @@
344
344
  "formulaRunIDs": "(?!con_IdentifierSchemeMustBeLEI|lei-identifier-scheme)"
345
345
  },
346
346
  "UKFRC-2023": {
347
+ "name": "United Kingdom Multiple Targets",
348
+ "authorityName": "FRC",
349
+ "comment": "This is a deprecated authority that will be removed. Use UKFRC instead.",
350
+ "reference": "https://media.frc.org.uk/documents/XBRL_Tagging_Guide_-_FRC_Taxonomies_2024_On9jOuS.pdf",
351
+ "reportPackageMaxMB": "150",
352
+ "reportPackageMeasurement": "zipped",
353
+ "ixTargetUsage": "allowed"
354
+ },
355
+ "UKFRC": {
347
356
  "name": "United Kingdom Multiple Targets",
348
357
  "authorityName": "FRC",
349
358
  "comment": "Pertains to multi target UKSEF Guidance",
350
- "comment2": "See UKFRC for reports prior to 2023 which did not use separate targets for FRC and ESEF",
359
+ "comment2": "See UKFRC-2022 for reports prior to 2023 which did not use separate targets for FRC and ESEF",
351
360
  "reference": "https://media.frc.org.uk/documents/XBRL_Tagging_Guide_-_FRC_Taxonomies_2024_On9jOuS.pdf",
352
361
  "reportPackageMaxMB": "150",
353
362
  "reportPackageMeasurement": "zipped",
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arelle-release
3
- Version: 2.37.36
3
+ Version: 2.37.37
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=qE1JoU23iZVZMuNLXnlDRaP4Udr6pvevq0c9sMilUZ4,515
126
+ arelle/_version.py,sha256=owS1yq-lkTe-QrsEkuxkAmeRUUwHNnbfjvFTG_oL6T8,515
127
127
  arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
128
128
  arelle/api/Session.py,sha256=27HVuK3Bz1_21l4_RLn1IQg6v0MNsUEYrHajymyWwxI,7429
129
129
  arelle/archive/CustomLogger.py,sha256=v_JXOCQLDZcfaFWzxC9FRcEf9tQi4rCI4Sx7jCuAVQI,1231
@@ -403,8 +403,8 @@ arelle/plugin/validate/EDINET/resources/config.xml,sha256=GmLcW7UIj5koXJkN19P6Nq
403
403
  arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml,sha256=997I3RGTLg5OY3vn5hQxVFAAxOmDSOYpuyQe6VnWSY0,16285
404
404
  arelle/plugin/validate/EDINET/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
405
405
  arelle/plugin/validate/EDINET/rules/edinet.py,sha256=hm5T8PiQbOKP58BiSV9UFvKQX10uNBpxUZ06ORSU1cE,2117
406
- arelle/plugin/validate/EDINET/rules/frta.py,sha256=l7BQHOenDjYrpCX6bsXyUHgyvkjbfvJWfbpBthCHmBI,1713
407
- arelle/plugin/validate/EDINET/rules/gfm.py,sha256=EYOPRzJrjp9taPFm53vn7e4CEq0rgIps4_bEslSZJWo,10392
406
+ arelle/plugin/validate/EDINET/rules/frta.py,sha256=jX6R1DMaz8U_xPKwV9aJUGcqPgOX_RbYfWkWN-q5oW4,5451
407
+ arelle/plugin/validate/EDINET/rules/gfm.py,sha256=NIKOGfQdiC4R2BRzX32CQoyqzpO3jr8zn8i9911iBKw,11163
408
408
  arelle/plugin/validate/EDINET/rules/upload.py,sha256=HZ-9Gk6WtIichTGcSsSGIrMXNgsgJYQYwfUKeLs1XWU,20369
409
409
  arelle/plugin/validate/ESEF/Const.py,sha256=JujF_XV-_TNsxjGbF-8SQS4OOZIcJ8zhCMnr-C1O5Ho,22660
410
410
  arelle/plugin/validate/ESEF/Dimensions.py,sha256=MOJM7vwNPEmV5cu-ZzPrhx3347ZvxgD6643OB2HRnIk,10597
@@ -417,7 +417,7 @@ arelle/plugin/validate/ESEF/ESEF_2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCe
417
417
  arelle/plugin/validate/ESEF/ESEF_Current/DTS.py,sha256=epp-PBh1NJzQqgxUE6C468HmoDc2w3j54rMwfiOAry4,29334
418
418
  arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py,sha256=XMFlRc9X-dwMkyaEMWxmNWnTRBlFjzpA8JsyMWknzvs,75251
419
419
  arelle/plugin/validate/ESEF/ESEF_Current/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
420
- arelle/plugin/validate/ESEF/resources/authority-validations.json,sha256=ou4Hd7P237vSmck0MMLdNvN9J4DzzWawbDmrRnsIj-4,15069
420
+ arelle/plugin/validate/ESEF/resources/authority-validations.json,sha256=bR0ZMpiQL9LqiyzrjhAGMDLEHBHimsDuDu9SQY5xofA,15503
421
421
  arelle/plugin/validate/ESEF/resources/config.xml,sha256=t3STU_-QYM7Ay8YwZRPapnohiWVWhjfr4L2Rjx9xN9U,3902
422
422
  arelle/plugin/validate/FERC/__init__.py,sha256=V4fXcFKBsjFFPs9_1NhvDjWpEQCoQM0tRQMS0I1Ua7U,11462
423
423
  arelle/plugin/validate/FERC/config.xml,sha256=bn9b8eCqJA1J62rYq1Nz85wJrMGAahVmmnIUQZyerjo,1919
@@ -756,9 +756,9 @@ arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txr
756
756
  arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
757
757
  arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
758
758
  arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
759
- arelle_release-2.37.36.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
760
- arelle_release-2.37.36.dist-info/METADATA,sha256=O21K0JV03vScH1fAs0RomXYXTEyz-r135EHcUNJbaI8,9137
761
- arelle_release-2.37.36.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
762
- arelle_release-2.37.36.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
763
- arelle_release-2.37.36.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
764
- arelle_release-2.37.36.dist-info/RECORD,,
759
+ arelle_release-2.37.37.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
760
+ arelle_release-2.37.37.dist-info/METADATA,sha256=9rW8eSgXTQvBbLhpbyqEgJXlfKpxor8MA1pAmZhSDuE,9137
761
+ arelle_release-2.37.37.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
762
+ arelle_release-2.37.37.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
763
+ arelle_release-2.37.37.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
764
+ arelle_release-2.37.37.dist-info/RECORD,,