arelle-release 2.37.60__py3-none-any.whl → 2.37.61__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/ModelDtsObject.py +6 -0
- arelle/_version.py +2 -2
- arelle/plugin/validate/EDINET/rules/gfm.py +169 -1
- {arelle_release-2.37.60.dist-info → arelle_release-2.37.61.dist-info}/METADATA +1 -1
- {arelle_release-2.37.60.dist-info → arelle_release-2.37.61.dist-info}/RECORD +9 -9
- {arelle_release-2.37.60.dist-info → arelle_release-2.37.61.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.60.dist-info → arelle_release-2.37.61.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.60.dist-info → arelle_release-2.37.61.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.60.dist-info → arelle_release-2.37.61.dist-info}/top_level.txt +0 -0
arelle/ModelDtsObject.py
CHANGED
|
@@ -1690,6 +1690,7 @@ class RelationStatus:
|
|
|
1690
1690
|
INEFFECTIVE = 4
|
|
1691
1691
|
|
|
1692
1692
|
arcCustAttrsExclusions = {XbrlConst.xlink, "use","priority","order","weight","preferredLabel"}
|
|
1693
|
+
modelObjectAttrs = frozenset(dir(ModelObject))
|
|
1693
1694
|
|
|
1694
1695
|
class ModelRelationship(ModelObject):
|
|
1695
1696
|
"""
|
|
@@ -2086,6 +2087,11 @@ class ModelRelationship(ModelObject):
|
|
|
2086
2087
|
self.toModelObject.qname if isinstance(self.toModelObject, ModelObject) else "??",
|
|
2087
2088
|
self.modelDocument.basename, self.sourceline))
|
|
2088
2089
|
|
|
2090
|
+
def __dir__(self):
|
|
2091
|
+
# Ignore ModelObject attributes because most relate to the underlying lxml element,
|
|
2092
|
+
# which ModelRelationship does not have.
|
|
2093
|
+
return [a for a in object.__dir__(self) if a.startswith('__') or a not in modelObjectAttrs]
|
|
2094
|
+
|
|
2089
2095
|
@property
|
|
2090
2096
|
def viewConcept(self):
|
|
2091
2097
|
if isinstance(self.toModelObject, ModelConcept):
|
arelle/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '2.37.
|
|
32
|
-
__version_tuple__ = version_tuple = (2, 37,
|
|
31
|
+
__version__ = version = '2.37.61'
|
|
32
|
+
__version_tuple__ = version_tuple = (2, 37, 61)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -12,7 +12,7 @@ import regex
|
|
|
12
12
|
from arelle import XbrlConst, XmlUtil
|
|
13
13
|
from arelle.LinkbaseType import LinkbaseType
|
|
14
14
|
from arelle.ModelDtsObject import ModelConcept
|
|
15
|
-
from arelle.ModelInstanceObject import ModelFact
|
|
15
|
+
from arelle.ModelInstanceObject import ModelFact, ModelInlineFootnote
|
|
16
16
|
from arelle.ModelObject import ModelObject
|
|
17
17
|
from arelle.ModelValue import QName
|
|
18
18
|
from arelle.PrototypeDtsObject import LocPrototype, ArcPrototype
|
|
@@ -812,6 +812,115 @@ def rule_gfm_1_3_23(
|
|
|
812
812
|
)
|
|
813
813
|
|
|
814
814
|
|
|
815
|
+
@validation(
|
|
816
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
817
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
818
|
+
)
|
|
819
|
+
def rule_gfm_1_3_25(
|
|
820
|
+
pluginData: PluginValidationDataExtension,
|
|
821
|
+
val: ValidateXbrl,
|
|
822
|
+
*args: Any,
|
|
823
|
+
**kwargs: Any,
|
|
824
|
+
) -> Iterable[Validation]:
|
|
825
|
+
"""
|
|
826
|
+
EDINET.EC5700W: [GFM 1.3.25] Correct the element name so that it does not end with "Axis", or correct the
|
|
827
|
+
substitutionGroup to "xbrldt:dimensionItem".
|
|
828
|
+
|
|
829
|
+
GFM 1.3.25: The xsd:element substitutionGroup attribute must equal "xbrldt:dimensionItem" if
|
|
830
|
+
and only if the name attribute ends with "Axis".
|
|
831
|
+
"""
|
|
832
|
+
for concept in pluginData.getExtensionConcepts(val.modelXbrl):
|
|
833
|
+
if concept.qname.localName.endswith("Axis") != (concept.substitutionGroupQname == XbrlConst.qnXbrldtDimensionItem):
|
|
834
|
+
yield Validation.warning(
|
|
835
|
+
codes='EDINET.EC5700W.GFM.1.3.25',
|
|
836
|
+
msg=_("Modify the element name, '%(conceptName)s', so that it does not end with 'Axis', or modify the substitutionGroup to 'xbrldt:dimensionItem'."),
|
|
837
|
+
conceptName=concept.qname.localName,
|
|
838
|
+
modelObject=concept,
|
|
839
|
+
)
|
|
840
|
+
|
|
841
|
+
|
|
842
|
+
@validation(
|
|
843
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
844
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
845
|
+
)
|
|
846
|
+
def rule_gfm_1_3_26(
|
|
847
|
+
pluginData: PluginValidationDataExtension,
|
|
848
|
+
val: ValidateXbrl,
|
|
849
|
+
*args: Any,
|
|
850
|
+
**kwargs: Any,
|
|
851
|
+
) -> Iterable[Validation]:
|
|
852
|
+
"""
|
|
853
|
+
EDINET.EC5700W: [GFM 1.3.26] Correct the element name so that it does not end with "Table", or correct the
|
|
854
|
+
substitutionGroup to "xbrldt:hypercubeItem".
|
|
855
|
+
|
|
856
|
+
GFM 1.3.26: The xsd:element name attribute must ends with "Table" if and only if
|
|
857
|
+
substitutionGroup attribute equals "xbrldt:hypercubeItem".
|
|
858
|
+
"""
|
|
859
|
+
for concept in pluginData.getExtensionConcepts(val.modelXbrl):
|
|
860
|
+
if concept.qname.localName.endswith("Table") != (concept.substitutionGroupQname == XbrlConst.qnXbrldtHypercubeItem):
|
|
861
|
+
yield Validation.warning(
|
|
862
|
+
codes='EDINET.EC5700W.GFM.1.3.26',
|
|
863
|
+
msg=_("The substitution group 'xbrldt:hypercubeItem' is only allowed with an element name that ends with 'Table'."
|
|
864
|
+
"Please change %(conceptName)s or change the substitutionGroup."),
|
|
865
|
+
conceptName=concept.qname.localName,
|
|
866
|
+
modelObject=concept
|
|
867
|
+
)
|
|
868
|
+
|
|
869
|
+
|
|
870
|
+
@validation(
|
|
871
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
872
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
873
|
+
)
|
|
874
|
+
def rule_gfm_1_3_28(
|
|
875
|
+
pluginData: PluginValidationDataExtension,
|
|
876
|
+
val: ValidateXbrl,
|
|
877
|
+
*args: Any,
|
|
878
|
+
**kwargs: Any,
|
|
879
|
+
) -> Iterable[Validation]:
|
|
880
|
+
"""
|
|
881
|
+
EDINET.EC5700W: [GFM 1.3.28] If the element name of an element extended by a submitter-specific taxonomy ends with "LineItems",
|
|
882
|
+
set the abstract attribute to "true".
|
|
883
|
+
"""
|
|
884
|
+
for concept in pluginData.getExtensionConcepts(val.modelXbrl):
|
|
885
|
+
if concept.qname.localName.endswith("LineItems") and not concept.isAbstract:
|
|
886
|
+
yield Validation.warning(
|
|
887
|
+
codes='EDINET.EC5700W.GFM.1.3.28',
|
|
888
|
+
msg=_("If the element name of an element extended by a submitter-specific taxonomy ends with 'LineItems', "
|
|
889
|
+
"set the abstract attribute to 'true'. For the element, '%(conceptName)s', the abstract attribute is 'false'."),
|
|
890
|
+
conceptName=concept.qname.localName,
|
|
891
|
+
modelObject=concept
|
|
892
|
+
)
|
|
893
|
+
|
|
894
|
+
|
|
895
|
+
@validation(
|
|
896
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
897
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
898
|
+
)
|
|
899
|
+
def rule_gfm_1_3_29(
|
|
900
|
+
pluginData: PluginValidationDataExtension,
|
|
901
|
+
val: ValidateXbrl,
|
|
902
|
+
*args: Any,
|
|
903
|
+
**kwargs: Any,
|
|
904
|
+
) -> Iterable[Validation]:
|
|
905
|
+
"""
|
|
906
|
+
EDINET.EC5700W: [GFM 1.3.29] If the element name of an element extended by the submitter-specific taxonomy ends with
|
|
907
|
+
"Domain" or "Member", please set the type attribute to "nonnum:domainItemType".
|
|
908
|
+
|
|
909
|
+
GFM 1.3.29: The xsd:element name attribute must end with "Domain" or "Member" if and only
|
|
910
|
+
if the type attribute equals "nonnum:domainItemType".
|
|
911
|
+
"""
|
|
912
|
+
for concept in pluginData.getExtensionConcepts(val.modelXbrl):
|
|
913
|
+
isConceptDomain = concept.type.isDomainItemType if concept.type is not None else False
|
|
914
|
+
if ((concept.qname.localName.endswith("Domain") or concept.qname.localName.endswith("Member")) != isConceptDomain):
|
|
915
|
+
yield Validation.warning(
|
|
916
|
+
codes='EDINET.EC5700W.GFM.1.3.29',
|
|
917
|
+
msg=_("The type 'us-types:domainItemType' is only allowed with an element name that ends with 'Domain' or 'Member'. "
|
|
918
|
+
"Please change %(conceptName)s or change the type."),
|
|
919
|
+
conceptName=concept.qname.localName,
|
|
920
|
+
modelObject=concept
|
|
921
|
+
)
|
|
922
|
+
|
|
923
|
+
|
|
815
924
|
@validation(
|
|
816
925
|
hook=ValidationHook.XBRL_FINALLY,
|
|
817
926
|
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
@@ -1333,3 +1442,62 @@ def rule_gfm_1_8_11(
|
|
|
1333
1442
|
msg=_("The definition relationship can not have the xbrldt:usable attribute set to False"),
|
|
1334
1443
|
modelObject=rel
|
|
1335
1444
|
)
|
|
1445
|
+
|
|
1446
|
+
|
|
1447
|
+
@validation(
|
|
1448
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
1449
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
1450
|
+
)
|
|
1451
|
+
def rule_gfm_1_9_1(
|
|
1452
|
+
pluginData: PluginValidationDataExtension,
|
|
1453
|
+
val: ValidateXbrl,
|
|
1454
|
+
*args: Any,
|
|
1455
|
+
**kwargs: Any,
|
|
1456
|
+
) -> Iterable[Validation]:
|
|
1457
|
+
"""
|
|
1458
|
+
EDINET.EC5700W: [GFM 1.9.1] References should not be defined for extension concepts.
|
|
1459
|
+
"""
|
|
1460
|
+
conceptReferenceSet = val.modelXbrl.relationshipSet(XbrlConst.conceptReference)
|
|
1461
|
+
for modelConcept in conceptReferenceSet.fromModelObjects():
|
|
1462
|
+
if not isinstance(modelConcept, ModelConcept):
|
|
1463
|
+
continue
|
|
1464
|
+
if modelConcept.qname is None or modelConcept.qname.namespaceURI is None:
|
|
1465
|
+
continue
|
|
1466
|
+
if pluginData.isExtensionUri(modelConcept.qname.namespaceURI, val.modelXbrl):
|
|
1467
|
+
yield Validation.warning(
|
|
1468
|
+
codes='EDINET.EC5700W.GFM.1.9.1',
|
|
1469
|
+
msg=_("References should not be defined for extension concepts: %(conceptName)s"),
|
|
1470
|
+
conceptName=modelConcept.qname,
|
|
1471
|
+
modelObject=modelConcept
|
|
1472
|
+
)
|
|
1473
|
+
|
|
1474
|
+
|
|
1475
|
+
@validation(
|
|
1476
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
1477
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
1478
|
+
)
|
|
1479
|
+
def rule_gfm_1_10_14(
|
|
1480
|
+
pluginData: PluginValidationDataExtension,
|
|
1481
|
+
val: ValidateXbrl,
|
|
1482
|
+
*args: Any,
|
|
1483
|
+
**kwargs: Any,
|
|
1484
|
+
) -> Iterable[Validation]:
|
|
1485
|
+
"""
|
|
1486
|
+
EDINET.EC5700W: [GFM 1.10.14] All non-empty footnotes must be referenced by an element
|
|
1487
|
+
"""
|
|
1488
|
+
footnotes = set()
|
|
1489
|
+
usedFootnoteIDs = set()
|
|
1490
|
+
for ixdsHtmlRootElt in val.modelXbrl.ixdsHtmlElements:
|
|
1491
|
+
for elt in ixdsHtmlRootElt.iterdescendants(XbrlConst.qnIXbrlFootnote.clarkNotation, XbrlConst.qnIXbrl11Footnote.clarkNotation):
|
|
1492
|
+
if isinstance(elt, ModelInlineFootnote) and elt.value != '':
|
|
1493
|
+
footnotes.add(elt)
|
|
1494
|
+
for rel in val.modelXbrl.relationshipSet("XBRL-footnotes").modelRelationships:
|
|
1495
|
+
if rel.fromModelObject is not None and rel.toModelObject is not None:
|
|
1496
|
+
usedFootnoteIDs.add(rel.toModelObject.footnoteID)
|
|
1497
|
+
for footnote in footnotes:
|
|
1498
|
+
if footnote.footnoteID not in usedFootnoteIDs:
|
|
1499
|
+
yield Validation.warning(
|
|
1500
|
+
codes='EDINET.EC5700W.GFM.1.10.14',
|
|
1501
|
+
msg=_("A non-empty footnote is not referenced by an element"),
|
|
1502
|
+
modelObject=footnote
|
|
1503
|
+
)
|
|
@@ -37,7 +37,7 @@ arelle/LinkbaseType.py,sha256=BwRQl4XZFFCopufC2FEMLhYENNTk2JUWVQvnIUsaqtI,3108
|
|
|
37
37
|
arelle/LocalViewer.py,sha256=WVrfek_bLeFFxgWITi1EQb6xCQN8O9Ks-ZL16vRncSk,3080
|
|
38
38
|
arelle/Locale.py,sha256=07IDxv8nIfvhyRRllFdEAKRI3yo1D2v781cTrjb_RoQ,33193
|
|
39
39
|
arelle/ModelDocument.py,sha256=R4uVfqks2XRDziRPAp_AUFebrAQBf4FgG97nb5h7fAs,130651
|
|
40
|
-
arelle/ModelDtsObject.py,sha256=
|
|
40
|
+
arelle/ModelDtsObject.py,sha256=VUDsq8Ua0a-Hrhu-vFMaajwZLKjjr7xC4e-LAJSz-k0,88968
|
|
41
41
|
arelle/ModelFormulaObject.py,sha256=-eb0lBYciEeAvvGduIs3AHGNGrxge9_0g1cVT6UUgvc,122560
|
|
42
42
|
arelle/ModelInstanceObject.py,sha256=77rkxl1FK8OyJhTXkrNv6B_4oEK6IZm9eRQdFDxslGk,74278
|
|
43
43
|
arelle/ModelManager.py,sha256=QUNcD2LC_YyyGFU8bFTSuzIGI1qpOK55KBlQ697Ep1I,11075
|
|
@@ -125,7 +125,7 @@ arelle/XmlValidateConst.py,sha256=U_wN0Q-nWKwf6dKJtcu_83FXPn9c6P8JjzGA5b0w7P0,33
|
|
|
125
125
|
arelle/XmlValidateParticles.py,sha256=Mn6vhFl0ZKC_vag1mBwn1rH_x2jmlusJYqOOuxFPO2k,9231
|
|
126
126
|
arelle/XmlValidateSchema.py,sha256=6frtZOc1Yrx_5yYF6V6oHbScnglWrVbWr6xW4EHtLQI,7428
|
|
127
127
|
arelle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
|
-
arelle/_version.py,sha256=
|
|
128
|
+
arelle/_version.py,sha256=KHvyigprh_4GfUyMHpRp8DoND89ZqncU0BKzMo7CvWY,708
|
|
129
129
|
arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
|
|
130
130
|
arelle/api/Session.py,sha256=kgSxS7VckA1sQ7xp0pJiK7IK-vRxAdAZKUo8gEx27s8,7549
|
|
131
131
|
arelle/config/creationSoftwareNames.json,sha256=5MK7XUjfDJ9OpRCCHXeOErJ1SlTBZji4WEcEOdOacx0,3128
|
|
@@ -332,7 +332,7 @@ arelle/plugin/validate/EDINET/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQ
|
|
|
332
332
|
arelle/plugin/validate/EDINET/rules/contexts.py,sha256=KPoyWfRaURvxoGVcWP64mTMTAKPMSmQSX06RClCLddw,7590
|
|
333
333
|
arelle/plugin/validate/EDINET/rules/edinet.py,sha256=1dHYl0nqZ5ql0SaE9Jj95fGegOMlssQNayeebV0iCJQ,13118
|
|
334
334
|
arelle/plugin/validate/EDINET/rules/frta.py,sha256=N0YglHYZuLD2IuwE26viR2ViwUYjneBuMFU9vlrS0aQ,7616
|
|
335
|
-
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=
|
|
335
|
+
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=XcWjLUxQs521Jbdr3S96RDlJld2m2d3xFFsaRTrP-qM,58037
|
|
336
336
|
arelle/plugin/validate/EDINET/rules/manifests.py,sha256=MoT9R_a4BzuYdQVbF7RC5wz134Ve68svSdJ3NlpO_AU,4026
|
|
337
337
|
arelle/plugin/validate/EDINET/rules/upload.py,sha256=YdjVIRTO9Zrmdprx-y0uo6MzHP7YLYYItwbR8AjP_fE,48731
|
|
338
338
|
arelle/plugin/validate/ESEF/Const.py,sha256=JujF_XV-_TNsxjGbF-8SQS4OOZIcJ8zhCMnr-C1O5Ho,22660
|
|
@@ -684,9 +684,9 @@ arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txr
|
|
|
684
684
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
685
685
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
686
686
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
687
|
-
arelle_release-2.37.
|
|
688
|
-
arelle_release-2.37.
|
|
689
|
-
arelle_release-2.37.
|
|
690
|
-
arelle_release-2.37.
|
|
691
|
-
arelle_release-2.37.
|
|
692
|
-
arelle_release-2.37.
|
|
687
|
+
arelle_release-2.37.61.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
688
|
+
arelle_release-2.37.61.dist-info/METADATA,sha256=_DG9yzSHAuG1UQGwzEWLrLD4Ow0SU8Qojx592crUxU0,9327
|
|
689
|
+
arelle_release-2.37.61.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
690
|
+
arelle_release-2.37.61.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
691
|
+
arelle_release-2.37.61.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
|
|
692
|
+
arelle_release-2.37.61.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|