arelle-release 2.37.40__py3-none-any.whl → 2.37.41__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/PluginValidationDataExtension.py +16 -0
- arelle/plugin/validate/EDINET/resources/config.xml +1 -0
- arelle/plugin/validate/EDINET/rules/edinet.py +79 -15
- arelle/plugin/validate/EDINET/rules/gfm.py +39 -0
- arelle/plugin/validate/ROS/rules/ros.py +7 -4
- {arelle_release-2.37.40.dist-info → arelle_release-2.37.41.dist-info}/METADATA +1 -1
- {arelle_release-2.37.40.dist-info → arelle_release-2.37.41.dist-info}/RECORD +12 -12
- {arelle_release-2.37.40.dist-info → arelle_release-2.37.41.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.40.dist-info → arelle_release-2.37.41.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.40.dist-info → arelle_release-2.37.41.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.40.dist-info → arelle_release-2.37.41.dist-info}/top_level.txt +0 -0
arelle/_version.py
CHANGED
|
@@ -10,9 +10,12 @@ from functools import lru_cache
|
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
|
|
12
12
|
from arelle.ModelDocument import Type as ModelDocumentType
|
|
13
|
+
from arelle.ModelInstanceObject import ModelFact
|
|
13
14
|
from arelle.ModelObject import ModelObject
|
|
15
|
+
from arelle.ModelValue import QName, qname
|
|
14
16
|
from arelle.ModelXbrl import ModelXbrl
|
|
15
17
|
from arelle.PrototypeDtsObject import LinkPrototype
|
|
18
|
+
from arelle.ValidateDuplicateFacts import getDeduplicatedFacts, DeduplicationType
|
|
16
19
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
17
20
|
from arelle.typing import TypeGetText
|
|
18
21
|
from arelle.utils.PluginData import PluginData
|
|
@@ -31,8 +34,17 @@ class UploadContents:
|
|
|
31
34
|
|
|
32
35
|
@dataclass
|
|
33
36
|
class PluginValidationDataExtension(PluginData):
|
|
37
|
+
assetsIfrsQn: QName
|
|
38
|
+
liabilitiesAndEquityIfrsQn: QName
|
|
39
|
+
|
|
34
40
|
_primaryModelXbrl: ModelXbrl | None = None
|
|
35
41
|
|
|
42
|
+
def __init__(self, name: str):
|
|
43
|
+
super().__init__(name)
|
|
44
|
+
jpigpNamespace = "http://disclosure.edinet-fsa.go.jp/taxonomy/jpigp/2024-11-01/jpigp_cor"
|
|
45
|
+
self.assetsIfrsQn = qname(jpigpNamespace, 'AssetsIFRS')
|
|
46
|
+
self.liabilitiesAndEquityIfrsQn = qname(jpigpNamespace, "LiabilitiesAndEquityIFRS")
|
|
47
|
+
|
|
36
48
|
# Identity hash for caching.
|
|
37
49
|
def __hash__(self) -> int:
|
|
38
50
|
return id(self)
|
|
@@ -63,6 +75,10 @@ class PluginValidationDataExtension(PluginData):
|
|
|
63
75
|
return False # Not a zipfile
|
|
64
76
|
return True
|
|
65
77
|
|
|
78
|
+
@lru_cache(1)
|
|
79
|
+
def getDeduplicatedFacts(self, modelXbrl: ModelXbrl) -> list[ModelFact]:
|
|
80
|
+
return getDeduplicatedFacts(modelXbrl, DeduplicationType.CONSISTENT_PAIRS)
|
|
81
|
+
|
|
66
82
|
@lru_cache(1)
|
|
67
83
|
def getFootnoteLinkElements(self, modelXbrl: ModelXbrl) -> list[ModelObject | LinkPrototype]:
|
|
68
84
|
# TODO: Consolidate with similar implementations in EDGAR and FERC
|
|
@@ -3,9 +3,11 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
import
|
|
7
|
-
from
|
|
8
|
-
from typing import Any
|
|
6
|
+
from collections import defaultdict
|
|
7
|
+
from decimal import Decimal
|
|
8
|
+
from typing import Any, Iterable, cast
|
|
9
|
+
|
|
10
|
+
import regex
|
|
9
11
|
|
|
10
12
|
from arelle import XbrlConst
|
|
11
13
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
@@ -84,6 +86,13 @@ def rule_EC8033W(
|
|
|
84
86
|
and context.endDatetime is not None
|
|
85
87
|
and context.isStartEndPeriod
|
|
86
88
|
]
|
|
89
|
+
latestPriorYearContext = None
|
|
90
|
+
for priorYearContext in priorYearContexts:
|
|
91
|
+
if latestPriorYearContext is None or \
|
|
92
|
+
priorYearContext.endDatetime > latestPriorYearContext.endDatetime:
|
|
93
|
+
latestPriorYearContext = priorYearContext
|
|
94
|
+
if latestPriorYearContext is None:
|
|
95
|
+
return
|
|
87
96
|
currentYearContexts = [
|
|
88
97
|
context
|
|
89
98
|
for contextId, context in val.modelXbrl.contexts.items()
|
|
@@ -91,17 +100,72 @@ def rule_EC8033W(
|
|
|
91
100
|
and context.startDatetime is not None
|
|
92
101
|
and context.isStartEndPeriod
|
|
93
102
|
]
|
|
94
|
-
|
|
95
|
-
|
|
103
|
+
earliestCurrentYearContext = None
|
|
104
|
+
for currentYearContext in currentYearContexts:
|
|
105
|
+
if earliestCurrentYearContext is None or \
|
|
106
|
+
currentYearContext.endDatetime > earliestCurrentYearContext.startDatetime:
|
|
107
|
+
earliestCurrentYearContext = currentYearContext
|
|
108
|
+
if earliestCurrentYearContext is None:
|
|
109
|
+
return
|
|
110
|
+
if latestPriorYearContext.endDatetime > earliestCurrentYearContext.startDatetime:
|
|
111
|
+
yield Validation.warning(
|
|
112
|
+
codes='EDINET.EC8033W',
|
|
113
|
+
msg=_("The startDate element of the current year context (id=%(currentYearContextId)s) is "
|
|
114
|
+
"set to a date that is earlier than the endDate element of the prior year context "
|
|
115
|
+
"(id=%(priorYearContextId)s). Please check the corresponding context ID "
|
|
116
|
+
"%(currentYearContextId)s and %(priorYearContextId)s. Set the startDate element of "
|
|
117
|
+
"context ID %(currentYearContextId)s to a date that is later than or equal to the "
|
|
118
|
+
"endDate element of context ID %(priorYearContextId)s."),
|
|
119
|
+
currentYearContextId=earliestCurrentYearContext.id,
|
|
120
|
+
priorYearContextId=latestPriorYearContext.id,
|
|
121
|
+
modelObject=priorYearContexts + currentYearContexts,
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
@validation(
|
|
126
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
127
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
128
|
+
)
|
|
129
|
+
def rule_EC8062W(
|
|
130
|
+
pluginData: PluginValidationDataExtension,
|
|
131
|
+
val: ValidateXbrl,
|
|
132
|
+
*args: Any,
|
|
133
|
+
**kwargs: Any,
|
|
134
|
+
) -> Iterable[Validation]:
|
|
135
|
+
"""
|
|
136
|
+
EDINET.EC8062W: The sum of all liabilities and equity must equal the sum of all assets.
|
|
137
|
+
"""
|
|
138
|
+
deduplicatedFacts = pluginData.getDeduplicatedFacts(val.modelXbrl)
|
|
139
|
+
contextIdPattern = regex.compile(r'^(Prior[1-9]Year|CurrentYear|Prior[1-9]Interim|Interim)(Duration|Instant)$')
|
|
140
|
+
|
|
141
|
+
factsByContextId = defaultdict(list)
|
|
142
|
+
for fact in deduplicatedFacts:
|
|
143
|
+
if fact.qname not in (pluginData.assetsIfrsQn, pluginData.liabilitiesAndEquityIfrsQn):
|
|
144
|
+
continue
|
|
145
|
+
if fact.contextID is None or not contextIdPattern.match(fact.contextID):
|
|
146
|
+
continue
|
|
147
|
+
factsByContextId[fact.contextID].append(fact)
|
|
148
|
+
|
|
149
|
+
for facts in factsByContextId.values():
|
|
150
|
+
assetSum = Decimal(0)
|
|
151
|
+
liabilitiesAndEquitySum = Decimal(0)
|
|
152
|
+
for fact in facts:
|
|
153
|
+
if isinstance(fact.xValue, float):
|
|
154
|
+
value = Decimal(fact.xValue)
|
|
155
|
+
else:
|
|
156
|
+
value = cast(Decimal, fact.xValue)
|
|
157
|
+
if fact.qname == pluginData.assetsIfrsQn:
|
|
158
|
+
assetSum += value
|
|
159
|
+
elif fact.qname == pluginData.liabilitiesAndEquityIfrsQn:
|
|
160
|
+
liabilitiesAndEquitySum += value
|
|
161
|
+
if assetSum != liabilitiesAndEquitySum:
|
|
96
162
|
yield Validation.warning(
|
|
97
|
-
codes='EDINET.
|
|
98
|
-
msg=_("The
|
|
99
|
-
"
|
|
100
|
-
"(
|
|
101
|
-
"
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
priorYearContextId=priorYearContext.id,
|
|
106
|
-
modelObject=(priorYearContext, currentYearContext),
|
|
163
|
+
codes='EDINET.EC8062W',
|
|
164
|
+
msg=_("The consolidated statement of financial position is not reconciled. "
|
|
165
|
+
"The sum of all liabilities and equity must equal the sum of all assets. "
|
|
166
|
+
"Please correct the debit (%(liabilitiesAndEquitySum)s) and credit (%(assetSum)s) "
|
|
167
|
+
"values so that they match."),
|
|
168
|
+
liabilitiesAndEquitySum=f"{liabilitiesAndEquitySum:,}",
|
|
169
|
+
assetSum=f"{assetSum:,}",
|
|
170
|
+
modelObject=facts,
|
|
107
171
|
)
|
|
@@ -3,13 +3,16 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
+
from collections import defaultdict
|
|
6
7
|
from datetime import timedelta
|
|
7
8
|
from typing import Any, cast, Iterable
|
|
8
9
|
|
|
9
10
|
import regex
|
|
10
11
|
|
|
11
12
|
from arelle import XbrlConst, XmlUtil
|
|
13
|
+
from arelle.ModelInstanceObject import ModelFact
|
|
12
14
|
from arelle.ModelObject import ModelObject
|
|
15
|
+
from arelle.ModelValue import QName
|
|
13
16
|
from arelle.PrototypeDtsObject import LocPrototype, ArcPrototype
|
|
14
17
|
from arelle.UrlUtil import isHttpUrl, splitDecodeFragment
|
|
15
18
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
@@ -311,6 +314,42 @@ def rule_gfm_1_2_10(
|
|
|
311
314
|
)
|
|
312
315
|
|
|
313
316
|
|
|
317
|
+
@validation(
|
|
318
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
319
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
320
|
+
)
|
|
321
|
+
def rule_gfm_1_2_13(
|
|
322
|
+
pluginData: PluginValidationDataExtension,
|
|
323
|
+
val: ValidateXbrl,
|
|
324
|
+
*args: Any,
|
|
325
|
+
**kwargs: Any,
|
|
326
|
+
) -> Iterable[Validation]:
|
|
327
|
+
"""
|
|
328
|
+
EDINET.EC5700W: [GFM 1.2.13] An instance having a fact with non-nil content and the xml:lang
|
|
329
|
+
attribute of value different than the default language must also contain a fact using the same element
|
|
330
|
+
and all other attributes with an xml:lang attribute that represents the default language.
|
|
331
|
+
"""
|
|
332
|
+
defaultLang = cast(str, val.disclosureSystem.defaultXmlLang)
|
|
333
|
+
languageFacts: dict[str,dict[QName, set[ModelFact]]] = defaultdict(lambda: defaultdict(set))
|
|
334
|
+
for fact in val.modelXbrl.facts:
|
|
335
|
+
if fact.xValid >= VALID and fact.xmlLang is not None and not fact.isNil:
|
|
336
|
+
languageFacts[fact.xmlLang][fact.qname].add(fact)
|
|
337
|
+
for language, qnames in languageFacts.items():
|
|
338
|
+
if language != defaultLang:
|
|
339
|
+
for qname, facts in qnames.items():
|
|
340
|
+
matchingQnames = languageFacts[defaultLang][qname]
|
|
341
|
+
for fact in facts:
|
|
342
|
+
if not any(fact.context.isEqualTo(mq.context) for mq in matchingQnames):
|
|
343
|
+
yield Validation.warning(
|
|
344
|
+
codes='EDINET.EC5700W.GFM.1.2.13',
|
|
345
|
+
msg=_('There is an element whose xml:lang attribute is in a language other than Japanese, '
|
|
346
|
+
'but there is no element whose xml:lang attribute is in Japanese. Delete the non-Japanese element, '
|
|
347
|
+
'or set an element whose xml:lang attribute is in Japanese.'),
|
|
348
|
+
modelObject = fact
|
|
349
|
+
)
|
|
350
|
+
|
|
351
|
+
|
|
352
|
+
|
|
314
353
|
@validation(
|
|
315
354
|
hook=ValidationHook.XBRL_FINALLY,
|
|
316
355
|
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
@@ -4,10 +4,11 @@ See COPYRIGHT.md for copyright information.
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
6
|
import os
|
|
7
|
-
from typing import Any
|
|
7
|
+
from typing import Any, cast
|
|
8
8
|
|
|
9
9
|
from collections import Counter
|
|
10
10
|
from collections.abc import Iterable
|
|
11
|
+
from decimal import Decimal
|
|
11
12
|
|
|
12
13
|
from arelle.typing import TypeGetText
|
|
13
14
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
@@ -296,23 +297,25 @@ def rule_ros19(
|
|
|
296
297
|
"""
|
|
297
298
|
ROS: Rule 19: DPLTurnoverRevenue should be tested to be less than or equal to 10x the absolute value of Equity
|
|
298
299
|
"""
|
|
300
|
+
def convertToDecimal(value):
|
|
301
|
+
return Decimal(value) if isinstance(value, float) else cast(Decimal, value)
|
|
299
302
|
equity_facts = val.modelXbrl.factsByLocalName.get(EQUITY, set())
|
|
300
303
|
largest_equity_fact = None
|
|
301
304
|
for e_fact in equity_facts:
|
|
302
305
|
if e_fact.xValid >= VALID:
|
|
303
|
-
if largest_equity_fact is None or abs(
|
|
306
|
+
if largest_equity_fact is None or abs(convertToDecimal(e_fact.xValue)) > abs(convertToDecimal(largest_equity_fact.xValue)):
|
|
304
307
|
largest_equity_fact = e_fact
|
|
305
308
|
|
|
306
309
|
turnover_facts = val.modelXbrl.factsByLocalName.get(TURNOVER_REVENUE, set())
|
|
307
310
|
largest_turnover_fact = None
|
|
308
311
|
for t_fact in turnover_facts:
|
|
309
312
|
if t_fact.xValid >= VALID:
|
|
310
|
-
if largest_turnover_fact is None or
|
|
313
|
+
if largest_turnover_fact is None or convertToDecimal(t_fact.xValue) > convertToDecimal(largest_turnover_fact.xValue):
|
|
311
314
|
largest_turnover_fact = t_fact
|
|
312
315
|
|
|
313
316
|
if (largest_equity_fact is not None and
|
|
314
317
|
largest_turnover_fact is not None and
|
|
315
|
-
|
|
318
|
+
convertToDecimal(largest_turnover_fact.xValue)) > (10 * abs(convertToDecimal(largest_equity_fact.xValue))):
|
|
316
319
|
yield Validation.error(
|
|
317
320
|
"ROS.19",
|
|
318
321
|
_("Turnover / Revenue (DPLTurnoverRevenue) may exceed the maximum expected value. Please review the submission and, if correct, test your submission with Revenue Online's iXBRL test facility."),
|
|
@@ -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=U62S37dJhYrPn2KWdnBMMwXbtf-OhmJZIBOKZhfOI58,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
|
|
@@ -396,15 +396,15 @@ arelle/plugin/validate/EDINET/Constants.py,sha256=QG69rWdpIrpQzZQkRcDWk2i3rlBVoh
|
|
|
396
396
|
arelle/plugin/validate/EDINET/DisclosureSystems.py,sha256=3rKG42Eg-17Xx_KXU_V5yHW6I3LTwQunvf4a44C9k_4,36
|
|
397
397
|
arelle/plugin/validate/EDINET/FormType.py,sha256=pJfKjdjqFcRLFgH6xbEixvpwatZBBHI8uI3xjjhaPI0,3175
|
|
398
398
|
arelle/plugin/validate/EDINET/Manifest.py,sha256=VWenzA1ndOp802zpTELSLREbCrzrA-nM1UCRpRf1Q3M,4849
|
|
399
|
-
arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=
|
|
399
|
+
arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=8w0C-H4hskBN9rho0M6wGgQfkTZMgM3aot6L0sYLVwc,7084
|
|
400
400
|
arelle/plugin/validate/EDINET/ValidationPluginExtension.py,sha256=HIGOpBOyuVs5SEh573M3IzdouRdEuNIBkdumieZi8r0,959
|
|
401
401
|
arelle/plugin/validate/EDINET/__init__.py,sha256=ew9Rc2qJe5d3XvOOFzhX6MfzxNUtxIYfxRGX-wkfR1c,3555
|
|
402
|
-
arelle/plugin/validate/EDINET/resources/config.xml,sha256=
|
|
402
|
+
arelle/plugin/validate/EDINET/resources/config.xml,sha256=7uT4GcRgk5veMLpFhPPQJxbGKiQvM52P8EMrjn0qd0g,646
|
|
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
|
-
arelle/plugin/validate/EDINET/rules/edinet.py,sha256=
|
|
405
|
+
arelle/plugin/validate/EDINET/rules/edinet.py,sha256=_qrGBV667MfExFpeIygrfWbBuLFw2zrMZGNyzQNRjqA,6826
|
|
406
406
|
arelle/plugin/validate/EDINET/rules/frta.py,sha256=N0YglHYZuLD2IuwE26viR2ViwUYjneBuMFU9vlrS0aQ,7616
|
|
407
|
-
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=
|
|
407
|
+
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=4EKMho6eX-Ygl8yMBVabHQpbC-wxMvi067ubN9mp27U,21982
|
|
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
|
|
@@ -441,7 +441,7 @@ arelle/plugin/validate/ROS/__init__.py,sha256=KuWg1MHVzA2S6eaHFptvP3Vu_5gQWf3OUY
|
|
|
441
441
|
arelle/plugin/validate/ROS/config.xml,sha256=ZCpCFgr1ZAjoUuhb1eRpDnmKrae-sXA9yl6SOWnrfm8,654
|
|
442
442
|
arelle/plugin/validate/ROS/resources/config.xml,sha256=HXWume5HlrAqOx5AtiWWqgADbRatA8YSfm_JvZGwdgQ,657
|
|
443
443
|
arelle/plugin/validate/ROS/rules/__init__.py,sha256=wW7BUAIb7sRkOxC1Amc_ZKrz03FM-Qh1TyZe6wxYaAU,1567
|
|
444
|
-
arelle/plugin/validate/ROS/rules/ros.py,sha256=
|
|
444
|
+
arelle/plugin/validate/ROS/rules/ros.py,sha256=EcPY2tQTFICNtTSR_95pdFoBRg0K7yGLlZNVYoHGpn4,19870
|
|
445
445
|
arelle/plugin/validate/UK/ValidateUK.py,sha256=0UhSwsY1lrY-EAEBJJR9QY38YXGBZ6PEgmuC5gQfBlI,57813
|
|
446
446
|
arelle/plugin/validate/UK/__init__.py,sha256=KE6s_B-EvrHDCtWQz2N_wQwyx_ZbWhYNV2GfQnluxMw,30655
|
|
447
447
|
arelle/plugin/validate/UK/config.xml,sha256=mUFhWDfBzGTn7v0ZSmf4HaweQTMJh_4ZcJmD9mzCHrA,1547
|
|
@@ -759,9 +759,9 @@ arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txr
|
|
|
759
759
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
760
760
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
761
761
|
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.
|
|
762
|
+
arelle_release-2.37.41.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
763
|
+
arelle_release-2.37.41.dist-info/METADATA,sha256=35ud-2G1jCFZ1rgVkMj7AQIZ8CcLkQ5z4mNH49402-E,9137
|
|
764
|
+
arelle_release-2.37.41.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
765
|
+
arelle_release-2.37.41.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
766
|
+
arelle_release-2.37.41.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
|
|
767
|
+
arelle_release-2.37.41.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|