arelle-release 2.37.42__py3-none-any.whl → 2.37.43__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.42'
21
- __version_tuple__ = version_tuple = (2, 37, 42)
20
+ __version__ = version = '2.37.43'
21
+ __version_tuple__ = version_tuple = (2, 37, 43)
@@ -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,6 +19,7 @@ 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
@@ -35,15 +38,34 @@ class UploadContents:
35
38
  @dataclass
36
39
  class PluginValidationDataExtension(PluginData):
37
40
  assetsIfrsQn: QName
41
+ documentTypeDeiQn: QName
42
+ jpcrpEsrFilingDateCoverPageQn: QName
43
+ jpcrpFilingDateCoverPageQn: QName
44
+ jpspsFilingDateCoverPageQn: QName
38
45
  liabilitiesAndEquityIfrsQn: QName
46
+ nonConsolidatedMemberQn: QName
47
+
48
+ contextIdPattern: regex.Pattern[str]
39
49
 
40
50
  _primaryModelXbrl: ModelXbrl | None = None
41
51
 
42
52
  def __init__(self, name: str):
43
53
  super().__init__(name)
54
+ jpcrpEsrNamespace = "http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp-esr/2024-11-01/jpcrp-esr_cor"
55
+ jpcrpNamespace = 'http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp/2024-11-01/jpcrp_cor'
56
+ jpdeiNamespace = 'http://disclosure.edinet-fsa.go.jp/taxonomy/jpdei/2013-08-31/jpdei_cor'
44
57
  jpigpNamespace = "http://disclosure.edinet-fsa.go.jp/taxonomy/jpigp/2024-11-01/jpigp_cor"
58
+ jppfsNamespace = "http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2024-11-01/jppfs_cor"
59
+ jpspsNamespace = 'http://disclosure.edinet-fsa.go.jp/taxonomy/jpsps/2024-11-01/jpsps_cor'
45
60
  self.assetsIfrsQn = qname(jpigpNamespace, 'AssetsIFRS')
61
+ self.documentTypeDeiQn = qname(jpdeiNamespace, 'DocumentTypeDEI')
62
+ self.jpcrpEsrFilingDateCoverPageQn = qname(jpcrpEsrNamespace, 'FilingDateCoverPage')
63
+ self.jpcrpFilingDateCoverPageQn = qname(jpcrpNamespace, 'FilingDateCoverPage')
64
+ self.jpspsFilingDateCoverPageQn = qname(jpspsNamespace, 'FilingDateCoverPage')
46
65
  self.liabilitiesAndEquityIfrsQn = qname(jpigpNamespace, "LiabilitiesAndEquityIFRS")
66
+ self.nonConsolidatedMemberQn = qname(jppfsNamespace, "NonConsolidatedMember")
67
+
68
+ self.contextIdPattern = regex.compile(r'(Prior[1-9]Year|CurrentYear|Prior[1-9]Interim|Interim)(Duration|Instant)')
47
69
 
48
70
  # Identity hash for caching.
49
71
  def __hash__(self) -> int:
@@ -79,6 +101,15 @@ class PluginValidationDataExtension(PluginData):
79
101
  def getDeduplicatedFacts(self, modelXbrl: ModelXbrl) -> list[ModelFact]:
80
102
  return getDeduplicatedFacts(modelXbrl, DeduplicationType.CONSISTENT_PAIRS)
81
103
 
104
+ @lru_cache(1)
105
+ def getDocumentTypes(self, modelXbrl: ModelXbrl) -> set[str]:
106
+ documentFacts = modelXbrl.factsByQname.get(self.documentTypeDeiQn, set())
107
+ documentTypes = set()
108
+ for fact in documentFacts:
109
+ if fact.xValid >= VALID:
110
+ documentTypes.add(fact.textValue)
111
+ return documentTypes
112
+
82
113
  @lru_cache(1)
83
114
  def getFootnoteLinkElements(self, modelXbrl: ModelXbrl) -> list[ModelObject | LinkPrototype]:
84
115
  # TODO: Consolidate with similar implementations in EDGAR and FERC
@@ -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,11 +7,11 @@ 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
14
+ from arelle.XmlValidateConst import VALID
15
15
  from arelle.typing import TypeGetText
16
16
  from arelle.utils.PluginHooks import ValidationHook
17
17
  from arelle.utils.validate.Decorator import validation
@@ -22,6 +22,34 @@ from ..PluginValidationDataExtension import PluginValidationDataExtension
22
22
  _: TypeGetText
23
23
 
24
24
 
