arelle-release 2.37.32__py3-none-any.whl → 2.37.34__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/CntlrCmdLine.py +2 -2
- arelle/CntlrWebMain.py +6 -10
- arelle/DisclosureSystem.py +1 -1
- arelle/FileSource.py +31 -5
- arelle/XbrlConst.py +8 -3
- arelle/_version.py +2 -2
- arelle/api/Session.py +2 -6
- arelle/oim/Load.py +6 -7
- arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +3 -0
- arelle/plugin/validate/EDINET/__init__.py +20 -1
- arelle/plugin/validate/EDINET/resources/config.xml +2 -0
- arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml +60 -0
- arelle/plugin/validate/EDINET/rules/edinet.py +61 -0
- arelle/plugin/validate/EDINET/rules/frta.py +48 -0
- arelle/plugin/validate/EDINET/rules/gfm.py +76 -0
- arelle/plugin/validate/EDINET/rules/upload.py +4 -5
- arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +16 -3
- arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +31 -3
- arelle/plugin/validate/ESEF/resources/authority-validations.json +2 -0
- arelle/plugin/validate/NL/rules/nl_kvk.py +9 -11
- {arelle_release-2.37.32.dist-info → arelle_release-2.37.34.dist-info}/METADATA +1 -1
- {arelle_release-2.37.32.dist-info → arelle_release-2.37.34.dist-info}/RECORD +26 -22
- {arelle_release-2.37.32.dist-info → arelle_release-2.37.34.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.32.dist-info → arelle_release-2.37.34.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.32.dist-info → arelle_release-2.37.34.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.32.dist-info → arelle_release-2.37.34.dist-info}/top_level.txt +0 -0
arelle/CntlrCmdLine.py
CHANGED
|
@@ -634,7 +634,7 @@ class CntlrCmdLine(Cntlr.Cntlr):
|
|
|
634
634
|
super().__init__(hasGui=False, uiLang=uiLang, disable_persistent_config=disable_persistent_config, logFileName=logFileName)
|
|
635
635
|
self.preloadedPlugins = {}
|
|
636
636
|
|
|
637
|
-
def run(self, options: RuntimeOptions, sourceZipStream=None, responseZipStream=None
|
|
637
|
+
def run(self, options: RuntimeOptions, sourceZipStream=None, responseZipStream=None) -> bool:
|
|
638
638
|
"""Process command line arguments or web service request, such as to load and validate an XBRL document, or start web server.
|
|
639
639
|
|
|
640
640
|
When a web server has been requested, this method may be called multiple times, once for each web service (REST) request that requires processing.
|
|
@@ -998,7 +998,7 @@ class CntlrCmdLine(Cntlr.Cntlr):
|
|
|
998
998
|
_entryPoints.append({"file":f})
|
|
999
999
|
filesource = None # file source for all instances if not None
|
|
1000
1000
|
if sourceZipStream:
|
|
1001
|
-
filesource = FileSource.openFileSource(None, self, sourceZipStream
|
|
1001
|
+
filesource = FileSource.openFileSource(None, self, sourceZipStream)
|
|
1002
1002
|
elif len(_entryPoints) == 1 and "file" in _entryPoints[0]: # check if an archive and need to discover entry points (and not IXDS)
|
|
1003
1003
|
entryPath = PackageManager.mappedUrl(_entryPoints[0]["file"])
|
|
1004
1004
|
filesource = FileSource.openFileSource(entryPath, self, checkIfXmlIsEis=_checkIfXmlIsEis)
|
arelle/CntlrWebMain.py
CHANGED
|
@@ -19,7 +19,7 @@ from bottle import Bottle, HTTPResponse, request, response, static_file # type:
|
|
|
19
19
|
|
|
20
20
|
from arelle import Version
|
|
21
21
|
from arelle.CntlrCmdLine import CntlrCmdLine
|
|
22
|
-
from arelle.FileSource import FileNamedStringIO
|
|
22
|
+
from arelle.FileSource import FileNamedBytesIO, FileNamedStringIO
|
|
23
23
|
from arelle.logging.formatters.LogFormatter import LogFormatter
|
|
24
24
|
from arelle.logging.handlers.LogToBufferHandler import LogToBufferHandler
|
|
25
25
|
from arelle.PluginManager import pluginClassMethods
|
|
@@ -263,19 +263,16 @@ def validation(file: str | None = None) -> str | bytes:
|
|
|
263
263
|
isValidation = 'validation' == requestPathParts[-1] or 'validation' == requestPathParts[-2]
|
|
264
264
|
view = request.query.view
|
|
265
265
|
viewArcrole = request.query.viewArcrole
|
|
266
|
-
sourceZipStreamFileName = None
|
|
267
266
|
sourceZipStream = None
|
|
268
267
|
if request.method == 'POST':
|
|
269
268
|
mimeType = request.get_header("Content-Type")
|
|
270
269
|
if mimeType and mimeType.startswith("multipart/form-data"):
|
|
271
270
|
if upload := request.files.get("upload"):
|
|
272
|
-
|
|
273
|
-
sourceZipStream = upload.file
|
|
271
|
+
sourceZipStream = FileNamedBytesIO(upload.filename, upload.file.read())
|
|
274
272
|
else:
|
|
275
273
|
errors.append(_("POST 'multipart/form-data' request must include 'upload' part containing the XBRL file to process."))
|
|
276
274
|
elif mimeType in ('application/zip', 'application/x-zip', 'application/x-zip-compressed', 'multipart/x-zip'):
|
|
277
|
-
|
|
278
|
-
sourceZipStream = request.body
|
|
275
|
+
sourceZipStream = FileNamedBytesIO(request.get_header("X-File-Name"), request.body.read())
|
|
279
276
|
else:
|
|
280
277
|
errors.append(_("POST request must provide an XBRL zip file to process. Content-Type '{0}' not recognized as a zip file.").format(mimeType))
|
|
281
278
|
if not view and not viewArcrole:
|
|
@@ -349,14 +346,13 @@ def validation(file: str | None = None) -> str | bytes:
|
|
|
349
346
|
viewFile = FileNamedStringIO(media)
|
|
350
347
|
options.viewArcrole = viewArcrole
|
|
351
348
|
options.viewFile = viewFile
|
|
352
|
-
return runOptionsAndGetResult(options, media, viewFile, sourceZipStream
|
|
349
|
+
return runOptionsAndGetResult(options, media, viewFile, sourceZipStream)
|
|
353
350
|
|
|
354
351
|
def runOptionsAndGetResult(
|
|
355
352
|
options: RuntimeOptions,
|
|
356
353
|
media: str,
|
|
357
354
|
viewFile: FileNamedStringIO | None,
|
|
358
|
-
sourceZipStream:
|
|
359
|
-
sourceZipStreamFileName: str | None = None,
|
|
355
|
+
sourceZipStream: FileNamedBytesIO | None = None,
|
|
360
356
|
) -> str | bytes:
|
|
361
357
|
"""Execute request according to options, for result in media, with *post*ed file in sourceZipStream, if any.
|
|
362
358
|
|
|
@@ -381,7 +377,7 @@ def runOptionsAndGetResult(
|
|
|
381
377
|
else:
|
|
382
378
|
responseZipStream = None
|
|
383
379
|
cntlr = getCntlr()
|
|
384
|
-
successful = cntlr.run(options, sourceZipStream, responseZipStream
|
|
380
|
+
successful = cntlr.run(options, sourceZipStream, responseZipStream)
|
|
385
381
|
if media == "xml":
|
|
386
382
|
response.content_type = 'text/xml; charset=UTF-8'
|
|
387
383
|
elif media == "csv":
|
arelle/DisclosureSystem.py
CHANGED
|
@@ -438,7 +438,7 @@ class DisclosureSystem:
|
|
|
438
438
|
return href in self.standardTaxonomiesDict
|
|
439
439
|
return True # no standard taxonomies to test
|
|
440
440
|
|
|
441
|
-
def hrefValidForDisclosureSystem(self, href):
|
|
441
|
+
def hrefValidForDisclosureSystem(self, href) -> bool:
|
|
442
442
|
if self.validTaxonomiesUrl:
|
|
443
443
|
return href in self.validTaxonomiesDict
|
|
444
444
|
elif self.standardTaxonomiesUrl: # fallback to standard taxonomies dict
|
arelle/FileSource.py
CHANGED
|
@@ -13,7 +13,7 @@ import struct
|
|
|
13
13
|
import tarfile
|
|
14
14
|
import zipfile
|
|
15
15
|
import zlib
|
|
16
|
-
from typing import IO, TYPE_CHECKING, Any, Optional, TextIO, cast
|
|
16
|
+
from typing import IO, TYPE_CHECKING, Any, BinaryIO, Optional, TextIO, cast
|
|
17
17
|
|
|
18
18
|
import regex as re
|
|
19
19
|
from lxml import etree
|
|
@@ -44,15 +44,17 @@ TAXONOMY_PACKAGE_FILE_NAMES = ('.taxonomyPackage.xml', 'catalog.xml') # pre-PWD
|
|
|
44
44
|
def openFileSource(
|
|
45
45
|
filename: str | None,
|
|
46
46
|
cntlr: Cntlr | None = None,
|
|
47
|
-
sourceZipStream:
|
|
47
|
+
sourceZipStream: BinaryIO | FileNamedBytesIO | None = None,
|
|
48
48
|
checkIfXmlIsEis: bool = False,
|
|
49
49
|
reloadCache: bool = False,
|
|
50
50
|
base: str | None = None,
|
|
51
51
|
sourceFileSource: FileSource | None = None,
|
|
52
|
-
sourceZipStreamFileName: str | None = None,
|
|
53
52
|
) -> FileSource:
|
|
54
53
|
if sourceZipStream:
|
|
55
|
-
|
|
54
|
+
if isinstance(sourceZipStream, FileNamedBytesIO) and sourceZipStream.fileName:
|
|
55
|
+
sourceZipStreamFileName = os.sep + sourceZipStream.fileName
|
|
56
|
+
else:
|
|
57
|
+
sourceZipStreamFileName = os.sep + "POSTupload.zip"
|
|
56
58
|
filesource = FileSource(sourceZipStreamFileName, cntlr)
|
|
57
59
|
filesource.openZipStream(sourceZipStream)
|
|
58
60
|
if filename:
|
|
@@ -390,7 +392,7 @@ class FileSource:
|
|
|
390
392
|
assert self.taxonomyPackage is not None
|
|
391
393
|
self.mappedPaths = cast('dict[str, str]', self.taxonomyPackage.get("remappings"))
|
|
392
394
|
|
|
393
|
-
def openZipStream(self, sourceZipStream:
|
|
395
|
+
def openZipStream(self, sourceZipStream: BinaryIO) -> None:
|
|
394
396
|
if not self.isOpen:
|
|
395
397
|
assert isinstance(self.url, str)
|
|
396
398
|
self.basefile = self.url
|
|
@@ -655,6 +657,30 @@ class FileSource:
|
|
|
655
657
|
else:
|
|
656
658
|
return openXmlFileStream(self.cntlr, filepath, stripDeclaration)
|
|
657
659
|
|
|
660
|
+
def getBytesSize(self) -> int | None:
|
|
661
|
+
"""
|
|
662
|
+
Get the size of the zip file in bytes.
|
|
663
|
+
:return: Size of the zip file in bytes, or None if not applicable.
|
|
664
|
+
"""
|
|
665
|
+
if isinstance(self.basefile, str) and os.path.isfile(self.basefile):
|
|
666
|
+
return os.path.getsize(self.basefile)
|
|
667
|
+
# ZipFile.fp is a private field, but is currently the simplest way for us to
|
|
668
|
+
# access the internal stream
|
|
669
|
+
if isinstance(self.fs, zipfile.ZipFile) and (fp := getattr(self.fs, 'fp')) is not None:
|
|
670
|
+
stream = cast(IO[Any], fp)
|
|
671
|
+
stream.seek(0, 2) # Move to the end of the file
|
|
672
|
+
return stream.tell() # Report the current position, which is the size of the file
|
|
673
|
+
return None
|
|
674
|
+
|
|
675
|
+
def getBytesSizeEstimate(self) -> int | None:
|
|
676
|
+
"""
|
|
677
|
+
Get an estimated size of the zip file in bytes.
|
|
678
|
+
:return: Estimated size of the zip file in bytes, or None if not applicable.
|
|
679
|
+
"""
|
|
680
|
+
if not isinstance(self.fs, zipfile.ZipFile):
|
|
681
|
+
return None
|
|
682
|
+
return sum(zi.compress_size for zi in self.fs.infolist())
|
|
683
|
+
|
|
658
684
|
def exists(self, filepath: str) -> bool:
|
|
659
685
|
archiveFileSource = self.fileSourceContainingFilepath(filepath)
|
|
660
686
|
if archiveFileSource is not None:
|
arelle/XbrlConst.py
CHANGED
|
@@ -21,17 +21,22 @@ _tuple = tuple # type: ignore[type-arg]
|
|
|
21
21
|
|
|
22
22
|
xsd = "http://www.w3.org/2001/XMLSchema"
|
|
23
23
|
qnXsdComplexType = qname("{http://www.w3.org/2001/XMLSchema}xsd:complexType")
|
|
24
|
+
qnXsdDocumentation = qname("{http://www.w3.org/2001/XMLSchema}xsd:documentation")
|
|
25
|
+
qnXsdImport = qname("{http://www.w3.org/2001/XMLSchema}xsd:import")
|
|
24
26
|
qnXsdSchema = qname("{http://www.w3.org/2001/XMLSchema}xsd:schema")
|
|
25
27
|
qnXsdAppinfo = qname("{http://www.w3.org/2001/XMLSchema}xsd:appinfo")
|
|
26
28
|
qnXsdDefaultType = qname("{http://www.w3.org/2001/XMLSchema}xsd:anyType")
|
|
27
29
|
xsi = "http://www.w3.org/2001/XMLSchema-instance"
|
|
28
30
|
qnXsiNil = qname(xsi, "xsi:nil") # need default prefix in qname
|
|
31
|
+
qnXsiType = qname(xsi, "xsi:type")
|
|
32
|
+
qnXsiSchemaLocation = qname(xsi, "xsi:schemaLocation")
|
|
33
|
+
qnXsiNoNamespaceSchemaLocation = qname(xsi, "xsi:noNamespaceSchemaLocation")
|
|
29
34
|
qnXmlLang = qname("{http://www.w3.org/XML/1998/namespace}xml:lang")
|
|
30
35
|
builtinAttributes = {
|
|
31
36
|
qnXsiNil,
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
37
|
+
qnXsiType,
|
|
38
|
+
qnXsiSchemaLocation,
|
|
39
|
+
qnXsiNoNamespaceSchemaLocation,
|
|
35
40
|
}
|
|
36
41
|
xml = "http://www.w3.org/XML/1998/namespace"
|
|
37
42
|
xbrli = "http://www.xbrl.org/2003/instance"
|
arelle/_version.py
CHANGED
arelle/api/Session.py
CHANGED
|
@@ -12,6 +12,7 @@ from typing import Any, BinaryIO
|
|
|
12
12
|
|
|
13
13
|
from arelle import PackageManager, PluginManager
|
|
14
14
|
from arelle.CntlrCmdLine import CntlrCmdLine, createCntlrAndPreloadPlugins
|
|
15
|
+
from arelle.FileSource import FileNamedBytesIO
|
|
15
16
|
from arelle.ModelXbrl import ModelXbrl
|
|
16
17
|
from arelle.RuntimeOptions import RuntimeOptions
|
|
17
18
|
|
|
@@ -102,11 +103,10 @@ class Session:
|
|
|
102
103
|
def run(
|
|
103
104
|
self,
|
|
104
105
|
options: RuntimeOptions,
|
|
105
|
-
sourceZipStream: BinaryIO | None = None,
|
|
106
|
+
sourceZipStream: BinaryIO | FileNamedBytesIO | None = None,
|
|
106
107
|
responseZipStream: BinaryIO | None = None,
|
|
107
108
|
logHandler: logging.Handler | None = None,
|
|
108
109
|
logFilters: list[logging.Filter] | None = None,
|
|
109
|
-
sourceZipStreamFileName: str | None = None,
|
|
110
110
|
) -> bool:
|
|
111
111
|
"""
|
|
112
112
|
Perform a run using the given options.
|
|
@@ -114,13 +114,10 @@ class Session:
|
|
|
114
114
|
:param sourceZipStream: Optional stream to read source data from.
|
|
115
115
|
:param responseZipStream: Options stream to write response data to.
|
|
116
116
|
:param logHandler: Optional log handler to use for logging.
|
|
117
|
-
:param sourceZipStreamFileName: Optional file name to use for the passed zip stream.
|
|
118
117
|
:return: True if the run was successful, False otherwise.
|
|
119
118
|
"""
|
|
120
119
|
with _session_lock:
|
|
121
120
|
self._check_thread()
|
|
122
|
-
if sourceZipStreamFileName is not None and sourceZipStream is None:
|
|
123
|
-
raise ValueError("sourceZipStreamFileName may only be provided if sourceZipStream is not None.")
|
|
124
121
|
PackageManager.reset()
|
|
125
122
|
PluginManager.reset()
|
|
126
123
|
if self._cntlr is None:
|
|
@@ -174,5 +171,4 @@ class Session:
|
|
|
174
171
|
options,
|
|
175
172
|
sourceZipStream=sourceZipStream,
|
|
176
173
|
responseZipStream=responseZipStream,
|
|
177
|
-
sourceZipStreamFileName=sourceZipStreamFileName,
|
|
178
174
|
)
|
arelle/oim/Load.py
CHANGED
|
@@ -1532,7 +1532,7 @@ def _loadFromOIM(cntlr, error, warning, modelXbrl, oimFile, mappedUri):
|
|
|
1532
1532
|
hasRowError = True
|
|
1533
1533
|
elif propGrpColValue in propGrpObjects:
|
|
1534
1534
|
rowPropGroups[propGrpName] = propGrpObjects[propGrpColValue]
|
|
1535
|
-
|
|
1535
|
+
elif propGrpColValue is not EMPTY_CELL:
|
|
1536
1536
|
error("xbrlce:unknownPropertyGroup",
|
|
1537
1537
|
_("Table %(table)s unknown property group row %(row)s column %(column)s group %(propertyGroup)s, url: %(url)s"),
|
|
1538
1538
|
table=tableId, row=rowIndex+1, column=rowIdColName, url=tableUrl, propertyGroup=propGrpName)
|
|
@@ -1573,12 +1573,11 @@ def _loadFromOIM(cntlr, error, warning, modelXbrl, oimFile, mappedUri):
|
|
|
1573
1573
|
if _isParamRef(val):
|
|
1574
1574
|
rowPropGrpParamRefs.add(_getParamRefName(val))
|
|
1575
1575
|
if factDimensions[colName] is None:
|
|
1576
|
-
|
|
1577
|
-
|
|
1578
|
-
|
|
1579
|
-
|
|
1580
|
-
|
|
1581
|
-
emptyCols.add(colName)
|
|
1576
|
+
value = _cellValue(row[colNameIndex[colName]])
|
|
1577
|
+
if value is EMPTY_CELL or value is NONE_CELL:
|
|
1578
|
+
emptyCols.add(colName)
|
|
1579
|
+
elif colName in paramRefColNames:
|
|
1580
|
+
paramColsWithValue.add(colName)
|
|
1582
1581
|
if not cellPropGroup:
|
|
1583
1582
|
continue # not a fact column
|
|
1584
1583
|
for rowPropGrpParamRef in rowPropGrpParamRefs:
|
|
@@ -14,12 +14,21 @@ from lxml import etree
|
|
|
14
14
|
from lxml.etree import _Element
|
|
15
15
|
|
|
16
16
|
from arelle.FileSource import FileSource
|
|
17
|
+
from arelle.ModelXbrl import ModelXbrl
|
|
17
18
|
from arelle.Version import authorLabel, copyrightLabel
|
|
18
19
|
from .ValidationPluginExtension import ValidationPluginExtension
|
|
19
|
-
from .rules import upload
|
|
20
|
+
from .rules import edinet, frta, gfm, upload
|
|
20
21
|
|
|
21
22
|
PLUGIN_NAME = "Validate EDINET"
|
|
22
23
|
DISCLOSURE_SYSTEM_VALIDATION_TYPE = "EDINET"
|
|
24
|
+
RELEVELER_MAP: dict[str, dict[str, tuple[str, str | None]]] = {
|
|
25
|
+
"ERROR": {
|
|
26
|
+
# Silence, duplicated by EDINET.EC5002E
|
|
27
|
+
"xbrl.4.8.2:sharesFactUnit-notSharesMeasure": ("ERROR", None),
|
|
28
|
+
# Silence, duplicated by EDINET.EC5002E
|
|
29
|
+
"xbrl.4.8.2:sharesFactUnit-notSingleMeasure": ("ERROR", None),
|
|
30
|
+
},
|
|
31
|
+
}
|
|
23
32
|
|
|
24
33
|
|
|
25
34
|
validationPlugin = ValidationPluginExtension(
|
|
@@ -27,6 +36,9 @@ validationPlugin = ValidationPluginExtension(
|
|
|
27
36
|
disclosureSystemConfigUrl=Path(__file__).parent / "resources" / "config.xml",
|
|
28
37
|
validationTypes=[DISCLOSURE_SYSTEM_VALIDATION_TYPE],
|
|
29
38
|
validationRuleModules=[
|
|
39
|
+
edinet,
|
|
40
|
+
frta,
|
|
41
|
+
gfm,
|
|
30
42
|
upload,
|
|
31
43
|
],
|
|
32
44
|
)
|
|
@@ -90,6 +102,12 @@ def fileSourceEntrypointFiles(filesource: FileSource, inlineOnly: bool, *args: A
|
|
|
90
102
|
return entrypointFiles
|
|
91
103
|
|
|
92
104
|
|
|
105
|
+
def loggingSeverityReleveler(modelXbrl: ModelXbrl, level: str, messageCode: str, args: Any, **kwargs: Any) -> tuple[str | None, str | None]:
|
|
106
|
+
if level in RELEVELER_MAP:
|
|
107
|
+
return RELEVELER_MAP[level].get(messageCode, (level, messageCode))
|
|
108
|
+
return level, messageCode
|
|
109
|
+
|
|
110
|
+
|
|
93
111
|
def modelXbrlLoadComplete(*args: Any, **kwargs: Any) -> None:
|
|
94
112
|
return validationPlugin.modelXbrlLoadComplete(*args, **kwargs)
|
|
95
113
|
|
|
@@ -113,6 +131,7 @@ __pluginInfo__ = {
|
|
|
113
131
|
"DisclosureSystem.Types": disclosureSystemTypes,
|
|
114
132
|
"DisclosureSystem.ConfigURL": disclosureSystemConfigURL,
|
|
115
133
|
"FileSource.EntrypointFiles": fileSourceEntrypointFiles,
|
|
134
|
+
"Logging.Severity.Releveler": loggingSeverityReleveler,
|
|
116
135
|
"ModelXbrl.LoadComplete": modelXbrlLoadComplete,
|
|
117
136
|
"Validate.XBRL.Finally": validateXbrlFinally,
|
|
118
137
|
"ValidateFormula.Finished": validateFinally,
|
|
@@ -6,7 +6,9 @@
|
|
|
6
6
|
<DisclosureSystem
|
|
7
7
|
names="EDINET|edinet"
|
|
8
8
|
description="Checks for EDINET."
|
|
9
|
+
blockDisallowedReferences="true"
|
|
9
10
|
validationType="EDINET"
|
|
11
|
+
validTaxonomiesUrl="edinet-taxonomies.xml"
|
|
10
12
|
exclusiveTypesPattern="EFM|GFM|FERC|HMRC|SBR.NL|EBA|EIOPA|ESEF"
|
|
11
13
|
/>
|
|
12
14
|
</DisclosureSystems>
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
<?xml version='1.0' encoding='utf-8'?>
|
|
2
|
+
<Erxl version="1">
|
|
3
|
+
<Loc><Family>BASE</Family><Version>2008</Version><Href>http://www.xbrl.org/2008/generic-label.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>http://xbrl.org/2008/label</Namespace><Prefix>label</Prefix></Loc>
|
|
4
|
+
<Loc><Family>BASE</Family><Version>2008</Version><Href>http://www.xbrl.org/2008/generic-link.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>http://xbrl.org/2008/generic</Namespace><Prefix>gen</Prefix></Loc>
|
|
5
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/2003/instance</Namespace><Prefix>xbrli</Prefix></Loc>
|
|
6
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/2003/linkbase</Namespace><Prefix>link</Prefix></Loc>
|
|
7
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/2003/xl-2003-12-31.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/2003/XLink</Namespace><Prefix>xl</Prefix></Loc>
|
|
8
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/2003/xlink-2003-12-31.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>http://www.w3.org/1999/xlink</Namespace><Prefix>xlink</Prefix></Loc>
|
|
9
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/2004/ref-2004-08-10.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/2004/ref</Namespace><Prefix>ref</Prefix></Loc>
|
|
10
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/2005/xbrldt-2005.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>1</Elements> <Namespace>http://xbrl.org/2005/xbrldt</Namespace><Prefix>xbrldt</Prefix></Loc>
|
|
11
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/2006/ref-2006-02-27.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/2006/ref</Namespace><Prefix>ref</Prefix></Loc>
|
|
12
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/2006/xbrldi-2006.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>1</Elements> <Namespace>http://xbrl.org/2006/xbrldi</Namespace><Prefix>xbrldi</Prefix></Loc>
|
|
13
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/dtr/type/nonNumeric-2009-12-16.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/dtr/type/non-numeric</Namespace><Prefix>nonnum</Prefix></Loc>
|
|
14
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/dtr/type/numeric-2009-12-16.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/dtr/type/numeric</Namespace><Prefix>num</Prefix></Loc>
|
|
15
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/lrr/arcrole/deprecated-2009-12-16.xsd</Href><AttType>SCH</AttType><FileTypeName>Roles/Arcroles</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/2009/arcrole/deprecated</Namespace></Loc>
|
|
16
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/lrr/arcrole/factExplanatory-2009-12-16.xsd</Href><AttType>SCH</AttType><FileTypeName>Roles/Arcroles</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/2009/arcrole/fact-explanatoryFact</Namespace></Loc>
|
|
17
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/lrr/role/deprecated-2009-12-16.xsd</Href><AttType>SCH</AttType><FileTypeName>Roles/Arcroles</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/2009/role/deprecated</Namespace></Loc>
|
|
18
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/lrr/role/negated-2009-12-16.xsd</Href><AttType>SCH</AttType><FileTypeName>Roles/Arcroles</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/2009/role/negated</Namespace></Loc>
|
|
19
|
+
<Loc><Family>BASE</Family><Version>2010</Version><Href>http://www.xbrl.org/lrr/role/net-2009-12-16.xsd</Href><AttType>SCH</AttType><FileTypeName>Roles/Arcroles</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/2009/role/net</Namespace></Loc>
|
|
20
|
+
<Loc><Family>BASE</Family><Version>2014</Version><Href>http://www.xbrl.org/2014/extensible-enumerations.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>http://xbrl.org/2014/extensible-enumerations</Namespace><Prefix>enum</Prefix></Loc>
|
|
21
|
+
<Loc><Family>BASE</Family><Version>2020</Version><Href>http://www.xbrl.org/dtr/type/2020-01-21/types.xsd</Href><AttType>SCH</AttType><FileTypeName>Roles/Arcroles</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/dtr/type/2020-01-21</Namespace></Loc>
|
|
22
|
+
<Loc><Family>BASE</Family><Version>2022</Version><Href>http://www.xbrl.org/dtr/type/2022-03-31/types.xsd</Href><AttType>SCH</AttType><FileTypeName>Roles/Arcroles</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/dtr/type/2022-03-31</Namespace></Loc>
|
|
23
|
+
<Loc><Family>BASE</Family><Version>2023</Version><Href>http://www.xbrl.org/2023/calculation-1.1.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>https://xbrl.org/2023/calculation-1.1</Namespace></Loc>
|
|
24
|
+
<Loc><Family>BASE</Family><Version>2024</Version><Href>http://www.xbrl.org/dtr/type/2024-01-31/types.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>0</Elements> <Namespace>http://www.xbrl.org/dtr/type/2024-01-31</Namespace></Loc>
|
|
25
|
+
<Loc><Family>FSA</Family><Version>2013</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/common/2013-08-31/identificationAndOrdering_2013-08-31.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>1</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/common/2013-08-31/iod</Namespace><Prefix>common</Prefix></Loc>
|
|
26
|
+
<Loc><Family>FSA</Family><Version>2013</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpdei/2013-08-31/jpdei_cor_2013-08-31.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>1</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jpdei/2013-08-31/jpdei_cor</Namespace><Prefix>jpdei</Prefix></Loc>
|
|
27
|
+
<Loc><Family>FSA</Family><Version>2013</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpdei/2013-08-31/jpdei_rt_2013-08-31.xsd</Href><AttType>SCH</AttType><FileTypeName>Entry Point</FileTypeName><Elements>0</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jpdei/2013-08-31/jpdei_rt</Namespace><Prefix>jpdei</Prefix></Loc>
|
|
28
|
+
<Loc><Family>FSA</Family><Version>2013</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpdei/2013-08-31/label/jpdei_2013-08-31_gla.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
29
|
+
<Loc><Family>FSA</Family><Version>2013</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpdei/2013-08-31/label/jpdei_2024-11-01_lab-en.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
30
|
+
<Loc><Family>FSA</Family><Version>2013</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpdei/2013-08-31/label/jpdei_2024-11-01_lab.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
31
|
+
<Loc><Family>FSA</Family><Version>2013</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpdei/2013-08-31/r/jpdei_000100-000_2013-08-31_def.xml</Href><AttType>DEF</AttType><FileTypeName>Definition, Dimensions</FileTypeName><Elements>0</Elements></Loc>
|
|
32
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp-esr/2024-11-01/jpcrp-esr_cor_2024-11-01.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>1</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp-esr/2024-11-01/jpcrp-esr_cor</Namespace><Prefix>jpcrp-esr</Prefix></Loc>
|
|
33
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp-esr/2024-11-01/jpcrp-esr_rt_2024-11-01.xsd</Href><AttType>SCH</AttType><FileTypeName>Entry Point</FileTypeName><Elements>0</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp-esr/2024-11-01/jpcrp-esr_rt</Namespace><Prefix>jpcrp-esr</Prefix></Loc>
|
|
34
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp-esr/2024-11-01/label/jpcrp-esr_2024-11-01_gla.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
35
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp-esr/2024-11-01/label/jpcrp-esr_2024-11-01_lab-en.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
36
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp-esr/2024-11-01/label/jpcrp-esr_2024-11-01_lab.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
37
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp/2024-11-01/jpcrp_cor_2024-11-01.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>1</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp/2024-11-01/jpcrp_cor</Namespace><Prefix>jpcrp</Prefix></Loc>
|
|
38
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp/2024-11-01/jpcrp_rt_2024-11-01.xsd</Href><AttType>SCH</AttType><FileTypeName>Entry Point</FileTypeName><Elements>0</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp/2024-11-01/jpcrp_rt</Namespace><Prefix>jpcrp</Prefix></Loc>
|
|
39
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp/2024-11-01/label/jpcrp_2024-11-01_gla.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
40
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp/2024-11-01/label/jpcrp_2024-11-01_lab-en.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
41
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpcrp/2024-11-01/label/jpcrp_2024-11-01_lab.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
42
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpigp/2024-11-01/jpigp_cor_2024-11-01.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>1</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jpigp/2024-11-01/jpigp_cor</Namespace><Prefix>jpigp</Prefix></Loc>
|
|
43
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpigp/2024-11-01/jpigp_rt_2024-11-01.xsd</Href><AttType>SCH</AttType><FileTypeName>Entry Point</FileTypeName><Elements>0</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jpigp/2024-11-01/jpigp_rt</Namespace><Prefix>jpigp</Prefix></Loc>
|
|
44
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpigp/2024-11-01/label/jpigp_2024-11-01_gla.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
45
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpigp/2024-11-01/label/jpigp_2024-11-01_lab-en.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
46
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpigp/2024-11-01/label/jpigp_2024-11-01_lab.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
47
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2024-11-01/jppfs_cor_2024-11-01.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>1</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2024-11-01/jppfs_cor</Namespace><Prefix>jppfs</Prefix></Loc>
|
|
48
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2024-11-01/jppfs_pe_2012.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>1</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2012/jppfs_pe</Namespace><Prefix>jppfs</Prefix></Loc>
|
|
49
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2024-11-01/jppfs_rt_2024-11-01.xsd</Href><AttType>SCH</AttType><FileTypeName>Entry Point</FileTypeName><Elements>0</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2024-11-01/jppfs_rt</Namespace><Prefix>jppfs</Prefix></Loc>
|
|
50
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2024-11-01/label/jppfs_2024-11-01_gla.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
51
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2024-11-01/label/jppfs_2024-11-01_lab-en.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
52
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jppfs/2024-11-01/label/jppfs_2024-11-01_lab.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
53
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpsps/2024-11-01/jpsps_cor_2024-11-01.xsd</Href><AttType>SCH</AttType><FileTypeName>Schema</FileTypeName><Elements>1</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jpsps/2024-11-01/jpsps_cor</Namespace><Prefix>jppfs</Prefix></Loc>
|
|
54
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpsps/2024-11-01/jpsps_rt_2024-11-01.xsd</Href><AttType>SCH</AttType><FileTypeName>Entry Point</FileTypeName><Elements>0</Elements> <Namespace>http://disclosure.edinet-fsa.go.jp/taxonomy/jpsps/2024-11-01/jpsps_rt</Namespace><Prefix>jpsps</Prefix></Loc>
|
|
55
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpsps/2024-11-01/label/jpsps_2024-11-01_gla.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
56
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpsps/2024-11-01/label/jpsps_2024-11-01_lab-en.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
57
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpsps/2024-11-01/label/jpsps_2024-11-01_lab.xml</Href><AttType>LAB</AttType><FileTypeName>Labels</FileTypeName><Elements>0</Elements></Loc>
|
|
58
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpsps/2024-11-01/r/jpsps-dei_000100-000_2024-11-01_def.xml</Href><AttType>DEF</AttType><FileTypeName>Definition, Dimensions</FileTypeName><Elements>0</Elements></Loc>
|
|
59
|
+
<Loc><Family>FSA</Family><Version>2024</Version><Href>http://disclosure.edinet-fsa.go.jp/taxonomy/jpsps/2024-11-01/r/jpsps-dei_000200-000_2024-11-01_def.xml</Href><AttType>DEF</AttType><FileTypeName>Definition, Dimensions</FileTypeName><Elements>0</Elements></Loc>
|
|
60
|
+
</Erxl>
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"""
|
|
2
|
+
See COPYRIGHT.md for copyright information.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from collections.abc import Iterable
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from arelle import XbrlConst
|
|
10
|
+
from arelle.ValidateXbrl import ValidateXbrl
|
|
11
|
+
from arelle.typing import TypeGetText
|
|
12
|
+
from arelle.utils.PluginHooks import ValidationHook
|
|
13
|
+
from arelle.utils.validate.Decorator import validation
|
|
14
|
+
from arelle.utils.validate.Validation import Validation
|
|
15
|
+
from ..DisclosureSystems import (DISCLOSURE_SYSTEM_EDINET)
|
|
16
|
+
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
17
|
+
|
|
18
|
+
_: TypeGetText
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@validation(
|
|
22
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
23
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
24
|
+
)
|
|
25
|
+
def rule_EC5002E(
|
|
26
|
+
pluginData: PluginValidationDataExtension,
|
|
27
|
+
val: ValidateXbrl,
|
|
28
|
+
*args: Any,
|
|
29
|
+
**kwargs: Any,
|
|
30
|
+
) -> Iterable[Validation]:
|
|
31
|
+
"""
|
|
32
|
+
EDINET.EC5002E: A unit other than number of shares (xbrli:shares) has been set for the
|
|
33
|
+
Number of Shares (xbrli:sharesItemType) item '{xxx}yyy'.
|
|
34
|
+
Please check the units and enter the correct information.
|
|
35
|
+
|
|
36
|
+
Similar to "xbrl.4.8.2:sharesFactUnit-notSharesMeasure" and "xbrl.4.8.2:sharesFactUnit-notSingleMeasure"
|
|
37
|
+
TODO: Consolidate this rule with the above two rules if possible.
|
|
38
|
+
"""
|
|
39
|
+
errorFacts = []
|
|
40
|
+
for fact in val.modelXbrl.facts:
|
|
41
|
+
concept = fact.concept
|
|
42
|
+
if not concept.isShares:
|
|
43
|
+
continue
|
|
44
|
+
unit = fact.unit
|
|
45
|
+
measures = unit.measures
|
|
46
|
+
if (
|
|
47
|
+
not measures or
|
|
48
|
+
len(measures[0]) != 1 or
|
|
49
|
+
len(measures[1]) != 0 or
|
|
50
|
+
measures[0][0] != XbrlConst.qnXbrliShares
|
|
51
|
+
):
|
|
52
|
+
errorFacts.append(fact)
|
|
53
|
+
for fact in errorFacts:
|
|
54
|
+
yield Validation.error(
|
|
55
|
+
codes='EDINET.EC5002E',
|
|
56
|
+
msg=_("A unit other than number of shares (xbrli:shares) has been set for "
|
|
57
|
+
"the Number of Shares (xbrli:sharesItemType) item '%(qname)s'. "
|
|
58
|
+
"Please check the units and enter the correct information."),
|
|
59
|
+
qname=fact.qname.clarkNotation,
|
|
60
|
+
modelObject=fact,
|
|
61
|
+
)
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"""
|
|
2
|
+
See COPYRIGHT.md for copyright information.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from collections.abc import Iterable
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from arelle import XbrlConst
|
|
10
|
+
from arelle.ValidateXbrl import ValidateXbrl
|
|
11
|
+
from arelle.typing import TypeGetText
|
|
12
|
+
from arelle.utils.PluginHooks import ValidationHook
|
|
13
|
+
from arelle.utils.validate.Decorator import validation
|
|
14
|
+
from arelle.utils.validate.Validation import Validation
|
|
15
|
+
from ..DisclosureSystems import (DISCLOSURE_SYSTEM_EDINET)
|
|
16
|
+
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
17
|
+
|
|
18
|
+
_: TypeGetText
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
@validation(
|
|
22
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
23
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
24
|
+
)
|
|
25
|
+
def rule_frta_2_1_9(
|
|
26
|
+
pluginData: PluginValidationDataExtension,
|
|
27
|
+
val: ValidateXbrl,
|
|
28
|
+
*args: Any,
|
|
29
|
+
**kwargs: Any,
|
|
30
|
+
) -> Iterable[Validation]:
|
|
31
|
+
"""
|
|
32
|
+
EDINET.EC5710W: [FRTA.2.1.9] All documentation of a concept must be contained
|
|
33
|
+
in XBRL linkbases. Do not use the xsd:documentation element in an element definition.
|
|
34
|
+
"""
|
|
35
|
+
errors = []
|
|
36
|
+
for modelDocument in val.modelXbrl.urlDocs.values():
|
|
37
|
+
if pluginData.isStandardTaxonomyUrl(modelDocument.uri, val.modelXbrl):
|
|
38
|
+
continue
|
|
39
|
+
rootElt = modelDocument.xmlRootElement
|
|
40
|
+
for elt in rootElt.iterdescendants(XbrlConst.qnXsdDocumentation.clarkNotation):
|
|
41
|
+
errors.append(elt)
|
|
42
|
+
if len(errors) > 0:
|
|
43
|
+
yield Validation.error(
|
|
44
|
+
codes='EDINET.EC5710W.FRTA.2.1.9',
|
|
45
|
+
msg=_("All documentation of a concept must be contained in XBRL linkbases. "
|
|
46
|
+
"Taxonomy element declarations should not use the XML Schema documentation element."),
|
|
47
|
+
modelObject=errors,
|
|
48
|
+
)
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"""
|
|
2
|
+
See COPYRIGHT.md for copyright information.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from collections.abc import Iterable
|
|
7
|
+
from typing import Any
|
|
8
|
+
|
|
9
|
+
from arelle import XbrlConst, XmlUtil
|
|
10
|
+
from arelle.UrlUtil import isHttpUrl, splitDecodeFragment
|
|
11
|
+
from arelle.ValidateXbrl import ValidateXbrl
|
|
12
|
+
from arelle.typing import TypeGetText
|
|
13
|
+
from arelle.utils.PluginHooks import ValidationHook
|
|
14
|
+
from arelle.utils.validate.Decorator import validation
|
|
15
|
+
from arelle.utils.validate.Validation import Validation
|
|
16
|
+
from ..DisclosureSystems import (DISCLOSURE_SYSTEM_EDINET)
|
|
17
|
+
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
18
|
+
|
|
19
|
+
_: TypeGetText
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
@validation(
|
|
23
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
24
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
25
|
+
)
|
|
26
|
+
def rule_gfm_1_1_3(
|
|
27
|
+
pluginData: PluginValidationDataExtension,
|
|
28
|
+
val: ValidateXbrl,
|
|
29
|
+
*args: Any,
|
|
30
|
+
**kwargs: Any,
|
|
31
|
+
) -> Iterable[Validation]:
|
|
32
|
+
"""
|
|
33
|
+
EDINET.EC5700W: [GFM 1.1.3] The URI content of the xlink:href attribute,
|
|
34
|
+
the xsi:schemaLocation attribute and the schemaLocation attribute must
|
|
35
|
+
be relative and contain no forward slashes, or a recognized external
|
|
36
|
+
location of a standard taxonomy schema file, or a "#" followed by a
|
|
37
|
+
shorthand xpointer.
|
|
38
|
+
"""
|
|
39
|
+
values = []
|
|
40
|
+
for modelDocument in val.modelXbrl.urlDocs.values():
|
|
41
|
+
if pluginData.isStandardTaxonomyUrl(modelDocument.uri, val.modelXbrl):
|
|
42
|
+
continue
|
|
43
|
+
rootElt = modelDocument.xmlRootElement
|
|
44
|
+
for elt in rootElt.iterdescendants(XbrlConst.qnLinkLoc.clarkNotation):
|
|
45
|
+
uri = elt.attrib.get(XbrlConst.qnXlinkHref.clarkNotation)
|
|
46
|
+
values.append((modelDocument, elt, uri))
|
|
47
|
+
for elt in rootElt.iterdescendants(XbrlConst.qnXsdImport.clarkNotation):
|
|
48
|
+
uri = elt.attrib.get('schemaLocation')
|
|
49
|
+
values.append((modelDocument, elt, uri))
|
|
50
|
+
for elt in rootElt.iterdescendants(XbrlConst.qnLinkLinkbase.clarkNotation):
|
|
51
|
+
uri = elt.attrib.get(XbrlConst.qnXsiSchemaLocation.clarkNotation)
|
|
52
|
+
values.append((modelDocument, elt, uri))
|
|
53
|
+
for modelDocument, elt, uri in values:
|
|
54
|
+
if uri is None:
|
|
55
|
+
continue
|
|
56
|
+
if not isHttpUrl(uri):
|
|
57
|
+
if '/' not in uri:
|
|
58
|
+
continue # Valid relative path
|
|
59
|
+
if pluginData.isStandardTaxonomyUrl(uri, val.modelXbrl):
|
|
60
|
+
continue # Valid external URL
|
|
61
|
+
splitUri, hrefId = splitDecodeFragment(uri)
|
|
62
|
+
if pluginData.isStandardTaxonomyUrl(splitUri, val.modelXbrl):
|
|
63
|
+
if hrefId is None or len(hrefId) == 0:
|
|
64
|
+
continue # Valid external URL
|
|
65
|
+
if not any(scheme == "element" for scheme, __ in XmlUtil.xpointerSchemes(hrefId)):
|
|
66
|
+
continue # Valid shorthand xpointer
|
|
67
|
+
yield Validation.error(
|
|
68
|
+
codes='EDINET.EC5700W.GFM.1.1.3',
|
|
69
|
+
msg=_("The URI content of the xlink:href attribute, the xsi:schemaLocation "
|
|
70
|
+
"attribute and the schemaLocation attribute must be relative and "
|
|
71
|
+
"contain no forward slashes, or a recognized external location of "
|
|
72
|
+
"a standard taxonomy schema file, or a '#' followed by a shorthand "
|
|
73
|
+
"xpointer. The URI '%(uri)s' is not valid."),
|
|
74
|
+
uri=uri,
|
|
75
|
+
modelObject=elt,
|
|
76
|
+
)
|
|
@@ -238,11 +238,10 @@ def rule_EC0183E(
|
|
|
238
238
|
"""
|
|
239
239
|
if not pluginData.shouldValidateUpload(val):
|
|
240
240
|
return
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
size
|
|
245
|
-
if size > 55 * 1000 * 1000: # Interpretting MB as megabytes (1,000,000 bytes)
|
|
241
|
+
size = val.modelXbrl.fileSource.getBytesSize()
|
|
242
|
+
if size is None:
|
|
243
|
+
return # File size is not available, cannot validate
|
|
244
|
+
if size > 55_000_000: # Interpretting MB as megabytes (1,000,000 bytes)
|
|
246
245
|
yield Validation.error(
|
|
247
246
|
codes='EDINET.EC0183E',
|
|
248
247
|
msg=_("The compressed file size exceeds 55MB. "
|
|
@@ -88,12 +88,25 @@ def validateXbrlFinally(val: ValidateXbrl, *args: Any, **kwargs: Any) -> None:
|
|
|
88
88
|
if reportPackageMaxMB is not None and modelXbrl.fileSource.fs: # must be a zip to be a report package
|
|
89
89
|
assert isinstance(modelXbrl.fileSource.fs, zipfile.ZipFile)
|
|
90
90
|
maxMB = float(reportPackageMaxMB)
|
|
91
|
+
_size: int | None = None
|
|
92
|
+
_sizeExact = True
|
|
91
93
|
if val.authParam["reportPackageMeasurement"] == "unzipped":
|
|
92
94
|
_size = sum(zi.file_size for zi in modelXbrl.fileSource.fs.infolist())
|
|
95
|
+
_sizeExact = False
|
|
93
96
|
else:
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
+
try:
|
|
98
|
+
_size = modelXbrl.fileSource.getBytesSize()
|
|
99
|
+
except Exception:
|
|
100
|
+
pass
|
|
101
|
+
if _size is None:
|
|
102
|
+
_size = modelXbrl.fileSource.getBytesSizeEstimate()
|
|
103
|
+
_sizeExact = False
|
|
104
|
+
modelXbrl.info("arelle.ESEF.reportPackageSize",
|
|
105
|
+
_("The %(estimated)s report package %(reportPackageMeasurement)s size is %(size)s bytes."),
|
|
106
|
+
estimated=_("exact") if _sizeExact else _("estimated"),
|
|
107
|
+
reportPackageMeasurement=_(val.authParam["reportPackageMeasurement"]) or _("zipped"),
|
|
108
|
+
size=_size)
|
|
109
|
+
if _size is not None and _size > maxMB * 1048576:
|
|
97
110
|
modelXbrl.error("arelle.ESEF.maximumReportPackageSize",
|
|
98
111
|
_("The authority %(authority)s requires a report package size under %(maxSize)s MB, size is %(size)s."),
|
|
99
112
|
modelObject=modelXbrl, authority=val.authority, maxSize=reportPackageMaxMB, size=_size)
|
|
@@ -93,12 +93,25 @@ def validateXbrlFinally(val: ValidateXbrl, *args: Any, **kwargs: Any) -> None:
|
|
|
93
93
|
assert isinstance(modelXbrl.fileSource.fs, zipfile.ZipFile)
|
|
94
94
|
|
|
95
95
|
maxMB = float(reportPackageMaxMB)
|
|
96
|
+
_size: int | None = None
|
|
97
|
+
_sizeExact = True
|
|
96
98
|
if val.authParam["reportPackageMeasurement"] == "unzipped":
|
|
97
99
|
_size = sum(zi.file_size for zi in modelXbrl.fileSource.fs.infolist())
|
|
100
|
+
_sizeExact = False
|
|
98
101
|
else:
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
+
try:
|
|
103
|
+
_size = modelXbrl.fileSource.getBytesSize()
|
|
104
|
+
except Exception:
|
|
105
|
+
pass
|
|
106
|
+
if _size is None:
|
|
107
|
+
_size = modelXbrl.fileSource.getBytesSizeEstimate()
|
|
108
|
+
_sizeExact = False
|
|
109
|
+
modelXbrl.info("arelle.ESEF.reportPackageSize",
|
|
110
|
+
_("The %(estimated)s report package %(reportPackageMeasurement)s size is %(size)s bytes."),
|
|
111
|
+
estimated=_("exact") if _sizeExact else _("estimated"),
|
|
112
|
+
reportPackageMeasurement=_(val.authParam["reportPackageMeasurement"]) or _("zipped"),
|
|
113
|
+
size=_size)
|
|
114
|
+
if _size is not None and _size > maxMB * 1048576:
|
|
102
115
|
modelXbrl.error("arelle.ESEF.maximumReportPackageSize",
|
|
103
116
|
_("The authority %(authority)s requires a report package size under %(maxSize)s MB, size is %(size)s."),
|
|
104
117
|
modelObject=modelXbrl, authority=val.authority, maxSize=reportPackageMaxMB, size=_size)
|
|
@@ -1096,6 +1109,21 @@ def validateXbrlFinally(val: ValidateXbrl, *args: Any, **kwargs: Any) -> None:
|
|
|
1096
1109
|
_("Extension elements must not duplicate the existing elements from the core taxonomy and be identifiable %(qname)s."),
|
|
1097
1110
|
modelObject=(c,_i), qname=c.qname)
|
|
1098
1111
|
|
|
1112
|
+
extensionTaxonomyDirectoryPrefix = val.authParam["reportPackageExtensionTaxonomyDirectoryPrefix"]
|
|
1113
|
+
if extensionTaxonomyDirectoryPrefix is not None and val.modelXbrl.fileSource.dir is not None:
|
|
1114
|
+
for filepath in val.modelXbrl.fileSource.dir:
|
|
1115
|
+
filepath_parts = filepath.split('/')
|
|
1116
|
+
if filepath_parts[1] in ['META-INF', 'reports']:
|
|
1117
|
+
continue
|
|
1118
|
+
if not filepath_parts[1].startswith(extensionTaxonomyDirectoryPrefix):
|
|
1119
|
+
modelXbrl.error(
|
|
1120
|
+
'arelle.ESEF.reportPackageExtensionTaxonomyDirectoryPrefix',
|
|
1121
|
+
_('The XBRL linkbase files must live within the report package under a directory that starts '
|
|
1122
|
+
'with `{}`').format(extensionTaxonomyDirectoryPrefix),
|
|
1123
|
+
modelObject=val.modelXbrl
|
|
1124
|
+
)
|
|
1125
|
+
break
|
|
1126
|
+
|
|
1099
1127
|
modelXbrl.profileActivity(_statusMsg, minTimeToShow=0.0)
|
|
1100
1128
|
modelXbrl.modelManager.showStatus(None)
|
|
1101
1129
|
|
|
@@ -42,6 +42,7 @@
|
|
|
42
42
|
],
|
|
43
43
|
"comment": "default parameters where not specified by authority",
|
|
44
44
|
"reportPackageMaxMB": null,
|
|
45
|
+
"reportPackageExtensionTaxonomyDirectoryPrefix": null,
|
|
45
46
|
"identiferScheme": "http://standards.iso.org/iso/17442",
|
|
46
47
|
"ixTargetUsage": "warning",
|
|
47
48
|
"extensionAbstractContexts": "warning",
|
|
@@ -171,6 +172,7 @@
|
|
|
171
172
|
},
|
|
172
173
|
"DBA": {
|
|
173
174
|
"name": "Danish Business Authority",
|
|
175
|
+
"reportPackageExtensionTaxonomyDirectoryPrefix": "xbrl.",
|
|
174
176
|
"reportPackageMaxMB": "2000",
|
|
175
177
|
"reportPackageMeasurement": "unzipped",
|
|
176
178
|
"ixTargetUsage": "allowed",
|
|
@@ -1785,17 +1785,15 @@ def rule_nl_kvk_6_1_1_1(
|
|
|
1785
1785
|
"""
|
|
1786
1786
|
NL-KVK.6.1.1.1: The size of the report package MUST NOT exceed 100 MB.
|
|
1787
1787
|
"""
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
#
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
modelObject=val.modelXbrl, maxSize=MAX_REPORT_PACKAGE_SIZE_MBS, size=int(_size/1000000)
|
|
1798
|
-
)
|
|
1788
|
+
size = val.modelXbrl.fileSource.getBytesSize()
|
|
1789
|
+
if size is None:
|
|
1790
|
+
return # File size is not available, cannot validate
|
|
1791
|
+
if size > MAX_REPORT_PACKAGE_SIZE_MBS * 1_000_000: # Interpretting MB as megabytes (1,000,000 bytes)
|
|
1792
|
+
yield Validation.error(
|
|
1793
|
+
codes='NL.NL-KVK.6.1.1.1.reportPackageMaximumSizeExceeded',
|
|
1794
|
+
msg=_('The size of the report package must not exceed %(maxSize)s MBs, size is %(size)s MBs.'),
|
|
1795
|
+
modelObject=val.modelXbrl, maxSize=MAX_REPORT_PACKAGE_SIZE_MBS, size=int(size/1000000)
|
|
1796
|
+
)
|
|
1799
1797
|
|
|
1800
1798
|
|
|
1801
1799
|
@validation(
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
arelle/Aspect.py,sha256=Pn9I91D1os1RTVj6htuxTfRzVMhmVDtrbKvV_zy9xMI,5470
|
|
2
2
|
arelle/BetaFeatures.py,sha256=T_tPac-FiozHyYLCemt0RoHJ1JahUE71L-0tHmIRKpE,858
|
|
3
3
|
arelle/Cntlr.py,sha256=sf5Xe19t5E0wKzhdlXl1p5r6gMtCmPhYAi8RVY0jz7Y,30449
|
|
4
|
-
arelle/CntlrCmdLine.py,sha256=
|
|
4
|
+
arelle/CntlrCmdLine.py,sha256=tSbTlREbJkppAZ9HlB_99KpDKx3EwWBV9veWnXg6hVQ,90155
|
|
5
5
|
arelle/CntlrComServer.py,sha256=h1KPf31uMbErpxTZn_iklDqUMGFgQnjZkFkFjd8gtLQ,1888
|
|
6
6
|
arelle/CntlrProfiler.py,sha256=2VQJudiUhxryVypxjODx2ccP1-n60icTiWs5lSEokhQ,972
|
|
7
7
|
arelle/CntlrQuickBooks.py,sha256=BMqd5nkNQOZyNFPefkTeWUUDCYNS6BQavaG8k1Lepu4,31543
|
|
8
|
-
arelle/CntlrWebMain.py,sha256=
|
|
8
|
+
arelle/CntlrWebMain.py,sha256=_jhosP0Pg-erutBRzTVsL0cmWVgbc6z0WIIlNO-z1N4,50712
|
|
9
9
|
arelle/CntlrWinMain.py,sha256=53lRaGTh8-4vG-hpuNVkxUhFa60u0jIHM9WvFdwdv-o,97273
|
|
10
10
|
arelle/CntlrWinTooltip.py,sha256=6MzoAIfkYnNu_bl_je8n0adhwmKxAIcymkg9Tij9Z4M,7951
|
|
11
11
|
arelle/DialogAbout.py,sha256=XXzMV0fO4BQ3-l1Puirzmn7EZEdmgJg7JNYdJm1FueM,1987
|
|
@@ -20,8 +20,8 @@ arelle/DialogPluginManager.py,sha256=cr7GWNuYttg7H0pM5vaCPuxgDVgtZzR6ZamX957_1w8
|
|
|
20
20
|
arelle/DialogRssWatch.py,sha256=mjc4pqyFDISY4tQtME0uSRQ3NlcWnNsOsMu9Zj8tTd0,13789
|
|
21
21
|
arelle/DialogURL.py,sha256=JH88OPFf588E8RW90uMaieok7A_4kOAURQ8kHWVhnao,4354
|
|
22
22
|
arelle/DialogUserPassword.py,sha256=kWPlCCihhwvsykDjanME9qBDtv6cxZlsrJyoMqiRep4,13769
|
|
23
|
-
arelle/DisclosureSystem.py,sha256=
|
|
24
|
-
arelle/FileSource.py,sha256=
|
|
23
|
+
arelle/DisclosureSystem.py,sha256=mQlz8eezPpJuG6gHBV-x4-5Hne3LVh8TQf-Qm9jiFxI,24757
|
|
24
|
+
arelle/FileSource.py,sha256=S19Rll9CoRPZ2zJCAlNHv1jt2UUfiLbSgI2tDdJq5Xc,47899
|
|
25
25
|
arelle/FunctionCustom.py,sha256=d1FsBG14eykvpLpgaXpN8IdxnlG54dfGcsXPYfdpA9Q,5880
|
|
26
26
|
arelle/FunctionFn.py,sha256=BcZKah1rpfquSVPwjvknM1pgFXOnK4Hr1e_ArG_mcJY,38058
|
|
27
27
|
arelle/FunctionIxt.py,sha256=8JELGh1l4o8Ul4_G7JgwX8Ebch9it2DblI6OkfL33Cw,80082
|
|
@@ -114,7 +114,7 @@ arelle/ViewWinVersReport.py,sha256=aYfsOgynVZpMzl6f2EzQCBLzdihYGycwb5SiTghkgMQ,9
|
|
|
114
114
|
arelle/ViewWinXml.py,sha256=4ZGKtjaoCwU9etKYm9ZAS7jSmUxba1rqNEdv0OIyjTY,1250
|
|
115
115
|
arelle/WatchRss.py,sha256=5Ih4igH2MM4hpOuAXy9eO0QAyZ7jZR3S5bPzo2sdFpw,14097
|
|
116
116
|
arelle/WebCache.py,sha256=HlF4vfjxO0bSFHqMPfjnmkrzc7RK9XT714a7g3XFTDY,45192
|
|
117
|
-
arelle/XbrlConst.py,sha256=
|
|
117
|
+
arelle/XbrlConst.py,sha256=k-cingAiunkqPd7YkFMgF6y5syj9GRWP84DTK2aDrCY,57935
|
|
118
118
|
arelle/XbrlUtil.py,sha256=s2Vmrh-sZI5TeuqsziKignOc3ao-uUgnCNoelP4dDj0,9212
|
|
119
119
|
arelle/XhtmlValidate.py,sha256=0gtm7N-kXK0RB5o3c1AQXjfFuRp1w2fKZZAeyruNANw,5727
|
|
120
120
|
arelle/XmlUtil.py,sha256=1VToOOylF8kbEorEdZLThmq35j9bmuF_DS2q9NthnHU,58774
|
|
@@ -123,9 +123,9 @@ 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=UdKRHaB3pyxyxupZQ1MDG4KdlqxGBWeWxgwroLH2N_g,515
|
|
127
127
|
arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
|
|
128
|
-
arelle/api/Session.py,sha256=
|
|
128
|
+
arelle/api/Session.py,sha256=27HVuK3Bz1_21l4_RLn1IQg6v0MNsUEYrHajymyWwxI,7429
|
|
129
129
|
arelle/archive/CustomLogger.py,sha256=v_JXOCQLDZcfaFWzxC9FRcEf9tQi4rCI4Sx7jCuAVQI,1231
|
|
130
130
|
arelle/archive/LoadEFMvalidate.py,sha256=HR1ZJmOvWGUlWEsWd0tGCa2TTtZSNzeL6tgN1TFfrl0,986
|
|
131
131
|
arelle/archive/LoadSavePreLbCsv.py,sha256=mekr1R6OE5d3xdUCZIVfSeolyet0HO8R6wsHnW4eyaA,767
|
|
@@ -294,7 +294,7 @@ arelle/model/CommentBase.py,sha256=NtC2lFd9Mt1y7kzWwrpvexwqBdfSe1nvGFiIJeio3rU,1
|
|
|
294
294
|
arelle/model/ElementBase.py,sha256=pZX836d4-s-OvzPMUusvEDezI9D_6YKO7_j6iDcUXm4,404
|
|
295
295
|
arelle/model/PIBase.py,sha256=easZ3pKXJ5wq3NFB2pDtBeXNDcjwMAXylpXz6mnumOg,257
|
|
296
296
|
arelle/model/__init__.py,sha256=RLmC1rTus3T_2Vvnu3yHtdw1r0wrZCHZoqxe8BLg_wE,595
|
|
297
|
-
arelle/oim/Load.py,sha256=
|
|
297
|
+
arelle/oim/Load.py,sha256=jLDidnntV78Pwzw0MvOLWSHXC8QxDkHO41TrdmsQuOQ,182874
|
|
298
298
|
arelle/oim/Validate.py,sha256=IaBClr2KYMiVC_GKYy4_A9gF7hcnm-lxXpQrDCqIWGs,9012
|
|
299
299
|
arelle/oim/xml/Save.py,sha256=MdaJiGcEo4nbQCX9sRgWfVIoxp6fd2N-wuLiDAS9D-I,607
|
|
300
300
|
arelle/packages/PackageConst.py,sha256=iIIF-Ic8zlMPiiCq3PcV57aWci6ispBtilSG4W7ZW4U,121
|
|
@@ -394,24 +394,28 @@ arelle/plugin/validate/EBA/__init__.py,sha256=1kW-04W32sStSAL8wvW1ZpXnjlFv6KLbfE
|
|
|
394
394
|
arelle/plugin/validate/EBA/config.xml,sha256=37wMVUAObK-XEqakqD8zPNog20emYt4a_yfL1AKubF8,2022
|
|
395
395
|
arelle/plugin/validate/EDINET/DisclosureSystems.py,sha256=3rKG42Eg-17Xx_KXU_V5yHW6I3LTwQunvf4a44C9k_4,36
|
|
396
396
|
arelle/plugin/validate/EDINET/FormType.py,sha256=pJfKjdjqFcRLFgH6xbEixvpwatZBBHI8uI3xjjhaPI0,3175
|
|
397
|
-
arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=
|
|
397
|
+
arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=VSSffANEC5kuvLC54pWYQ7w8fuSKo5LGdiuZ3NwWktg,5061
|
|
398
398
|
arelle/plugin/validate/EDINET/ValidationPluginExtension.py,sha256=HIGOpBOyuVs5SEh573M3IzdouRdEuNIBkdumieZi8r0,959
|
|
399
|
-
arelle/plugin/validate/EDINET/__init__.py,sha256=
|
|
400
|
-
arelle/plugin/validate/EDINET/resources/config.xml,sha256=
|
|
399
|
+
arelle/plugin/validate/EDINET/__init__.py,sha256=7Z3IdTdx0OdSm65jYYeRx_0B_zSvUKQubgXpa76OlvA,5164
|
|
400
|
+
arelle/plugin/validate/EDINET/resources/config.xml,sha256=GmLcW7UIj5koXJkN19P6Nq5EZJcs6gKQLQ5f2V6u78w,614
|
|
401
|
+
arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml,sha256=997I3RGTLg5OY3vn5hQxVFAAxOmDSOYpuyQe6VnWSY0,16285
|
|
401
402
|
arelle/plugin/validate/EDINET/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
402
|
-
arelle/plugin/validate/EDINET/rules/
|
|
403
|
+
arelle/plugin/validate/EDINET/rules/edinet.py,sha256=hm5T8PiQbOKP58BiSV9UFvKQX10uNBpxUZ06ORSU1cE,2117
|
|
404
|
+
arelle/plugin/validate/EDINET/rules/frta.py,sha256=l7BQHOenDjYrpCX6bsXyUHgyvkjbfvJWfbpBthCHmBI,1713
|
|
405
|
+
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=rj1ylvRIoauyzlEW1z1UxOkgO6fzvoMl5myRKkEZzY4,3295
|
|
406
|
+
arelle/plugin/validate/EDINET/rules/upload.py,sha256=sZFDSRWukJZEEBfg_RsG1q3Qw1IHhD0LZjl9LL1i9Ao,17048
|
|
403
407
|
arelle/plugin/validate/ESEF/Const.py,sha256=JujF_XV-_TNsxjGbF-8SQS4OOZIcJ8zhCMnr-C1O5Ho,22660
|
|
404
408
|
arelle/plugin/validate/ESEF/Dimensions.py,sha256=MOJM7vwNPEmV5cu-ZzPrhx3347ZvxgD6643OB2HRnIk,10597
|
|
405
409
|
arelle/plugin/validate/ESEF/Util.py,sha256=QH3btcGqBpr42M7WSKZLSdNXygZaZLfEiEjlxoG21jE,7950
|
|
406
410
|
arelle/plugin/validate/ESEF/__init__.py,sha256=LL7uYOcGPHgjwTlcfW2oWMqWiqrZ5yABzcKkJZFrZis,20391
|
|
407
411
|
arelle/plugin/validate/ESEF/ESEF_2021/DTS.py,sha256=6Za7BANwwc_egxLCgbgWzwUGOXZv9IF1I7JCkDNt2Tw,26277
|
|
408
412
|
arelle/plugin/validate/ESEF/ESEF_2021/Image.py,sha256=4bnhuy5viBU0viPjb4FhcRRjVVKlNdnKLFdSGg3sZvs,4871
|
|
409
|
-
arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py,sha256=
|
|
413
|
+
arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py,sha256=Oh_Qy2Shug3wN1-uwct0BCnuNe36RoCQvLEJxdmE1HY,63941
|
|
410
414
|
arelle/plugin/validate/ESEF/ESEF_2021/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
411
415
|
arelle/plugin/validate/ESEF/ESEF_Current/DTS.py,sha256=epp-PBh1NJzQqgxUE6C468HmoDc2w3j54rMwfiOAry4,29334
|
|
412
|
-
arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py,sha256=
|
|
416
|
+
arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py,sha256=XMFlRc9X-dwMkyaEMWxmNWnTRBlFjzpA8JsyMWknzvs,75251
|
|
413
417
|
arelle/plugin/validate/ESEF/ESEF_Current/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
414
|
-
arelle/plugin/validate/ESEF/resources/authority-validations.json,sha256=
|
|
418
|
+
arelle/plugin/validate/ESEF/resources/authority-validations.json,sha256=ou4Hd7P237vSmck0MMLdNvN9J4DzzWawbDmrRnsIj-4,15069
|
|
415
419
|
arelle/plugin/validate/ESEF/resources/config.xml,sha256=t3STU_-QYM7Ay8YwZRPapnohiWVWhjfr4L2Rjx9xN9U,3902
|
|
416
420
|
arelle/plugin/validate/FERC/__init__.py,sha256=V4fXcFKBsjFFPs9_1NhvDjWpEQCoQM0tRQMS0I1Ua7U,11462
|
|
417
421
|
arelle/plugin/validate/FERC/config.xml,sha256=bn9b8eCqJA1J62rYq1Nz85wJrMGAahVmmnIUQZyerjo,1919
|
|
@@ -427,7 +431,7 @@ arelle/plugin/validate/NL/rules/br_kvk.py,sha256=0SwKieWzTDm3YMsXPS6zTdgbk7_Z9Cz
|
|
|
427
431
|
arelle/plugin/validate/NL/rules/fg_nl.py,sha256=4Puq5wAjtK_iNd4wisH_R0Z_EKJ7MT2OCai5g4t1MPE,10714
|
|
428
432
|
arelle/plugin/validate/NL/rules/fr_kvk.py,sha256=kYqXt45S6eM32Yg9ii7pUhOMfJaHurgYqQ73FyQALs8,8171
|
|
429
433
|
arelle/plugin/validate/NL/rules/fr_nl.py,sha256=-M1WtXp06khhtkfOVPCa-b8UbC281gk4YfDhvtAVlnI,31424
|
|
430
|
-
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=
|
|
434
|
+
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=WW56HvQNSAqGOkPKTAFSuzZEXz-ECAYKvJlNKvZmsKM,90151
|
|
431
435
|
arelle/plugin/validate/ROS/DisclosureSystems.py,sha256=rJ81mwQDYTi6JecFZ_zhqjjz3VNQRgjHNSh0wcQWAQE,18
|
|
432
436
|
arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=IV7ILhNvgKwQXqbpSA6HRNt9kEnejCyMADI3wyyIgk0,4036
|
|
433
437
|
arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=FBhEp8t396vGdvCbMEimfcxmGiGnhXMen-yVLWnkFaI,758
|
|
@@ -750,9 +754,9 @@ arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txr
|
|
|
750
754
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
751
755
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
752
756
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
753
|
-
arelle_release-2.37.
|
|
754
|
-
arelle_release-2.37.
|
|
755
|
-
arelle_release-2.37.
|
|
756
|
-
arelle_release-2.37.
|
|
757
|
-
arelle_release-2.37.
|
|
758
|
-
arelle_release-2.37.
|
|
757
|
+
arelle_release-2.37.34.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
758
|
+
arelle_release-2.37.34.dist-info/METADATA,sha256=580O6L8VeM_RIhUWVmkF7s_ifRMpg3mYX3e_8G3u33I,9137
|
|
759
|
+
arelle_release-2.37.34.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
760
|
+
arelle_release-2.37.34.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
761
|
+
arelle_release-2.37.34.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
|
|
762
|
+
arelle_release-2.37.34.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|