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 +2 -2
- arelle/plugin/validate/EDINET/rules/frta.py +78 -3
- arelle/plugin/validate/EDINET/rules/gfm.py +23 -0
- arelle/plugin/validate/ESEF/resources/authority-validations.json +10 -1
- {arelle_release-2.37.36.dist-info → arelle_release-2.37.37.dist-info}/METADATA +1 -1
- {arelle_release-2.37.36.dist-info → arelle_release-2.37.37.dist-info}/RECORD +10 -10
- {arelle_release-2.37.36.dist-info → arelle_release-2.37.37.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.36.dist-info → arelle_release-2.37.37.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.36.dist-info → arelle_release-2.37.37.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.36.dist-info → arelle_release-2.37.37.dist-info}/top_level.txt +0 -0
arelle/_version.py
CHANGED
|
@@ -3,10 +3,11 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
from collections
|
|
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.
|
|
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",
|
|
@@ -123,7 +123,7 @@ arelle/XmlValidateConst.py,sha256=U_wN0Q-nWKwf6dKJtcu_83FXPn9c6P8JjzGA5b0w7P0,33
|
|
|
123
123
|
arelle/XmlValidateParticles.py,sha256=Mn6vhFl0ZKC_vag1mBwn1rH_x2jmlusJYqOOuxFPO2k,9231
|
|
124
124
|
arelle/XmlValidateSchema.py,sha256=6frtZOc1Yrx_5yYF6V6oHbScnglWrVbWr6xW4EHtLQI,7428
|
|
125
125
|
arelle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
|
-
arelle/_version.py,sha256=
|
|
126
|
+
arelle/_version.py,sha256=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=
|
|
407
|
-
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=
|
|
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=
|
|
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.
|
|
760
|
-
arelle_release-2.37.
|
|
761
|
-
arelle_release-2.37.
|
|
762
|
-
arelle_release-2.37.
|
|
763
|
-
arelle_release-2.37.
|
|
764
|
-
arelle_release-2.37.
|
|
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,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|