25
+ @validation(
26
+ hook=ValidationHook.XBRL_FINALLY,
27
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
28
+ )
29
+ def rule_EC1057E(
30
+ pluginData: PluginValidationDataExtension,
31
+ val: ValidateXbrl,
32
+ *args: Any,
33
+ **kwargs: Any,
34
+ ) -> Iterable[Validation]:
35
+ """
36
+ EDINET.EC1057E: The submission date on the cover page has not been filled in.
37
+ Ensure that there is a nonnil value disclosed for FilingDateCoverPage
38
+ Note: This rule is only applicable to the public documents.
39
+ """
40
+ dei = pluginData.getDocumentTypes(val.modelXbrl)
41
+ if len(dei) > 0:
42
+ jpcrpEsrFacts = val.modelXbrl.factsByQname.get(pluginData.jpcrpEsrFilingDateCoverPageQn, set())
43
+ jpcrpFacts = val.modelXbrl.factsByQname.get(pluginData.jpcrpFilingDateCoverPageQn, set())
44
+ jpspsFacts = val.modelXbrl.factsByQname.get(pluginData.jpspsFilingDateCoverPageQn, set())
45
+ requiredFacts = jpcrpFacts.union(jpspsFacts, jpcrpEsrFacts)
46
+ if not any(fact.xValid >= VALID and not fact.isNil for fact in requiredFacts):
47
+ yield Validation.error(
48
+ codes='EDINET.EC1057E',
49
+ msg=_("The [Submission Date] on the cover page has not been filled in."),
50
+ )
51
+
52
+
25
53
  @validation(
26
54
  hook=ValidationHook.XBRL_FINALLY,
27
55
  disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
@@ -43,7 +71,7 @@ def rule_EC5002E(
43
71
  errorFacts = []
44
72
  for fact in val.modelXbrl.facts:
45
73
  concept = fact.concept
46
- if not concept.isShares:
74
+ if concept is None or not concept.isShares:
47
75
  continue
48
76
  unit = fact.unit
49
77
  measures = unit.measures
@@ -104,58 +132,50 @@ def rule_EC8024E(
104
132
  hook=ValidationHook.XBRL_FINALLY,
105
133
  disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
106
134
  )
107
- def rule_EC8033W(
135
+ def rule_EC8027W(
108
136
  pluginData: PluginValidationDataExtension,
109
137
  val: ValidateXbrl,
110
138
  *args: Any,
111
139
  **kwargs: Any,
112
140
  ) -> Iterable[Validation]:
113
141
  """
114
- EDINET.EC8033W: The startDate of a context whose context ID starts with
115
- "CurrentYear" is not set to a date earlier than the endDate of a context
116
- whose context ID starts with "Prior1Year".
142
+ EDINET.EC8027W: For presentation links and definition links, there must be
143
+ only one root element.
144
+ File name: xxx <Extended link role = yyy>
145
+ Please correct the extended link role of the relevant file. Please set only one
146
+ root element of the extended link role in the presentation link and definition link.
117
147
  """
118
- priorYearContexts = [
119
- context
120
- for contextId, context in val.modelXbrl.contexts.items()
121
- if contextId.startswith('Prior1Year')
122
- and context.endDatetime is not None
123
- and context.isStartEndPeriod
148
+ linkbaseTypes = (LinkbaseType.PRESENTATION, LinkbaseType.DEFINITION)
149
+ roleTypes = [
150
+ roleType
151
+ for roleTypes in val.modelXbrl.roleTypes.values()
152
+ for roleType in roleTypes
124
153
  ]
125
- latestPriorYearContext = None
126
- for priorYearContext in priorYearContexts:
127
- if latestPriorYearContext is None or \
128
- priorYearContext.endDatetime > latestPriorYearContext.endDatetime:
129
- latestPriorYearContext = priorYearContext
130
- if latestPriorYearContext is None:
131
- return
132
- currentYearContexts = [
133
- context
134
- for contextId, context in val.modelXbrl.contexts.items()
135
- if contextId.startswith('CurrentYear')
136
- and context.startDatetime is not None
137
- and context.isStartEndPeriod
138
- ]
139
- earliestCurrentYearContext = None
140
- for currentYearContext in currentYearContexts:
141
- if earliestCurrentYearContext is None or \
142
- currentYearContext.endDatetime > earliestCurrentYearContext.startDatetime:
143
- earliestCurrentYearContext = currentYearContext
144
- if earliestCurrentYearContext is None:
145
- return
146
- if latestPriorYearContext.endDatetime > earliestCurrentYearContext.startDatetime:
147
- yield Validation.warning(
148
- codes='EDINET.EC8033W',
149
- msg=_("The startDate element of the current year context (id=%(currentYearContextId)s) is "
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
- )
154
+ for roleType in roleTypes:
155
+ for linkbaseType in linkbaseTypes:
156
+ if linkbaseType.getLinkQn() not in roleType.usedOns:
157
+ continue
158
+ arcroles = linkbaseType.getArcroles()
159
+ relSet = val.modelXbrl.relationshipSet(tuple(arcroles), roleType.roleURI)
160
+ relSetFrom = relSet.loadModelRelationshipsFrom()
161
+ rootConcepts = relSet.rootConcepts
162
+ if len(rootConcepts) < 2:
163
+ continue
164
+ rels = [
165
+ rel
166
+ for rootConcept in rootConcepts
167
+ for rel in relSetFrom[rootConcept]
168
+ ]
169
+ yield Validation.warning(
170
+ codes='EDINET.EC8027W',
171
+ msg=_("For presentation links and definition links, there must be only one root element. "
172
+ "File name: %(filename)s <Extended link role = %(roleUri)s> "
173
+ "Please correct the extended link role of the relevant file. Please set only one "
174
+ "root element of the extended link role in the presentation link and definition link."),
175
+ filename=rels[0].modelDocument.basename,
176
+ roleUri=roleType.roleURI,
177
+ modelObject=rels,
178
+ )
159
179
 
160
180
 
161
181
  @validation(
@@ -172,13 +192,12 @@ def rule_EC8062W(
172
192
  EDINET.EC8062W: The sum of all liabilities and equity must equal the sum of all assets.
173
193
  """
174
194
  deduplicatedFacts = pluginData.getDeduplicatedFacts(val.modelXbrl)
175
- contextIdPattern = regex.compile(r'^(Prior[1-9]Year|CurrentYear|Prior[1-9]Interim|Interim)(Duration|Instant)$')
176
195
 
177
196
  factsByContextId = defaultdict(list)
178
197
  for fact in deduplicatedFacts:
179
198
  if fact.qname not in (pluginData.assetsIfrsQn, pluginData.liabilitiesAndEquityIfrsQn):
180
199
  continue
181
- if fact.contextID is None or not contextIdPattern.match(fact.contextID):
200
+ if fact.contextID is None or not pluginData.contextIdPattern.fullmatch(fact.contextID):
182
201
  continue
183
202
  factsByContextId[fact.contextID].append(fact)
184
203
 
@@ -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_-_FRC_Taxonomies_2024_On9jOuS.pdf",
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_-_FRC_Taxonomies_2024_On9jOuS.pdf",
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,
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arelle-release
3
- Version: 2.37.42
3
+ Version: 2.37.43
4
4
  Summary: An open source XBRL platform.
5
5
  Author-email: "arelle.org" <support@arelle.org>
6
6
  License-Expression: Apache-2.0
@@ -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=ksGS-4a5qZTGFbhhxaUO_PlhVGdAJc3Vdh01X5jVPGA,515
127
+ arelle/_version.py,sha256=_yeUbYff5hFRJ7TaTKvPkSogzmTAov8fO5hCxibhlH4,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
@@ -396,13 +397,14 @@ arelle/plugin/validate/EDINET/Constants.py,sha256=QG69rWdpIrpQzZQkRcDWk2i3rlBVoh
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=8w0C-H4hskBN9rho0M6wGgQfkTZMgM3aot6L0sYLVwc,7084
400
+ arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=3bGTdUI0bddAAQq4Du1sKyQobJlfCc3ZVCRSA2lfAsk,8758
400
401
  arelle/plugin/validate/EDINET/ValidationPluginExtension.py,sha256=HIGOpBOyuVs5SEh573M3IzdouRdEuNIBkdumieZi8r0,959
401
- arelle/plugin/validate/EDINET/__init__.py,sha256=ew9Rc2qJe5d3XvOOFzhX6MfzxNUtxIYfxRGX-wkfR1c,3555
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/edinet.py,sha256=DTSQY1iEeJ6TTgLFRwi99Pxu8hUdZd51M398RILhf8c,8494
406
+ arelle/plugin/validate/EDINET/rules/contexts.py,sha256=feNqSFhfOxPeV0jpSdmwULtY-__eimHtclVKtCyrLZg,7715
407
+ arelle/plugin/validate/EDINET/rules/edinet.py,sha256=yl5kRFAsc9BKYw5TW05ghDOl2ubJROUnTIKfEQ-o1W0,9192
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=bR0ZMpiQL9LqiyzrjhAGMDLEHBHimsDuDu9SQY5xofA,15503
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/LinkbaseType.py,sha256=BwRQl4XZFFCopufC2FEMLhYENNTk2JUWVQvnIUsaqtI,3108
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,7 +434,7 @@ 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=KE2bOX1eQWxW1cVzMGR-HLgJ36zUq77D9DpA9-GvwNk,90165
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
439
  arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=IV7ILhNvgKwQXqbpSA6HRNt9kEnejCyMADI3wyyIgk0,4036
439
440
  arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=HrLoJWHMFjou3j7ro6Ajrcab1JOgi505ZFPEM5a3QOY,776
@@ -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.42.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
763
- arelle_release-2.37.42.dist-info/METADATA,sha256=y-aLY_rzUkLN5s8wSNwDLgALr5YnSDDGAqVHrP1lRnI,9137
764
- arelle_release-2.37.42.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
765
- arelle_release-2.37.42.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
766
- arelle_release-2.37.42.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
767
- arelle_release-2.37.42.dist-info/RECORD,,
763
+ arelle_release-2.37.43.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
764
+ arelle_release-2.37.43.dist-info/METADATA,sha256=j1T8fS8zCMEJTSh6kRSHFfV5XRPqmNEPKsbOGVj6qoY,9137
765
+ arelle_release-2.37.43.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
766
+ arelle_release-2.37.43.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
767
+ arelle_release-2.37.43.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
768
+ arelle_release-2.37.43.dist-info/RECORD,,