arelle-release 2.37.42__py3-none-any.whl → 2.37.44__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/Constants.py +12 -0
- arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +45 -0
- arelle/plugin/validate/EDINET/__init__.py +2 -1
- arelle/plugin/validate/EDINET/rules/contexts.py +186 -0
- arelle/plugin/validate/EDINET/rules/edinet.py +87 -49
- arelle/plugin/validate/ESEF/resources/authority-validations.json +2 -2
- arelle/plugin/validate/NL/PluginValidationDataExtension.py +1 -1
- arelle/plugin/validate/NL/rules/nl_kvk.py +1 -1
- arelle/plugin/validate/ROS/PluginValidationDataExtension.py +6 -0
- {arelle_release-2.37.42.dist-info → arelle_release-2.37.44.dist-info}/METADATA +1 -1
- {arelle_release-2.37.42.dist-info → arelle_release-2.37.44.dist-info}/RECORD +17 -16
- /arelle/{plugin/validate/NL/LinkbaseType.py → LinkbaseType.py} +0 -0
- {arelle_release-2.37.42.dist-info → arelle_release-2.37.44.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.42.dist-info → arelle_release-2.37.44.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.42.dist-info → arelle_release-2.37.44.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.42.dist-info → arelle_release-2.37.44.dist-info}/top_level.txt +0 -0
arelle/_version.py
CHANGED
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
"""
|
|
2
2
|
See COPYRIGHT.md for copyright information.
|
|
3
3
|
"""
|
|
4
|
+
from enum import Enum
|
|
5
|
+
|
|
4
6
|
from arelle.ModelValue import qname
|
|
5
7
|
|
|
8
|
+
class DeiFormType(Enum):
|
|
9
|
+
FORM_2_4 = '第二号の四様式'
|
|
10
|
+
FORM_2_7 = '第二号の七様式'
|
|
11
|
+
FORM_3 = '第三号様式'
|
|
12
|
+
|
|
13
|
+
CORPORATE_FORMS =frozenset([
|
|
14
|
+
DeiFormType.FORM_2_4,
|
|
15
|
+
DeiFormType.FORM_2_7,
|
|
16
|
+
DeiFormType.FORM_3,
|
|
17
|
+
])
|
|
6
18
|
qnEdinetManifestInsert = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}insert")
|
|
7
19
|
qnEdinetManifestInstance = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}instance")
|
|
8
20
|
qnEdinetManifestItem = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}item")
|
|
@@ -9,6 +9,8 @@ from dataclasses import dataclass
|
|
|
9
9
|
from functools import lru_cache
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
|
|
12
|
+
import regex
|
|
13
|
+
|
|
12
14
|
from arelle.ModelDocument import Type as ModelDocumentType
|
|
13
15
|
from arelle.ModelInstanceObject import ModelFact
|
|
14
16
|
from arelle.ModelObject import ModelObject
|
|
@@ -17,9 +19,11 @@ from arelle.ModelXbrl import ModelXbrl
|
|
|
17
19
|
from arelle.PrototypeDtsObject import LinkPrototype
|
|
18
20
|
from arelle.ValidateDuplicateFacts import getDeduplicatedFacts, DeduplicationType
|
|
19
21
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
22
|
+
from arelle.XmlValidate import VALID
|
|
20
23
|
from arelle.typing import TypeGetText
|
|
21
24
|
from arelle.utils.PluginData import PluginData
|
|
22
25
|
from .FormType import FormType
|
|
26
|
+
from .Constants import CORPORATE_FORMS
|
|
23
27
|
|
|
24
28
|
_: TypeGetText
|
|
25
29
|
|
|
@@ -35,20 +39,48 @@ class UploadContents:
|
|
|
35
39
|
@dataclass
|
|
36
40
|
class PluginValidationDataExtension(PluginData):
|
|
37
41
|
assetsIfrsQn: QName
|
|
42
|
+
documentTypeDeiQn: QName
|
|
43
|
+
jpcrpEsrFilingDateCoverPageQn: QName
|
|
44
|
+
jpcrpFilingDateCoverPageQn: QName
|
|
45
|
+
jpspsFilingDateCoverPageQn: QName
|
|
38
46
|
liabilitiesAndEquityIfrsQn: QName
|
|
47
|
+
nonConsolidatedMemberQn: QName
|
|
48
|
+
ratioOfFemaleDirectorsAndOtherOfficersQn: QName
|
|
49
|
+
|
|
50
|
+
contextIdPattern: regex.Pattern[str]
|
|
39
51
|
|
|
40
52
|
_primaryModelXbrl: ModelXbrl | None = None
|
|
41
53
|
|
|
42
54
|
def __init__(self, name: str):
|
|
43
55
|
super().__init__(name)
|
|
56
|
+
jpcrpEsrNamespace = "http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp-esr/2024-11-01/jpcrp-esr_cor"
|
|
57
|
+
jpcrpNamespace = 'http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp/2024-11-01/jpcrp_cor'
|
|
58
|
+
jpdeiNamespace = 'http://disclosure.edinet-fsa.go.jp/taxonomy/jpdei/2013-08-31/jpdei_cor'
|
|
44
59
|
jpigpNamespace = "http://disclosure.edinet-fsa.go.jp/taxonomy/jpigp/2024-11-01/jpigp_cor"
|
|
60
|
+
jppfsNamespace = "http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2024-11-01/jppfs_cor"
|
|
61
|
+
jpspsNamespace = 'http://disclosure.edinet-fsa.go.jp/taxonomy/jpsps/2024-11-01/jpsps_cor'
|
|
45
62
|
self.assetsIfrsQn = qname(jpigpNamespace, 'AssetsIFRS')
|
|
63
|
+
self.documentTypeDeiQn = qname(jpdeiNamespace, 'DocumentTypeDEI')
|
|
64
|
+
self.jpcrpEsrFilingDateCoverPageQn = qname(jpcrpEsrNamespace, 'FilingDateCoverPage')
|
|
65
|
+
self.jpcrpFilingDateCoverPageQn = qname(jpcrpNamespace, 'FilingDateCoverPage')
|
|
66
|
+
self.jpspsFilingDateCoverPageQn = qname(jpspsNamespace, 'FilingDateCoverPage')
|
|
46
67
|
self.liabilitiesAndEquityIfrsQn = qname(jpigpNamespace, "LiabilitiesAndEquityIFRS")
|
|
68
|
+
self.nonConsolidatedMemberQn = qname(jppfsNamespace, "NonConsolidatedMember")
|
|
69
|
+
self.ratioOfFemaleDirectorsAndOtherOfficersQn = qname(jpcrpNamespace, "RatioOfFemaleDirectorsAndOtherOfficers")
|
|
70
|
+
|
|
71
|
+
self.contextIdPattern = regex.compile(r'(Prior[1-9]Year|CurrentYear|Prior[1-9]Interim|Interim)(Duration|Instant)')
|
|
47
72
|
|
|
48
73
|
# Identity hash for caching.
|
|
49
74
|
def __hash__(self) -> int:
|
|
50
75
|
return id(self)
|
|
51
76
|
|
|
77
|
+
@lru_cache(1)
|
|
78
|
+
def isCorporateForm(self, modelXbrl: ModelXbrl) -> bool:
|
|
79
|
+
documentTypes = self.getDocumentTypes(modelXbrl)
|
|
80
|
+
if any(documentType == form.value for form in CORPORATE_FORMS for documentType in documentTypes):
|
|
81
|
+
return True
|
|
82
|
+
return False
|
|
83
|
+
|
|
52
84
|
@lru_cache(1)
|
|
53
85
|
def shouldValidateUpload(self, val: ValidateXbrl) -> bool:
|
|
54
86
|
"""
|
|
@@ -79,6 +111,15 @@ class PluginValidationDataExtension(PluginData):
|
|
|
79
111
|
def getDeduplicatedFacts(self, modelXbrl: ModelXbrl) -> list[ModelFact]:
|
|
80
112
|
return getDeduplicatedFacts(modelXbrl, DeduplicationType.CONSISTENT_PAIRS)
|
|
81
113
|
|
|
114
|
+
@lru_cache(1)
|
|
115
|
+
def getDocumentTypes(self, modelXbrl: ModelXbrl) -> set[str]:
|
|
116
|
+
documentFacts = modelXbrl.factsByQname.get(self.documentTypeDeiQn, set())
|
|
117
|
+
documentTypes = set()
|
|
118
|
+
for fact in documentFacts:
|
|
119
|
+
if fact.xValid >= VALID:
|
|
120
|
+
documentTypes.add(fact.textValue)
|
|
121
|
+
return documentTypes
|
|
122
|
+
|
|
82
123
|
@lru_cache(1)
|
|
83
124
|
def getFootnoteLinkElements(self, modelXbrl: ModelXbrl) -> list[ModelObject | LinkPrototype]:
|
|
84
125
|
# TODO: Consolidate with similar implementations in EDGAR and FERC
|
|
@@ -163,6 +204,10 @@ class PluginValidationDataExtension(PluginData):
|
|
|
163
204
|
paths.update(path.parents)
|
|
164
205
|
return sorted(paths)
|
|
165
206
|
|
|
207
|
+
def hasValidNonNilFact(self, modelXbrl: ModelXbrl, qname: QName) -> bool:
|
|
208
|
+
requiredFacts = modelXbrl.factsByQname.get(qname, set())
|
|
209
|
+
return any(fact.xValid >= VALID and not fact.isNil for fact in requiredFacts)
|
|
210
|
+
|
|
166
211
|
@lru_cache(1)
|
|
167
212
|
def isUpload(self, modelXbrl: ModelXbrl) -> bool:
|
|
168
213
|
if not modelXbrl.fileSource.fs or \
|
|
@@ -15,7 +15,7 @@ from arelle.Version import authorLabel, copyrightLabel
|
|
|
15
15
|
from . import Constants
|
|
16
16
|
from .Manifest import Manifest, ManifestInstance, parseManifests
|
|
17
17
|
from .ValidationPluginExtension import ValidationPluginExtension
|
|
18
|
-
from .rules import edinet, frta, gfm, upload
|
|
18
|
+
from .rules import contexts, edinet, frta, gfm, upload
|
|
19
19
|
|
|
20
20
|
PLUGIN_NAME = "Validate EDINET"
|
|
21
21
|
DISCLOSURE_SYSTEM_VALIDATION_TYPE = "EDINET"
|
|
@@ -34,6 +34,7 @@ validationPlugin = ValidationPluginExtension(
|
|
|
34
34
|
disclosureSystemConfigUrl=Path(__file__).parent / "resources" / "config.xml",
|
|
35
35
|
validationTypes=[DISCLOSURE_SYSTEM_VALIDATION_TYPE],
|
|
36
36
|
validationRuleModules=[
|
|
37
|
+
contexts,
|
|
37
38
|
edinet,
|
|
38
39
|
frta,
|
|
39
40
|
gfm,
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
"""
|
|
2
|
+
See COPYRIGHT.md for copyright information.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from collections import defaultdict
|
|
7
|
+
from typing import Any, Iterable
|
|
8
|
+
|
|
9
|
+
import regex
|
|
10
|
+
|
|
11
|
+
from arelle import XbrlConst
|
|
12
|
+
from arelle.ModelDtsObject import ModelConcept
|
|
13
|
+
from arelle.ValidateXbrl import ValidateXbrl
|
|
14
|
+
from arelle.typing import TypeGetText
|
|
15
|
+
from arelle.utils.PluginHooks import ValidationHook
|
|
16
|
+
from arelle.utils.validate.Decorator import validation
|
|
17
|
+
from arelle.utils.validate.Validation import Validation
|
|
18
|
+
from ..DisclosureSystems import (DISCLOSURE_SYSTEM_EDINET)
|
|
19
|
+
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
20
|
+
|
|
21
|
+
_: TypeGetText
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Per "Framework Design of EDINET Taxonomy", ELR definitions contain a 6-digit
|
|
25
|
+
# can be used to categorize the ELR.
|
|
26
|
+
FINANCIAL_STATEMENT_ELR_PREFIXES = (
|
|
27
|
+
'3', # Codes starting with 3 indicate "Japanese GAAP Financial Statement"
|
|
28
|
+
'5', # Codes starting with 5 indicate "IFRS Financial Statement"
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
@validation(
|
|
33
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
34
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
35
|
+
)
|
|
36
|
+
def rule_EC8013W(
|
|
37
|
+
pluginData: PluginValidationDataExtension,
|
|
38
|
+
val: ValidateXbrl,
|
|
39
|
+
*args: Any,
|
|
40
|
+
**kwargs: Any,
|
|
41
|
+
) -> Iterable[Validation]:
|
|
42
|
+
"""
|
|
43
|
+
EDINET.EC8013W: The context ID of the element associated with the financial statement
|
|
44
|
+
extended link role begins with one of the following strings:
|
|
45
|
+
Prior?YearDuration
|
|
46
|
+
CurrentYearDuration
|
|
47
|
+
Prior?YearInstant
|
|
48
|
+
CurrentYearInstant
|
|
49
|
+
InterimDuration
|
|
50
|
+
InterimInstant
|
|
51
|
+
Prior?InterimDuration
|
|
52
|
+
Prior?InterimInstant
|
|
53
|
+
Where ? is a digit from 1 to 9.
|
|
54
|
+
"""
|
|
55
|
+
financialStatementRoleTypes = set()
|
|
56
|
+
for roleUri, roleTypes in val.modelXbrl.roleTypes.items():
|
|
57
|
+
for roleType in roleTypes:
|
|
58
|
+
definition = roleType.definition
|
|
59
|
+
roleTypeCode = roleType.definition.split(' ')[0] if definition else None
|
|
60
|
+
if roleTypeCode is None:
|
|
61
|
+
continue
|
|
62
|
+
if any(roleTypeCode.startswith(prefix) for prefix in FINANCIAL_STATEMENT_ELR_PREFIXES):
|
|
63
|
+
financialStatementRoleTypes.add(roleType)
|
|
64
|
+
|
|
65
|
+
financialStatementConcepts: set[ModelConcept] = set()
|
|
66
|
+
labelsRelationshipSet = val.modelXbrl.relationshipSet(
|
|
67
|
+
XbrlConst.parentChild,
|
|
68
|
+
tuple(roleType.roleURI for roleType in financialStatementRoleTypes)
|
|
69
|
+
)
|
|
70
|
+
financialStatementConcepts.update(labelsRelationshipSet.fromModelObjects().keys())
|
|
71
|
+
financialStatementConcepts.update(labelsRelationshipSet.toModelObjects().keys())
|
|
72
|
+
|
|
73
|
+
invalidContextIdMap = defaultdict(list)
|
|
74
|
+
for fact in val.modelXbrl.facts:
|
|
75
|
+
if fact.concept not in financialStatementConcepts:
|
|
76
|
+
continue
|
|
77
|
+
if fact.contextID is None:
|
|
78
|
+
continue
|
|
79
|
+
if not pluginData.contextIdPattern.match(fact.contextID):
|
|
80
|
+
invalidContextIdMap[fact.contextID].append(fact)
|
|
81
|
+
for contextId, facts in invalidContextIdMap.items():
|
|
82
|
+
yield Validation.warning(
|
|
83
|
+
codes='EDINET.EC8013W',
|
|
84
|
+
msg=_("The context ID (id=%(contextId)s) for the element related to the extended link role "
|
|
85
|
+
"in Financial Statement is not per convention. Please set the context ID of the element "
|
|
86
|
+
"related to the extended link role of financial statements according to the rules. For "
|
|
87
|
+
"the financial statements, please refer to \"3-4-2 Setting the Context\" in the "
|
|
88
|
+
"\"Validation Guidelines\"."),
|
|
89
|
+
contextId=contextId,
|
|
90
|
+
modelObject=facts,
|
|
91
|
+
)
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
@validation(
|
|
95
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
96
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
97
|
+
)
|
|
98
|
+
def rule_EC8033W(
|
|
99
|
+
pluginData: PluginValidationDataExtension,
|
|
100
|
+
val: ValidateXbrl,
|
|
101
|
+
*args: Any,
|
|
102
|
+
**kwargs: Any,
|
|
103
|
+
) -> Iterable[Validation]:
|
|
104
|
+
"""
|
|
105
|
+
EDINET.EC8033W: The startDate of a context whose context ID starts with
|
|
106
|
+
"CurrentYear" is not set to a date earlier than the endDate of a context
|
|
107
|
+
whose context ID starts with "Prior1Year".
|
|
108
|
+
"""
|
|
109
|
+
priorYearContexts = [
|
|
110
|
+
context
|
|
111
|
+
for contextId, context in val.modelXbrl.contexts.items()
|
|
112
|
+
if contextId.startswith('Prior1Year')
|
|
113
|
+
and context.endDatetime is not None
|
|
114
|
+
and context.isStartEndPeriod
|
|
115
|
+
]
|
|
116
|
+
latestPriorYearContext = None
|
|
117
|
+
for priorYearContext in priorYearContexts:
|
|
118
|
+
if latestPriorYearContext is None or \
|
|
119
|
+
priorYearContext.endDatetime > latestPriorYearContext.endDatetime:
|
|
120
|
+
latestPriorYearContext = priorYearContext
|
|
121
|
+
if latestPriorYearContext is None:
|
|
122
|
+
return
|
|
123
|
+
currentYearContexts = [
|
|
124
|
+
context
|
|
125
|
+
for contextId, context in val.modelXbrl.contexts.items()
|
|
126
|
+
if contextId.startswith('CurrentYear')
|
|
127
|
+
and context.startDatetime is not None
|
|
128
|
+
and context.isStartEndPeriod
|
|
129
|
+
]
|
|
130
|
+
earliestCurrentYearContext = None
|
|
131
|
+
for currentYearContext in currentYearContexts:
|
|
132
|
+
if earliestCurrentYearContext is None or \
|
|
133
|
+
currentYearContext.endDatetime > earliestCurrentYearContext.startDatetime:
|
|
134
|
+
earliestCurrentYearContext = currentYearContext
|
|
135
|
+
if earliestCurrentYearContext is None:
|
|
136
|
+
return
|
|
137
|
+
if latestPriorYearContext.endDatetime > earliestCurrentYearContext.startDatetime:
|
|
138
|
+
yield Validation.warning(
|
|
139
|
+
codes='EDINET.EC8033W',
|
|
140
|
+
msg=_("The startDate element of the current year context (id=%(currentYearContextId)s) is "
|
|
141
|
+
"set to a date that is earlier than the endDate element of the prior year context "
|
|
142
|
+
"(id=%(priorYearContextId)s). Please check the corresponding context ID "
|
|
143
|
+
"%(currentYearContextId)s and %(priorYearContextId)s. Set the startDate element of "
|
|
144
|
+
"context ID %(currentYearContextId)s to a date that is later than or equal to the "
|
|
145
|
+
"endDate element of context ID %(priorYearContextId)s."),
|
|
146
|
+
currentYearContextId=earliestCurrentYearContext.id,
|
|
147
|
+
priorYearContextId=latestPriorYearContext.id,
|
|
148
|
+
modelObject=priorYearContexts + currentYearContexts,
|
|
149
|
+
)
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
@validation(
|
|
153
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
154
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
155
|
+
)
|
|
156
|
+
def rule_EC8054W(
|
|
157
|
+
pluginData: PluginValidationDataExtension,
|
|
158
|
+
val: ValidateXbrl,
|
|
159
|
+
*args: Any,
|
|
160
|
+
**kwargs: Any,
|
|
161
|
+
) -> Iterable[Validation]:
|
|
162
|
+
"""
|
|
163
|
+
EDINET.EC8054W: For any context with ID containing "NonConsolidatedMember",
|
|
164
|
+
the scenario element within must be set to "NonConsolidatedMember".
|
|
165
|
+
"""
|
|
166
|
+
for context in val.modelXbrl.contexts.values():
|
|
167
|
+
if pluginData.nonConsolidatedMemberQn.localName not in context.id:
|
|
168
|
+
continue
|
|
169
|
+
memberQnames = set()
|
|
170
|
+
for scenarioElt in context.iterdescendants(XbrlConst.qnXbrlScenario.clarkNotation):
|
|
171
|
+
for memberElt in scenarioElt.iterdescendants(
|
|
172
|
+
XbrlConst.qnXbrldiExplicitMember.clarkNotation,
|
|
173
|
+
XbrlConst.qnXbrldiTypedMember.clarkNotation
|
|
174
|
+
):
|
|
175
|
+
memberQnames.add(memberElt.xValue)
|
|
176
|
+
if pluginData.nonConsolidatedMemberQn not in memberQnames:
|
|
177
|
+
yield Validation.warning(
|
|
178
|
+
codes='EDINET.EC8054W',
|
|
179
|
+
msg=_("For the context ID (%(contextId)s), \"NonConsolidatedMember\" "
|
|
180
|
+
"is not set in the scenario element. Please correct the relevant "
|
|
181
|
+
"context ID and scenario element. For naming rules for context IDs, "
|
|
182
|
+
"refer to \"5-4-1 Naming Rules for Context IDs\" in the \"Guidelines "
|
|
183
|
+
"for Creating Report Instances.\""),
|
|
184
|
+
contextId=context.id,
|
|
185
|
+
modelObject=context,
|
|
186
|
+
)
|
|
@@ -7,9 +7,8 @@ from collections import defaultdict
|
|
|
7
7
|
from decimal import Decimal
|
|
8
8
|
from typing import Any, Iterable, cast
|
|
9
9
|
|
|
10
|
-
import regex
|
|
11
|
-
|
|
12
10
|
from arelle import XbrlConst, ValidateDuplicateFacts
|
|
11
|
+
from arelle.LinkbaseType import LinkbaseType
|
|
13
12
|
from arelle.ValidateDuplicateFacts import DuplicateType
|
|
14
13
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
15
14
|
from arelle.typing import TypeGetText
|
|
@@ -22,6 +21,32 @@ from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
|
22
21
|
_: TypeGetText
|
|
23
22
|
|
|
24
23
|
|
|
24
|
+
@validation(
|
|
25
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
26
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
27
|
+
)
|
|
28
|
+
def rule_EC1057E(
|
|
29
|
+
pluginData: PluginValidationDataExtension,
|
|
30
|
+
val: ValidateXbrl,
|
|
31
|
+
*args: Any,
|
|
32
|
+
**kwargs: Any,
|
|
33
|
+
) -> Iterable[Validation]:
|
|
34
|
+
"""
|
|
35
|
+
EDINET.EC1057E: The submission date on the cover page has not been filled in.
|
|
36
|
+
Ensure that there is a nonnil value disclosed for FilingDateCoverPage
|
|
37
|
+
Note: This rule is only applicable to the public documents.
|
|
38
|
+
"""
|
|
39
|
+
dei = pluginData.getDocumentTypes(val.modelXbrl)
|
|
40
|
+
if len(dei) > 0:
|
|
41
|
+
if not (pluginData.hasValidNonNilFact(val.modelXbrl, pluginData.jpcrpEsrFilingDateCoverPageQn)
|
|
42
|
+
or pluginData.hasValidNonNilFact(val.modelXbrl, pluginData.jpcrpFilingDateCoverPageQn)
|
|
43
|
+
or pluginData.hasValidNonNilFact(val.modelXbrl, pluginData.jpspsFilingDateCoverPageQn)):
|
|
44
|
+
yield Validation.error(
|
|
45
|
+
codes='EDINET.EC1057E',
|
|
46
|
+
msg=_("The [Submission Date] on the cover page has not been filled in."),
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
|
|
25
50
|
@validation(
|
|
26
51
|
hook=ValidationHook.XBRL_FINALLY,
|
|
27
52
|
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
@@ -43,7 +68,7 @@ def rule_EC5002E(
|
|
|
43
68
|
errorFacts = []
|
|
44
69
|
for fact in val.modelXbrl.facts:
|
|
45
70
|
concept = fact.concept
|
|
46
|
-
if not concept.isShares:
|
|
71
|
+
if concept is None or not concept.isShares:
|
|
47
72
|
continue
|
|
48
73
|
unit = fact.unit
|
|
49
74
|
measures = unit.measures
|
|
@@ -104,58 +129,50 @@ def rule_EC8024E(
|
|
|
104
129
|
hook=ValidationHook.XBRL_FINALLY,
|
|
105
130
|
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
106
131
|
)
|
|
107
|
-
def
|
|
132
|
+
def rule_EC8027W(
|
|
108
133
|
pluginData: PluginValidationDataExtension,
|
|
109
134
|
val: ValidateXbrl,
|
|
110
135
|
*args: Any,
|
|
111
136
|
**kwargs: Any,
|
|
112
137
|
) -> Iterable[Validation]:
|
|
113
138
|
"""
|
|
114
|
-
EDINET.
|
|
115
|
-
|
|
116
|
-
|
|
139
|
+
EDINET.EC8027W: For presentation links and definition links, there must be
|
|
140
|
+
only one root element.
|
|
141
|
+
File name: xxx <Extended link role = yyy>
|
|
142
|
+
Please correct the extended link role of the relevant file. Please set only one
|
|
143
|
+
root element of the extended link role in the presentation link and definition link.
|
|
117
144
|
"""
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
and context.isStartEndPeriod
|
|
145
|
+
linkbaseTypes = (LinkbaseType.PRESENTATION, LinkbaseType.DEFINITION)
|
|
146
|
+
roleTypes = [
|
|
147
|
+
roleType
|
|
148
|
+
for roleTypes in val.modelXbrl.roleTypes.values()
|
|
149
|
+
for roleType in roleTypes
|
|
124
150
|
]
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
"set to a date that is earlier than the endDate element of the prior year context "
|
|
151
|
-
"(id=%(priorYearContextId)s). Please check the corresponding context ID "
|
|
152
|
-
"%(currentYearContextId)s and %(priorYearContextId)s. Set the startDate element of "
|
|
153
|
-
"context ID %(currentYearContextId)s to a date that is later than or equal to the "
|
|
154
|
-
"endDate element of context ID %(priorYearContextId)s."),
|
|
155
|
-
currentYearContextId=earliestCurrentYearContext.id,
|
|
156
|
-
priorYearContextId=latestPriorYearContext.id,
|
|
157
|
-
modelObject=priorYearContexts + currentYearContexts,
|
|
158
|
-
)
|
|
151
|
+
for roleType in roleTypes:
|
|
152
|
+
for linkbaseType in linkbaseTypes:
|
|
153
|
+
if linkbaseType.getLinkQn() not in roleType.usedOns:
|
|
154
|
+
continue
|
|
155
|
+
arcroles = linkbaseType.getArcroles()
|
|
156
|
+
relSet = val.modelXbrl.relationshipSet(tuple(arcroles), roleType.roleURI)
|
|
157
|
+
relSetFrom = relSet.loadModelRelationshipsFrom()
|
|
158
|
+
rootConcepts = relSet.rootConcepts
|
|
159
|
+
if len(rootConcepts) < 2:
|
|
160
|
+
continue
|
|
161
|
+
rels = [
|
|
162
|
+
rel
|
|
163
|
+
for rootConcept in rootConcepts
|
|
164
|
+
for rel in relSetFrom[rootConcept]
|
|
165
|
+
]
|
|
166
|
+
yield Validation.warning(
|
|
167
|
+
codes='EDINET.EC8027W',
|
|
168
|
+
msg=_("For presentation links and definition links, there must be only one root element. "
|
|
169
|
+
"File name: %(filename)s <Extended link role = %(roleUri)s> "
|
|
170
|
+
"Please correct the extended link role of the relevant file. Please set only one "
|
|
171
|
+
"root element of the extended link role in the presentation link and definition link."),
|
|
172
|
+
filename=rels[0].modelDocument.basename,
|
|
173
|
+
roleUri=roleType.roleURI,
|
|
174
|
+
modelObject=rels,
|
|
175
|
+
)
|
|
159
176
|
|
|
160
177
|
|
|
161
178
|
@validation(
|
|
@@ -172,13 +189,12 @@ def rule_EC8062W(
|
|
|
172
189
|
EDINET.EC8062W: The sum of all liabilities and equity must equal the sum of all assets.
|
|
173
190
|
"""
|
|
174
191
|
deduplicatedFacts = pluginData.getDeduplicatedFacts(val.modelXbrl)
|
|
175
|
-
contextIdPattern = regex.compile(r'^(Prior[1-9]Year|CurrentYear|Prior[1-9]Interim|Interim)(Duration|Instant)$')
|
|
176
192
|
|
|
177
193
|
factsByContextId = defaultdict(list)
|
|
178
194
|
for fact in deduplicatedFacts:
|
|
179
195
|
if fact.qname not in (pluginData.assetsIfrsQn, pluginData.liabilitiesAndEquityIfrsQn):
|
|
180
196
|
continue
|
|
181
|
-
if fact.contextID is None or not contextIdPattern.
|
|
197
|
+
if fact.contextID is None or not pluginData.contextIdPattern.fullmatch(fact.contextID):
|
|
182
198
|
continue
|
|
183
199
|
factsByContextId[fact.contextID].append(fact)
|
|
184
200
|
|
|
@@ -205,3 +221,25 @@ def rule_EC8062W(
|
|
|
205
221
|
assetSum=f"{assetSum:,}",
|
|
206
222
|
modelObject=facts,
|
|
207
223
|
)
|
|
224
|
+
|
|
225
|
+
|
|
226
|
+
@validation(
|
|
227
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
228
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
229
|
+
)
|
|
230
|
+
def rule_EC8075W(
|
|
231
|
+
pluginData: PluginValidationDataExtension,
|
|
232
|
+
val: ValidateXbrl,
|
|
233
|
+
*args: Any,
|
|
234
|
+
**kwargs: Any,
|
|
235
|
+
) -> Iterable[Validation]:
|
|
236
|
+
"""
|
|
237
|
+
EDINET.EC8075W: The percentage of female executives has not been tagged in detail. Ensure that there is
|
|
238
|
+
a nonnil value disclosed for jpcrp_cor:RatioOfFemaleDirectorsAndOtherOfficers.
|
|
239
|
+
"""
|
|
240
|
+
if pluginData.isCorporateForm(val.modelXbrl):
|
|
241
|
+
if not pluginData.hasValidNonNilFact(val.modelXbrl, pluginData.ratioOfFemaleDirectorsAndOtherOfficersQn):
|
|
242
|
+
yield Validation.warning(
|
|
243
|
+
codes='EDINET.EC8075W',
|
|
244
|
+
msg=_("The percentage of female executives has not been tagged in detail."),
|
|
245
|
+
)
|
|
@@ -347,7 +347,7 @@
|
|
|
347
347
|
"name": "United Kingdom Multiple Targets",
|
|
348
348
|
"authorityName": "FRC",
|
|
349
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_-
|
|
350
|
+
"reference": "https://media.frc.org.uk/documents/XBRL_Tagging_Guide_-_FRC_Taxonomies_2025.pdf",
|
|
351
351
|
"reportPackageMaxMB": "150",
|
|
352
352
|
"reportPackageMeasurement": "zipped",
|
|
353
353
|
"ixTargetUsage": "allowed"
|
|
@@ -357,7 +357,7 @@
|
|
|
357
357
|
"authorityName": "FRC",
|
|
358
358
|
"comment": "Pertains to multi target UKSEF Guidance",
|
|
359
359
|
"comment2": "See UKFRC-2022 for reports prior to 2023 which did not use separate targets for FRC and ESEF",
|
|
360
|
-
"reference": "https://media.frc.org.uk/documents/XBRL_Tagging_Guide_-
|
|
360
|
+
"reference": "https://media.frc.org.uk/documents/XBRL_Tagging_Guide_-_FRC_Taxonomies_2025.pdf",
|
|
361
361
|
"reportPackageMaxMB": "150",
|
|
362
362
|
"reportPackageMeasurement": "zipped",
|
|
363
363
|
"ixTargetUsage": "allowed"
|
|
@@ -14,6 +14,7 @@ from lxml.etree import _Comment, _ElementTree, _Entity, _ProcessingInstruction,
|
|
|
14
14
|
|
|
15
15
|
from arelle import XbrlConst
|
|
16
16
|
from arelle.FunctionIxt import ixtNamespaces
|
|
17
|
+
from arelle.LinkbaseType import LinkbaseType
|
|
17
18
|
from arelle.ModelDocument import ModelDocument, Type as ModelDocumentType
|
|
18
19
|
from arelle.ModelDtsObject import ModelConcept, ModelRelationship
|
|
19
20
|
from arelle.ModelInstanceObject import ModelContext, ModelFact, ModelInlineFootnote, ModelUnit, ModelInlineFact
|
|
@@ -27,7 +28,6 @@ from arelle.utils.validate.ValidationUtil import etreeIterWithDepth
|
|
|
27
28
|
from arelle.XbrlConst import ixbrl11, xhtmlBaseIdentifier, xmlBaseIdentifier
|
|
28
29
|
from arelle.XmlValidate import lexicalPatterns
|
|
29
30
|
from arelle.XmlValidateConst import VALID
|
|
30
|
-
from .LinkbaseType import LinkbaseType
|
|
31
31
|
|
|
32
32
|
DEFAULT_MEMBER_ROLE_URI = 'https://www.nltaxonomie.nl/kvk/role/axis-defaults'
|
|
33
33
|
XBRLI_IDENTIFIER_PATTERN = re.compile(r"^(?!00)\d{8}$")
|
|
@@ -11,6 +11,7 @@ from typing import Any, cast, TYPE_CHECKING
|
|
|
11
11
|
|
|
12
12
|
from lxml.etree import Element
|
|
13
13
|
|
|
14
|
+
from arelle.LinkbaseType import LinkbaseType
|
|
14
15
|
from arelle.ModelDtsObject import ModelConcept, ModelLink, ModelResource, ModelType
|
|
15
16
|
from arelle.ModelInstanceObject import ModelInlineFact
|
|
16
17
|
from arelle.ModelObject import ModelObject
|
|
@@ -31,7 +32,6 @@ from arelle.ValidateDuplicateFacts import getHashEquivalentFactGroups, getAspect
|
|
|
31
32
|
from arelle.utils.validate.ValidationUtil import etreeIterWithDepth
|
|
32
33
|
from ..DisclosureSystems import (ALL_NL_INLINE_DISCLOSURE_SYSTEMS, NL_INLINE_GAAP_IFRS_DISCLOSURE_SYSTEMS,
|
|
33
34
|
NL_INLINE_GAAP_OTHER_DISCLOSURE_SYSTEMS)
|
|
34
|
-
from ..LinkbaseType import LinkbaseType
|
|
35
35
|
from ..PluginValidationDataExtension import (
|
|
36
36
|
PluginValidationDataExtension,
|
|
37
37
|
ALLOWABLE_LANGUAGES,
|
|
@@ -13,12 +13,18 @@ TAXONOMY_REFERENCES = [
|
|
|
13
13
|
"https://xbrl.frc.org.uk/ireland/FRS-101/2019-01-01/ie-FRS-101-2019-01-01.xsd",
|
|
14
14
|
"https://xbrl.frc.org.uk/ireland/FRS-101/2022-01-01/ie-FRS-101-2022-01-01.xsd",
|
|
15
15
|
"https://xbrl.frc.org.uk/ireland/FRS-101/2023-01-01/ie-FRS-101-2023-01-01.xsd",
|
|
16
|
+
"https://xbrl.frc.org.uk/ireland/FRS-101/2025-01-01/ie-FRS-101-2025-01-01.xsd",
|
|
17
|
+
|
|
16
18
|
"https://xbrl.frc.org.uk/ireland/FRS-102/2019-01-01/ie-FRS-102-2019-01-01.xsd",
|
|
17
19
|
"https://xbrl.frc.org.uk/ireland/FRS-102/2022-01-01/ie-FRS-102-2022-01-01.xsd",
|
|
18
20
|
"https://xbrl.frc.org.uk/ireland/FRS-102/2023-01-01/ie-FRS-102-2023-01-01.xsd",
|
|
21
|
+
"https://xbrl.frc.org.uk/ireland/FRS-102/2025-01-01/ie-FRS-102-2025-01-01.xsd",
|
|
22
|
+
|
|
19
23
|
"https://xbrl.frc.org.uk/ireland/IFRS/2019-01-01/ie-IFRS-2019-01-01.xsd",
|
|
20
24
|
"https://xbrl.frc.org.uk/ireland/IFRS/2022-01-01/ie-IFRS-2022-01-01.xsd",
|
|
21
25
|
"https://xbrl.frc.org.uk/ireland/IFRS/2023-01-01/ie-IFRS-2023-01-01.xsd",
|
|
26
|
+
"https://xbrl.frc.org.uk/ireland/IFRS/2025-01-01/ie-IFRS-2025-01-01.xsd",
|
|
27
|
+
|
|
22
28
|
"https://raw.githubusercontent.com/revenue-ie/dpl/master/schemas/ct/combined/2017-09-01/IE-FRS-101-IE-DPL-2017-09-01.xsd",
|
|
23
29
|
"https://raw.githubusercontent.com/revenue-ie/dpl/master/schemas/ct/combined/2017-09-01/IE-FRS-102-IE-DPL-2017-09-01.xsd",
|
|
24
30
|
"https://raw.githubusercontent.com/revenue-ie/dpl/master/schemas/ct/combined/2017-09-01/IE-EU-IFRS-IE-DPL-2017-09-01.xsd",
|
|
@@ -32,6 +32,7 @@ arelle/HashUtil.py,sha256=dS11q9UUUFzP7MgiuNdxFfvF3IpeyZUiOFxVFArEEWE,2963
|
|
|
32
32
|
arelle/HtmlUtil.py,sha256=eXa6yF5xBCOODCuBMY7g8ePZHPOSu6X0gDsW3z9N50A,761
|
|
33
33
|
arelle/InstanceAspectsEvaluator.py,sha256=TePNIs_m0vCIbN5N4PXEyJm529T2WBFi2zmv-72r3Zk,1805
|
|
34
34
|
arelle/LeiUtil.py,sha256=tSPrbQrXEeH5pXgGA_6MAdgMZp20NaW5izJglIXyEQk,5095
|
|
35
|
+
arelle/LinkbaseType.py,sha256=BwRQl4XZFFCopufC2FEMLhYENNTk2JUWVQvnIUsaqtI,3108
|
|
35
36
|
arelle/LocalViewer.py,sha256=WVrfek_bLeFFxgWITi1EQb6xCQN8O9Ks-ZL16vRncSk,3080
|
|
36
37
|
arelle/Locale.py,sha256=07IDxv8nIfvhyRRllFdEAKRI3yo1D2v781cTrjb_RoQ,33193
|
|
37
38
|
arelle/ModelDocument.py,sha256=Sq6umEdn-aNHjxIpEsXTT7A4V25nGY0JiylSnhr9zSI,130749
|
|
@@ -123,7 +124,7 @@ arelle/XmlValidateConst.py,sha256=U_wN0Q-nWKwf6dKJtcu_83FXPn9c6P8JjzGA5b0w7P0,33
|
|
|
123
124
|
arelle/XmlValidateParticles.py,sha256=Mn6vhFl0ZKC_vag1mBwn1rH_x2jmlusJYqOOuxFPO2k,9231
|
|
124
125
|
arelle/XmlValidateSchema.py,sha256=6frtZOc1Yrx_5yYF6V6oHbScnglWrVbWr6xW4EHtLQI,7428
|
|
125
126
|
arelle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
|
-
arelle/_version.py,sha256=
|
|
127
|
+
arelle/_version.py,sha256=mKPFgUQyLBnC_IacXBGYCi1A9bK9yXHMOniKMbX2WAw,515
|
|
127
128
|
arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
|
|
128
129
|
arelle/api/Session.py,sha256=27HVuK3Bz1_21l4_RLn1IQg6v0MNsUEYrHajymyWwxI,7429
|
|
129
130
|
arelle/archive/CustomLogger.py,sha256=v_JXOCQLDZcfaFWzxC9FRcEf9tQi4rCI4Sx7jCuAVQI,1231
|
|
@@ -392,17 +393,18 @@ arelle/plugin/validate/DBA/rules/tm.py,sha256=ui9oKBqlAForwkQ9kk9KBiUogTJE5pv1Rb
|
|
|
392
393
|
arelle/plugin/validate/DBA/rules/tr.py,sha256=4TootFjl0HXsKZk1XNBCyj-vnjRs4lg35hfiz_b_4wU,14684
|
|
393
394
|
arelle/plugin/validate/EBA/__init__.py,sha256=x3zXNcdSDJ3kHfL7kMs0Ve0Vs9oWbzNFVf1TK4Avmy8,45924
|
|
394
395
|
arelle/plugin/validate/EBA/config.xml,sha256=37wMVUAObK-XEqakqD8zPNog20emYt4a_yfL1AKubF8,2022
|
|
395
|
-
arelle/plugin/validate/EDINET/Constants.py,sha256=
|
|
396
|
+
arelle/plugin/validate/EDINET/Constants.py,sha256=_mwJxiGw4uE3krc5DF8Lg9zWe6D1PsnGImekDpBdpH4,1000
|
|
396
397
|
arelle/plugin/validate/EDINET/DisclosureSystems.py,sha256=3rKG42Eg-17Xx_KXU_V5yHW6I3LTwQunvf4a44C9k_4,36
|
|
397
398
|
arelle/plugin/validate/EDINET/FormType.py,sha256=pJfKjdjqFcRLFgH6xbEixvpwatZBBHI8uI3xjjhaPI0,3175
|
|
398
399
|
arelle/plugin/validate/EDINET/Manifest.py,sha256=VWenzA1ndOp802zpTELSLREbCrzrA-nM1UCRpRf1Q3M,4849
|
|
399
|
-
arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=
|
|
400
|
+
arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=qh8JaR0268E_ULNm5CeLrSYUuurvXD6XcoQQNNkM81E,9487
|
|
400
401
|
arelle/plugin/validate/EDINET/ValidationPluginExtension.py,sha256=HIGOpBOyuVs5SEh573M3IzdouRdEuNIBkdumieZi8r0,959
|
|
401
|
-
arelle/plugin/validate/EDINET/__init__.py,sha256=
|
|
402
|
+
arelle/plugin/validate/EDINET/__init__.py,sha256=K3vsgWeLw8BBj5MJ_CUzHgSZQ6jg26VzL2Adr-mTkhc,3583
|
|
402
403
|
arelle/plugin/validate/EDINET/resources/config.xml,sha256=7uT4GcRgk5veMLpFhPPQJxbGKiQvM52P8EMrjn0qd0g,646
|
|
403
404
|
arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml,sha256=997I3RGTLg5OY3vn5hQxVFAAxOmDSOYpuyQe6VnWSY0,16285
|
|
404
405
|
arelle/plugin/validate/EDINET/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
405
|
-
arelle/plugin/validate/EDINET/rules/
|
|
406
|
+
arelle/plugin/validate/EDINET/rules/contexts.py,sha256=feNqSFhfOxPeV0jpSdmwULtY-__eimHtclVKtCyrLZg,7715
|
|
407
|
+
arelle/plugin/validate/EDINET/rules/edinet.py,sha256=7nCqPlpzj2hOU09h0SYjmWbvUgMJmjHTNPwGyJssWm0,9837
|
|
406
408
|
arelle/plugin/validate/EDINET/rules/frta.py,sha256=N0YglHYZuLD2IuwE26viR2ViwUYjneBuMFU9vlrS0aQ,7616
|
|
407
409
|
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=4EKMho6eX-Ygl8yMBVabHQpbC-wxMvi067ubN9mp27U,21982
|
|
408
410
|
arelle/plugin/validate/EDINET/rules/upload.py,sha256=HZ-9Gk6WtIichTGcSsSGIrMXNgsgJYQYwfUKeLs1XWU,20369
|
|
@@ -417,14 +419,13 @@ arelle/plugin/validate/ESEF/ESEF_2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCe
|
|
|
417
419
|
arelle/plugin/validate/ESEF/ESEF_Current/DTS.py,sha256=epp-PBh1NJzQqgxUE6C468HmoDc2w3j54rMwfiOAry4,29334
|
|
418
420
|
arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py,sha256=J9hJcLlE6FA84Ppgthiu4ju0KHJ-JdmVub2qKAKm3as,74985
|
|
419
421
|
arelle/plugin/validate/ESEF/ESEF_Current/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
420
|
-
arelle/plugin/validate/ESEF/resources/authority-validations.json,sha256=
|
|
422
|
+
arelle/plugin/validate/ESEF/resources/authority-validations.json,sha256=_Xnqaj0pdw2QM3LhOguBHnEqbo1eutm643_SO18UJls,15487
|
|
421
423
|
arelle/plugin/validate/ESEF/resources/config.xml,sha256=t3STU_-QYM7Ay8YwZRPapnohiWVWhjfr4L2Rjx9xN9U,3902
|
|
422
424
|
arelle/plugin/validate/FERC/__init__.py,sha256=rC1OYNBWnoXowEohiR9yagHtAi_NPAlmaahRSQhSdS4,11325
|
|
423
425
|
arelle/plugin/validate/FERC/config.xml,sha256=bn9b8eCqJA1J62rYq1Nz85wJrMGAahVmmnIUQZyerjo,1919
|
|
424
426
|
arelle/plugin/validate/FERC/resources/ferc-utr.xml,sha256=OCRj9IUpdXATCBXKbB71apYx9kxcNtZW-Hq4s-avsRY,2663
|
|
425
427
|
arelle/plugin/validate/NL/DisclosureSystems.py,sha256=urRmYJ8RnGPlTgSVKW7zGN4_4CtL3OVKlcI3LwTpBz4,561
|
|
426
|
-
arelle/plugin/validate/NL/
|
|
427
|
-
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=4yO0UlShSFk_iWxLbCZ9SHB1wuJQMcKcDGmVkHcltIY,33672
|
|
428
|
+
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=OswvJzy5AdvIDw1N_IeWDehKbUHdOFnipy0qhjAaImw,33678
|
|
428
429
|
arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=h6CjGJJkE8YqrzPiA8uNaCzn_P6HspH-6ja89tLCXxY,17978
|
|
429
430
|
arelle/plugin/validate/NL/__init__.py,sha256=W-SHohiAWM7Yi77gAbt-D3vvZNAB5s1j16mHCTFta6w,3158
|
|
430
431
|
arelle/plugin/validate/NL/resources/config.xml,sha256=qBE6zywFSmemBSWonuTII5iuOCUlNb1nvkpMbsZb5PM,1853
|
|
@@ -433,9 +434,9 @@ arelle/plugin/validate/NL/rules/br_kvk.py,sha256=0SwKieWzTDm3YMsXPS6zTdgbk7_Z9Cz
|
|
|
433
434
|
arelle/plugin/validate/NL/rules/fg_nl.py,sha256=OJF2EYx4KDTdNggHiw5Trq5S5g7WGpbb7YvO6_IrrGU,10704
|
|
434
435
|
arelle/plugin/validate/NL/rules/fr_kvk.py,sha256=kYqXt45S6eM32Yg9ii7pUhOMfJaHurgYqQ73FyQALs8,8171
|
|
435
436
|
arelle/plugin/validate/NL/rules/fr_nl.py,sha256=vwzk6_P6jhszpeboTM09uOHtm-Lijzz7Iqu7NsYKyaE,31444
|
|
436
|
-
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=
|
|
437
|
+
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=bPD5lfr6dxdVGPZ2D_bEZtbz02tzsX_BZ5kC-CZJNwc,90170
|
|
437
438
|
arelle/plugin/validate/ROS/DisclosureSystems.py,sha256=rJ81mwQDYTi6JecFZ_zhqjjz3VNQRgjHNSh0wcQWAQE,18
|
|
438
|
-
arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=
|
|
439
|
+
arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=nCZoGWNX4aUN5oQBJqa8UrG9tElPW906xkfzRlbjBB8,4285
|
|
439
440
|
arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=HrLoJWHMFjou3j7ro6Ajrcab1JOgi505ZFPEM5a3QOY,776
|
|
440
441
|
arelle/plugin/validate/ROS/__init__.py,sha256=KuWg1MHVzA2S6eaHFptvP3Vu_5gQWf3OUYC97clB7zI,2075
|
|
441
442
|
arelle/plugin/validate/ROS/config.xml,sha256=ZCpCFgr1ZAjoUuhb1eRpDnmKrae-sXA9yl6SOWnrfm8,654
|
|
@@ -759,9 +760,9 @@ arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txr
|
|
|
759
760
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
760
761
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
761
762
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
762
|
-
arelle_release-2.37.
|
|
763
|
-
arelle_release-2.37.
|
|
764
|
-
arelle_release-2.37.
|
|
765
|
-
arelle_release-2.37.
|
|
766
|
-
arelle_release-2.37.
|
|
767
|
-
arelle_release-2.37.
|
|
763
|
+
arelle_release-2.37.44.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
764
|
+
arelle_release-2.37.44.dist-info/METADATA,sha256=-tNggDJbddiKoT1AxjIRIH7S1PVl1ETPhTLD-zjw2Fc,9137
|
|
765
|
+
arelle_release-2.37.44.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
766
|
+
arelle_release-2.37.44.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
767
|
+
arelle_release-2.37.44.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
|
|
768
|
+
arelle_release-2.37.44.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|