arelle-release 2.37.66__py3-none-any.whl → 2.37.68__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/Cntlr.py +7 -7
- arelle/CntlrCmdLine.py +0 -1
- arelle/CntlrWinMain.py +78 -37
- arelle/_version.py +2 -2
- arelle/plugin/validate/DBA/PluginValidationDataExtension.py +2 -3
- arelle/plugin/validate/EDINET/Constants.py +4 -4
- arelle/plugin/validate/EDINET/Statement.py +1 -1
- arelle/plugin/validate/EDINET/rules/contexts.py +42 -0
- arelle/plugin/validate/EDINET/rules/edinet.py +169 -1
- arelle/plugin/validate/EDINET/rules/upload.py +11 -8
- arelle/plugin/validate/NL/rules/br_kvk.py +8 -7
- arelle/plugin/validate/NL/rules/nl_kvk.py +16 -14
- arelle/plugin/validate/UK/__init__.py +11 -31
- {arelle_release-2.37.66.dist-info → arelle_release-2.37.68.dist-info}/METADATA +1 -1
- {arelle_release-2.37.66.dist-info → arelle_release-2.37.68.dist-info}/RECORD +19 -19
- {arelle_release-2.37.66.dist-info → arelle_release-2.37.68.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.66.dist-info → arelle_release-2.37.68.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.66.dist-info → arelle_release-2.37.68.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.66.dist-info → arelle_release-2.37.68.dist-info}/top_level.txt +0 -0
arelle/Cntlr.py
CHANGED
|
@@ -18,24 +18,24 @@ import os
|
|
|
18
18
|
import subprocess
|
|
19
19
|
import sys
|
|
20
20
|
import tempfile
|
|
21
|
-
from typing import
|
|
21
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
22
22
|
|
|
23
|
-
import regex
|
|
23
|
+
import regex
|
|
24
24
|
|
|
25
25
|
from arelle import Locale, ModelManager, PackageManager, PluginManager, XbrlConst
|
|
26
26
|
from arelle.BetaFeatures import BETA_FEATURES_AND_DESCRIPTIONS
|
|
27
27
|
from arelle.ErrorManager import ErrorManager
|
|
28
28
|
from arelle.FileSource import FileSource
|
|
29
|
-
from arelle.SystemInfo import PlatformOS, getSystemWordSize, hasFileSystem, hasWebServer, isCGI, isGAE
|
|
30
|
-
from arelle.WebCache import WebCache
|
|
31
29
|
from arelle.logging.formatters.LogFormatter import LogFormatter, logRefsFileLines # noqa: F401 - for reimport
|
|
32
30
|
from arelle.logging.handlers.LogHandlerWithXml import LogHandlerWithXml # noqa: F401 - for reimport
|
|
33
31
|
from arelle.logging.handlers.LogToBufferHandler import LogToBufferHandler
|
|
34
32
|
from arelle.logging.handlers.LogToPrintHandler import LogToPrintHandler
|
|
35
33
|
from arelle.logging.handlers.LogToXmlHandler import LogToXmlHandler
|
|
36
34
|
from arelle.logging.handlers.StructuredMessageLogHandler import StructuredMessageLogHandler
|
|
35
|
+
from arelle.SystemInfo import PlatformOS, getSystemWordSize, hasFileSystem, hasWebServer, isCGI, isGAE
|
|
37
36
|
from arelle.typing import TypeGetText
|
|
38
37
|
from arelle.utils.PluginData import PluginData
|
|
38
|
+
from arelle.WebCache import WebCache
|
|
39
39
|
|
|
40
40
|
_: TypeGetText
|
|
41
41
|
|
|
@@ -60,7 +60,7 @@ def resourcesDir() -> str:
|
|
|
60
60
|
# for python 3.2 remove __pycache__
|
|
61
61
|
if _moduleDir.endswith("__pycache__"):
|
|
62
62
|
_moduleDir = os.path.dirname(_moduleDir)
|
|
63
|
-
if (
|
|
63
|
+
if (regex.match(r".*[\\/](library|python{0.major}{0.minor}).zip[\\/]arelle$".format(sys.version_info),
|
|
64
64
|
_moduleDir)): # cx_Freexe uses library up to 3.4 and python35 after 3.5
|
|
65
65
|
_resourcesDir = os.path.dirname(os.path.dirname(_moduleDir))
|
|
66
66
|
else:
|
|
@@ -435,11 +435,11 @@ class Cntlr:
|
|
|
435
435
|
|
|
436
436
|
def setLogLevelFilter(self, logLevelFilter: str) -> None:
|
|
437
437
|
if self.logger:
|
|
438
|
-
setattr(self.logger, "messageLevelFilter",
|
|
438
|
+
setattr(self.logger, "messageLevelFilter", regex.compile(logLevelFilter) if logLevelFilter else None)
|
|
439
439
|
|
|
440
440
|
def setLogCodeFilter(self, logCodeFilter: str) -> None:
|
|
441
441
|
if self.logger:
|
|
442
|
-
setattr(self.logger, "messageCodeFilter",
|
|
442
|
+
setattr(self.logger, "messageCodeFilter", regex.compile(logCodeFilter) if logCodeFilter else None)
|
|
443
443
|
|
|
444
444
|
def addToLog(
|
|
445
445
|
self,
|
arelle/CntlrCmdLine.py
CHANGED
arelle/CntlrWinMain.py
CHANGED
|
@@ -5,12 +5,19 @@ See COPYRIGHT.md for copyright information.
|
|
|
5
5
|
'''
|
|
6
6
|
from __future__ import annotations
|
|
7
7
|
|
|
8
|
+
import fnmatch
|
|
9
|
+
import os
|
|
10
|
+
import pickle
|
|
11
|
+
import platform
|
|
12
|
+
import subprocess
|
|
13
|
+
import sys
|
|
14
|
+
import time
|
|
15
|
+
import webbrowser
|
|
8
16
|
from typing import Any
|
|
9
17
|
|
|
10
|
-
from arelle import ValidateDuplicateFacts
|
|
11
|
-
import os, sys, subprocess, pickle, time, locale, fnmatch, platform, webbrowser
|
|
12
18
|
import regex as re
|
|
13
19
|
|
|
20
|
+
from arelle import ValidateDuplicateFacts
|
|
14
21
|
from arelle.logging.formatters.LogFormatter import logRefsFileLines
|
|
15
22
|
from arelle.utils.EntryPointDetection import parseEntrypointFileInput
|
|
16
23
|
|
|
@@ -18,55 +25,89 @@ if sys.platform == 'win32' and getattr(sys, 'frozen', False):
|
|
|
18
25
|
# need the .dll directory in path to be able to access Tk and Tcl DLLs efore importinng Tk, etc.
|
|
19
26
|
os.environ['PATH'] = os.path.dirname(sys.executable) + ";" + os.environ['PATH']
|
|
20
27
|
|
|
21
|
-
from tkinter import (
|
|
22
|
-
|
|
28
|
+
from tkinter import (
|
|
29
|
+
END,
|
|
30
|
+
EW,
|
|
31
|
+
HORIZONTAL,
|
|
32
|
+
VERTICAL,
|
|
33
|
+
BooleanVar,
|
|
34
|
+
E,
|
|
35
|
+
IntVar,
|
|
36
|
+
Menu,
|
|
37
|
+
N,
|
|
38
|
+
PhotoImage,
|
|
39
|
+
S,
|
|
40
|
+
StringVar,
|
|
41
|
+
Tcl,
|
|
42
|
+
TclError,
|
|
43
|
+
Tk,
|
|
44
|
+
W,
|
|
45
|
+
)
|
|
46
|
+
from tkinter import font as tkFont
|
|
47
|
+
|
|
23
48
|
try:
|
|
24
|
-
from tkinter.ttk import
|
|
49
|
+
from tkinter.ttk import Button, Combobox, Frame, Label, Notebook, PanedWindow, Separator
|
|
25
50
|
except ImportError: # 3.0 versions of tkinter
|
|
26
|
-
from ttk import
|
|
51
|
+
from ttk import Button, Combobox, Frame, Label, Notebook, PanedWindow, Separator
|
|
27
52
|
try:
|
|
28
53
|
import syslog
|
|
29
54
|
except ImportError:
|
|
30
55
|
syslog = None
|
|
56
|
+
|
|
57
|
+
import logging
|
|
58
|
+
import multiprocessing
|
|
59
|
+
import queue
|
|
60
|
+
import threading
|
|
31
61
|
import tkinter.filedialog
|
|
32
|
-
import tkinter.messagebox
|
|
62
|
+
import tkinter.messagebox
|
|
33
63
|
import tkinter.simpledialog
|
|
34
|
-
|
|
64
|
+
import traceback
|
|
65
|
+
|
|
66
|
+
from arelle import (
|
|
67
|
+
Cntlr,
|
|
68
|
+
DialogLanguage,
|
|
69
|
+
DialogPackageManager,
|
|
70
|
+
DialogPluginManager,
|
|
71
|
+
DialogURL,
|
|
72
|
+
ModelDocument,
|
|
73
|
+
PackageManager,
|
|
74
|
+
TableStructure,
|
|
75
|
+
Updater,
|
|
76
|
+
ViewFileConcepts,
|
|
77
|
+
ViewFileDTS,
|
|
78
|
+
ViewFileFactList,
|
|
79
|
+
ViewFileFactTable,
|
|
80
|
+
ViewFileFormulae,
|
|
81
|
+
ViewFileRelationshipSet,
|
|
82
|
+
ViewFileRoleTypes,
|
|
83
|
+
ViewFileTests,
|
|
84
|
+
ViewWinConcepts,
|
|
85
|
+
ViewWinDTS,
|
|
86
|
+
ViewWinFactList,
|
|
87
|
+
ViewWinFactTable,
|
|
88
|
+
ViewWinFormulae,
|
|
89
|
+
ViewWinProperties,
|
|
90
|
+
ViewWinRelationshipSet,
|
|
91
|
+
ViewWinRenderedGrid,
|
|
92
|
+
ViewWinRoleTypes,
|
|
93
|
+
ViewWinRssFeed,
|
|
94
|
+
ViewWinTests,
|
|
95
|
+
ViewWinTree,
|
|
96
|
+
ViewWinVersReport,
|
|
97
|
+
ViewWinXml,
|
|
98
|
+
XbrlConst,
|
|
99
|
+
)
|
|
35
100
|
from arelle.CntlrWinTooltip import ToolTip
|
|
36
|
-
from arelle import
|
|
101
|
+
from arelle.FileSource import openFileSource
|
|
102
|
+
from arelle.Locale import format_string, setApplicationLocale
|
|
103
|
+
from arelle.ModelFormulaObject import FormulaOptions
|
|
104
|
+
from arelle.oim.xml.Save import saveOimReportToXmlInstance
|
|
37
105
|
from arelle.PluginManager import pluginClassMethods
|
|
106
|
+
from arelle.rendering import RenderingEvaluator
|
|
38
107
|
from arelle.UrlUtil import isHttpUrl
|
|
39
108
|
from arelle.ValidateXbrlCalcs import ValidateCalcsMode as CalcsMode
|
|
40
109
|
from arelle.ValidateXbrlDTS import ValidateBaseTaxonomiesMode
|
|
41
110
|
from arelle.Version import copyrightLabel
|
|
42
|
-
from arelle.oim.xml.Save import saveOimReportToXmlInstance
|
|
43
|
-
import logging
|
|
44
|
-
import multiprocessing
|
|
45
|
-
|
|
46
|
-
import threading, queue
|
|
47
|
-
|
|
48
|
-
from arelle import Cntlr
|
|
49
|
-
from arelle import (DialogURL, DialogLanguage,
|
|
50
|
-
DialogPluginManager, DialogPackageManager,
|
|
51
|
-
ModelDocument,
|
|
52
|
-
ModelManager,
|
|
53
|
-
PackageManager,
|
|
54
|
-
TableStructure,
|
|
55
|
-
ViewWinDTS,
|
|
56
|
-
ViewWinProperties, ViewWinConcepts, ViewWinRelationshipSet, ViewWinFormulae,
|
|
57
|
-
ViewWinFactList, ViewFileFactList, ViewWinFactTable, ViewWinRenderedGrid, ViewWinXml,
|
|
58
|
-
ViewWinRoleTypes, ViewFileRoleTypes, ViewFileConcepts,
|
|
59
|
-
ViewWinTests, ViewWinTree, ViewWinVersReport, ViewWinRssFeed,
|
|
60
|
-
ViewFileDTS,
|
|
61
|
-
ViewFileFactTable,
|
|
62
|
-
ViewFileFormulae,
|
|
63
|
-
ViewFileTests,
|
|
64
|
-
ViewFileRelationshipSet,
|
|
65
|
-
Updater
|
|
66
|
-
)
|
|
67
|
-
from arelle.ModelFormulaObject import FormulaOptions
|
|
68
|
-
from arelle.FileSource import openFileSource
|
|
69
|
-
from arelle.rendering import RenderingEvaluator
|
|
70
111
|
|
|
71
112
|
restartMain = True
|
|
72
113
|
|
arelle/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '2.37.
|
|
32
|
-
__version_tuple__ = version_tuple = (2, 37,
|
|
31
|
+
__version__ = version = '2.37.68'
|
|
32
|
+
__version_tuple__ = version_tuple = (2, 37, 68)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
|
@@ -5,11 +5,10 @@ from __future__ import annotations
|
|
|
5
5
|
|
|
6
6
|
from collections import defaultdict
|
|
7
7
|
from dataclasses import dataclass
|
|
8
|
-
from typing import cast
|
|
9
8
|
|
|
10
9
|
import regex
|
|
11
10
|
|
|
12
|
-
from arelle.ModelInstanceObject import
|
|
11
|
+
from arelle.ModelInstanceObject import ModelContext, ModelFact
|
|
13
12
|
from arelle.ModelValue import QName
|
|
14
13
|
from arelle.ModelXbrl import ModelXbrl
|
|
15
14
|
from arelle.utils.PluginData import PluginData
|
|
@@ -46,7 +45,7 @@ class PluginValidationDataExtension(PluginData):
|
|
|
46
45
|
disclosureOfEquityQns: frozenset[QName]
|
|
47
46
|
consolidatedMemberQn: QName
|
|
48
47
|
consolidatedSoloDimensionQn: QName
|
|
49
|
-
cpr_regex: regex.
|
|
48
|
+
cpr_regex: regex.Pattern[str]
|
|
50
49
|
dateOfApprovalOfAnnualReportQn: QName
|
|
51
50
|
dateOfExtraordinaryDividendDistributedAfterEndOfReportingPeriod: QName
|
|
52
51
|
dateOfGeneralMeetingQn: QName
|
|
@@ -85,8 +85,8 @@ NUMERIC_LABEL_ROLES = frozenset({
|
|
|
85
85
|
PATTERN_CODE = r'(?P<code>[A-Za-z\d]*)'
|
|
86
86
|
PATTERN_CONSOLIDATED = r'(?P<consolidated>c|n)'
|
|
87
87
|
PATTERN_COUNT = r'(?P<count>\d{2})'
|
|
88
|
-
|
|
89
|
-
|
|
88
|
+
PATTERN_PERIOD_DATE = r'(?P<period_year>\d{4})-(?P<period_month>\d{2})-(?P<period_day>\d{2})'
|
|
89
|
+
PATTERN_SUBMISSION_DATE = r'(?P<submission_year>\d{4})-(?P<submission_month>\d{2})-(?P<submission_day>\d{2})'
|
|
90
90
|
PATTERN_FORM = r'(?P<form>\d{6})'
|
|
91
91
|
PATTERN_LINKBASE = r'(?P<linkbase>lab|lab-en|gla|pre|def|cal)'
|
|
92
92
|
PATTERN_MAIN = r'(?P<main>\d{7})'
|
|
@@ -99,12 +99,12 @@ PATTERN_SERIAL = r'(?P<serial>\d{3})'
|
|
|
99
99
|
|
|
100
100
|
PATTERN_AUDIT_REPORT_PREFIX = rf'jpaud-{PATTERN_REPORT}-{PATTERN_PERIOD}{PATTERN_CONSOLIDATED}'
|
|
101
101
|
PATTERN_REPORT_PREFIX = rf'jp{PATTERN_ORDINANCE}{PATTERN_FORM}-{PATTERN_REPORT}'
|
|
102
|
-
PATTERN_SUFFIX = rf'{PATTERN_REPORT_SERIAL}_{PATTERN_CODE}-{PATTERN_SERIAL}_{
|
|
102
|
+
PATTERN_SUFFIX = rf'{PATTERN_REPORT_SERIAL}_{PATTERN_CODE}-{PATTERN_SERIAL}_{PATTERN_PERIOD_DATE}_{PATTERN_COUNT}_{PATTERN_SUBMISSION_DATE}'
|
|
103
103
|
|
|
104
104
|
PATTERN_URI_HOST = r'http:\/\/disclosure\.edinet-fsa\.go\.jp'
|
|
105
105
|
PATTERN_AUDIT_URI_PREFIX = rf'jpaud\/{PATTERN_REPORT}\/{PATTERN_PERIOD}{PATTERN_CONSOLIDATED}'
|
|
106
106
|
PATTERN_REPORT_URI_PREFIX = rf'jp{PATTERN_ORDINANCE}{PATTERN_FORM}\/{PATTERN_REPORT}'
|
|
107
|
-
PATTERN_URI_SUFFIX = rf'{PATTERN_REPORT_SERIAL}\/{PATTERN_CODE}-{PATTERN_SERIAL}\/{
|
|
107
|
+
PATTERN_URI_SUFFIX = rf'{PATTERN_REPORT_SERIAL}\/{PATTERN_CODE}-{PATTERN_SERIAL}\/{PATTERN_PERIOD_DATE}\/{PATTERN_COUNT}\/{PATTERN_SUBMISSION_DATE}'
|
|
108
108
|
|
|
109
109
|
# Extension namespace URI for report
|
|
110
110
|
# Example: http://disclosure.edinet-fsa.go.jp/jpcrp030000/asr/001/X99002-000/2025-03-31/01/2025-06-28
|
|
@@ -353,6 +353,48 @@ def rule_EC8021W(
|
|
|
353
353
|
)
|
|
354
354
|
|
|
355
355
|
|
|
356
|
+
@validation(
|
|
357
|
+
hook=ValidationHook.COMPLETE,
|
|
358
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
359
|
+
)
|
|
360
|
+
def rule_EC8032E(
|
|
361
|
+
pluginData: ControllerPluginData,
|
|
362
|
+
cntlr: Cntlr,
|
|
363
|
+
fileSource: FileSource,
|
|
364
|
+
*args: Any,
|
|
365
|
+
**kwargs: Any,
|
|
366
|
+
) -> Iterable[Validation]:
|
|
367
|
+
"""
|
|
368
|
+
EDINET.EC8032E: The first six digits of each context identifier must match the "EDINET code"
|
|
369
|
+
in the DEI information (or the "fund code" in the DEI information in the case of the Cabinet
|
|
370
|
+
Office Ordinance on Specified Securities Disclosure).
|
|
371
|
+
"""
|
|
372
|
+
localNames = ('EDINETCodeDEI', 'FundCodeDEI')
|
|
373
|
+
codes = set()
|
|
374
|
+
for localName in localNames:
|
|
375
|
+
code = pluginData.getDeiValue(localName)
|
|
376
|
+
if code is None:
|
|
377
|
+
continue
|
|
378
|
+
codes.add(str(code)[:6])
|
|
379
|
+
if len(codes) == 0:
|
|
380
|
+
# If neither code is present in the DEI, it will be caught by other validation(s).
|
|
381
|
+
return
|
|
382
|
+
for modelXbrl in pluginData.loadedModelXbrls:
|
|
383
|
+
for context in modelXbrl.contexts.values():
|
|
384
|
+
__, identifier = context.entityIdentifier
|
|
385
|
+
identifier = identifier[:6]
|
|
386
|
+
if identifier not in codes:
|
|
387
|
+
yield Validation.error(
|
|
388
|
+
codes='EDINET.EC8032E',
|
|
389
|
+
msg=_("The context identifier must match the 'EDINETCodeDEI' information in the DEI. "
|
|
390
|
+
"Please set the identifier (first six digits) of the relevant context ID so "
|
|
391
|
+
"that it matches the EDINET code of the person submitting the disclosure "
|
|
392
|
+
"documents (or the fund code in the case of the Specified Securities Disclosure "
|
|
393
|
+
"Ordinance)."),
|
|
394
|
+
modelObject=context,
|
|
395
|
+
)
|
|
396
|
+
|
|
397
|
+
|
|
356
398
|
@validation(
|
|
357
399
|
hook=ValidationHook.XBRL_FINALLY,
|
|
358
400
|
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
@@ -4,12 +4,14 @@ See COPYRIGHT.md for copyright information.
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
6
|
from collections import defaultdict
|
|
7
|
+
from pathlib import Path
|
|
7
8
|
from typing import Any, Iterable
|
|
8
9
|
|
|
9
10
|
import regex
|
|
11
|
+
import unicodedata
|
|
10
12
|
from jaconv import jaconv
|
|
11
13
|
|
|
12
|
-
from arelle import XbrlConst, ValidateDuplicateFacts
|
|
14
|
+
from arelle import XbrlConst, ValidateDuplicateFacts, XmlUtil
|
|
13
15
|
from arelle.Cntlr import Cntlr
|
|
14
16
|
from arelle.FileSource import FileSource
|
|
15
17
|
from arelle.LinkbaseType import LinkbaseType
|
|
@@ -649,6 +651,172 @@ def rule_EC8029W(
|
|
|
649
651
|
)
|
|
650
652
|
|
|
651
653
|
|
|
654
|
+
@validation(
|
|
655
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
656
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
657
|
+
)
|
|
658
|
+
def rule_EC8030W(
|
|
659
|
+
pluginData: PluginValidationDataExtension,
|
|
660
|
+
val: ValidateXbrl,
|
|
661
|
+
*args: Any,
|
|
662
|
+
**kwargs: Any,
|
|
663
|
+
) -> Iterable[Validation]:
|
|
664
|
+
"""
|
|
665
|
+
EDINET.EC8030W: Any concept (other than DEI concepts) used in an instance must
|
|
666
|
+
be in the presentation linkbase.
|
|
667
|
+
"""
|
|
668
|
+
usedConcepts = pluginData.getUsedConcepts(val.modelXbrl)
|
|
669
|
+
relSet = val.modelXbrl.relationshipSet(tuple(LinkbaseType.PRESENTATION.getArcroles()))
|
|
670
|
+
for concept in usedConcepts:
|
|
671
|
+
if concept.qname.namespaceURI == pluginData.jpdeiNamespace:
|
|
672
|
+
continue
|
|
673
|
+
if concept.qname.localName.endswith('DEI'):
|
|
674
|
+
# Example: jpsps_cor:SecuritiesRegistrationStatementAmendmentFlagDeemedRegistrationStatementDEI
|
|
675
|
+
continue
|
|
676
|
+
if not relSet.contains(concept):
|
|
677
|
+
yield Validation.warning(
|
|
678
|
+
codes='EDINET.EC8030W',
|
|
679
|
+
msg=_("An element (other than DEI) set in the inline XBRL file is not set in the "
|
|
680
|
+
"presentation linkbase. "
|
|
681
|
+
"Element: '%(concept)s'. "
|
|
682
|
+
"Please set the relevant element in the presentation linkbase."),
|
|
683
|
+
concept=concept.qname.localName,
|
|
684
|
+
modelObject=concept,
|
|
685
|
+
)
|
|
686
|
+
|
|
687
|
+
|
|
688
|
+
@validation(
|
|
689
|
+
hook=ValidationHook.COMPLETE,
|
|
690
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
691
|
+
)
|
|
692
|
+
def rule_EC8031W(
|
|
693
|
+
pluginData: ControllerPluginData,
|
|
694
|
+
cntlr: Cntlr,
|
|
695
|
+
fileSource: FileSource,
|
|
696
|
+
*args: Any,
|
|
697
|
+
**kwargs: Any,
|
|
698
|
+
) -> Iterable[Validation]:
|
|
699
|
+
"""
|
|
700
|
+
EDINET.EC8031W: For contexts having an ID beginning with "FilingDate", the instant
|
|
701
|
+
date value must match the report submission date set in the file name.
|
|
702
|
+
|
|
703
|
+
However, when reporting corrections, please set the following:
|
|
704
|
+
Context beginning with "FilingDate": The submission date on the cover page of the attached inline XBRL (original submission date)
|
|
705
|
+
"Report submission date" in the file name: The submission date of the correction report, etc.
|
|
706
|
+
"""
|
|
707
|
+
isAmendment = pluginData.getDeiValue('ReportAmendmentFlagDEI')
|
|
708
|
+
if isAmendment:
|
|
709
|
+
# Amendment/corrections report are not subject to this validation, but documentation does note:
|
|
710
|
+
# However, when reporting corrections, please set the following:
|
|
711
|
+
# Context beginning with "FilingDate": The submission date on the cover page of the attached inline XBRL (original submission date)
|
|
712
|
+
# "Report submission date" in the file name: The submission date of the correction report, etc.
|
|
713
|
+
return
|
|
714
|
+
uploadContents = pluginData.getUploadContents()
|
|
715
|
+
if uploadContents is None:
|
|
716
|
+
return
|
|
717
|
+
docUris = {
|
|
718
|
+
docUri
|
|
719
|
+
for modelXbrl in pluginData.loadedModelXbrls
|
|
720
|
+
for docUri in modelXbrl.urlDocs.keys()
|
|
721
|
+
}
|
|
722
|
+
actualDates = defaultdict(set)
|
|
723
|
+
for uri in docUris:
|
|
724
|
+
path = Path(uri)
|
|
725
|
+
pathInfo = uploadContents.uploadPathsByFullPath.get(path)
|
|
726
|
+
if pathInfo is None or pathInfo.reportFolderType is None:
|
|
727
|
+
continue
|
|
728
|
+
patterns = pathInfo.reportFolderType.ixbrlFilenamePatterns
|
|
729
|
+
for pattern in patterns:
|
|
730
|
+
matches = pattern.match(path.name)
|
|
731
|
+
if not matches:
|
|
732
|
+
continue
|
|
733
|
+
groups = matches.groupdict()
|
|
734
|
+
year = groups['submission_year']
|
|
735
|
+
month = groups['submission_month']
|
|
736
|
+
day = groups['submission_day']
|
|
737
|
+
actualDate = f'{year:04}-{month:02}-{day:02}'
|
|
738
|
+
actualDates[actualDate].add(path)
|
|
739
|
+
expectedDates = defaultdict(set)
|
|
740
|
+
for modelXbrl in pluginData.loadedModelXbrls:
|
|
741
|
+
for context in modelXbrl.contexts.values():
|
|
742
|
+
if context.id is None:
|
|
743
|
+
continue
|
|
744
|
+
if not context.id.startswith("FilingDate"):
|
|
745
|
+
continue
|
|
746
|
+
if not context.isInstantPeriod:
|
|
747
|
+
continue
|
|
748
|
+
expectedDate = XmlUtil.dateunionValue(context.instantDatetime, subtractOneDay=True)[:10]
|
|
749
|
+
expectedDates[expectedDate].add(context)
|
|
750
|
+
invalidDates = {k: v for k, v in actualDates.items() if k not in expectedDates}
|
|
751
|
+
if len(invalidDates) == 0:
|
|
752
|
+
return
|
|
753
|
+
paths = [
|
|
754
|
+
path
|
|
755
|
+
for paths in invalidDates.values()
|
|
756
|
+
for path in paths
|
|
757
|
+
]
|
|
758
|
+
contexts = [
|
|
759
|
+
context
|
|
760
|
+
for contexts in expectedDates.values()
|
|
761
|
+
for context in contexts
|
|
762
|
+
]
|
|
763
|
+
for path in paths:
|
|
764
|
+
for context in contexts:
|
|
765
|
+
yield Validation.warning(
|
|
766
|
+
codes='EDINET.EC8031W',
|
|
767
|
+
msg=_("The value of the instant element in context '%(context)s' "
|
|
768
|
+
"must match the report submission date set in the file name. "
|
|
769
|
+
"File name: '%(file)s'. "
|
|
770
|
+
"Please correct the report submission date in the filename or "
|
|
771
|
+
"the instant element value for the context with ID '%(context)s'."),
|
|
772
|
+
context=context.id,
|
|
773
|
+
file=path.name,
|
|
774
|
+
modelObject=context,
|
|
775
|
+
)
|
|
776
|
+
|
|
777
|
+
|
|
778
|
+
@validation(
|
|
779
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
780
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
781
|
+
)
|
|
782
|
+
def rule_EC8034W(
|
|
783
|
+
pluginData: PluginValidationDataExtension,
|
|
784
|
+
val: ValidateXbrl,
|
|
785
|
+
*args: Any,
|
|
786
|
+
**kwargs: Any,
|
|
787
|
+
) -> Iterable[Validation]:
|
|
788
|
+
"""
|
|
789
|
+
EDINET.EC8034W: English labels for extension concepts must not contain full-width characters.
|
|
790
|
+
"""
|
|
791
|
+
labelsRelationshipSet = val.modelXbrl.relationshipSet(XbrlConst.conceptLabel)
|
|
792
|
+
for concept, modelLabelRels in labelsRelationshipSet.fromModelObjects().items():
|
|
793
|
+
for modelLabelRel in modelLabelRels:
|
|
794
|
+
modelLabel = modelLabelRel.toModelObject
|
|
795
|
+
if not isinstance(modelLabel, ModelResource):
|
|
796
|
+
continue
|
|
797
|
+
if not pluginData.isExtensionUri(modelLabel.modelDocument.uri, val.modelXbrl):
|
|
798
|
+
continue
|
|
799
|
+
if modelLabel.xmlLang != 'en':
|
|
800
|
+
continue
|
|
801
|
+
label = modelLabel.textValue.strip() # Does not trim full-width spaces
|
|
802
|
+
if any(
|
|
803
|
+
unicodedata.east_asian_width(char) in ('F', 'W')
|
|
804
|
+
for char in label
|
|
805
|
+
):
|
|
806
|
+
yield Validation.warning(
|
|
807
|
+
codes='EDINET.EC8034W',
|
|
808
|
+
msg=_("The English label must be set using half-width alphanumeric characters "
|
|
809
|
+
"and half-width symbols. "
|
|
810
|
+
"File name: '%(file)s'. "
|
|
811
|
+
"English label: '%(label)s'. "
|
|
812
|
+
"Please use only half-width alphanumeric characters and half-width symbols "
|
|
813
|
+
"for the English labels of concepts in the relevant files."),
|
|
814
|
+
file=modelLabel.document.basename,
|
|
815
|
+
label=modelLabel.id,
|
|
816
|
+
modelObject=modelLabel,
|
|
817
|
+
)
|
|
818
|
+
|
|
819
|
+
|
|
652
820
|
@validation(
|
|
653
821
|
hook=ValidationHook.XBRL_FINALLY,
|
|
654
822
|
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
@@ -3,10 +3,12 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
import re
|
|
7
6
|
from collections import defaultdict
|
|
7
|
+
from collections.abc import Iterable
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import
|
|
9
|
+
from typing import TYPE_CHECKING, Any
|
|
10
|
+
|
|
11
|
+
import regex
|
|
10
12
|
|
|
11
13
|
from arelle import UrlUtil, XbrlConst
|
|
12
14
|
from arelle.Cntlr import Cntlr
|
|
@@ -14,16 +16,17 @@ from arelle.FileSource import FileSource
|
|
|
14
16
|
from arelle.ModelDocument import Type as ModelDocumentType
|
|
15
17
|
from arelle.ModelInstanceObject import ModelFact
|
|
16
18
|
from arelle.ModelObject import ModelObject
|
|
17
|
-
from arelle.ValidateXbrl import ValidateXbrl
|
|
18
|
-
from arelle.XmlValidateConst import VALID
|
|
19
19
|
from arelle.typing import TypeGetText
|
|
20
20
|
from arelle.utils.PluginHooks import ValidationHook
|
|
21
21
|
from arelle.utils.validate.Decorator import validation
|
|
22
22
|
from arelle.utils.validate.Validation import Validation
|
|
23
|
+
from arelle.ValidateXbrl import ValidateXbrl
|
|
24
|
+
from arelle.XmlValidateConst import VALID
|
|
25
|
+
|
|
23
26
|
from ..Constants import JAPAN_LANGUAGE_CODES
|
|
24
|
-
from ..DisclosureSystems import
|
|
27
|
+
from ..DisclosureSystems import DISCLOSURE_SYSTEM_EDINET
|
|
25
28
|
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
26
|
-
from ..ReportFolderType import
|
|
29
|
+
from ..ReportFolderType import HTML_EXTENSIONS, IMAGE_EXTENSIONS, ReportFolderType
|
|
27
30
|
|
|
28
31
|
if TYPE_CHECKING:
|
|
29
32
|
from ..ControllerPluginData import ControllerPluginData
|
|
@@ -52,7 +55,7 @@ FILE_COUNT_LIMITS = {
|
|
|
52
55
|
Path("XBRL"): 99_990,
|
|
53
56
|
}
|
|
54
57
|
|
|
55
|
-
FILENAME_STEM_PATTERN =
|
|
58
|
+
FILENAME_STEM_PATTERN = regex.compile(r'[a-zA-Z0-9_-]*')
|
|
56
59
|
|
|
57
60
|
|
|
58
61
|
@validation(
|
|
@@ -302,7 +305,7 @@ def rule_EC0188E(
|
|
|
302
305
|
"""
|
|
303
306
|
EDINET.EC0188E: There is an HTML file directly under PublicDoc or PrivateDoc whose first 7 characters are not numbers.
|
|
304
307
|
"""
|
|
305
|
-
pattern =
|
|
308
|
+
pattern = regex.compile(r'^\d{7}')
|
|
306
309
|
uploadFilepaths = pluginData.getUploadFilepaths(fileSource)
|
|
307
310
|
docFolders = frozenset({"PublicDoc", "PrivateDoc"})
|
|
308
311
|
for path in uploadFilepaths:
|
|
@@ -3,21 +3,22 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
from datetime import date, timedelta
|
|
7
|
-
from dateutil import relativedelta
|
|
8
6
|
from collections.abc import Iterable
|
|
9
|
-
from
|
|
7
|
+
from datetime import date, timedelta
|
|
8
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
10
9
|
|
|
11
|
-
|
|
10
|
+
import regex
|
|
11
|
+
from dateutil import relativedelta
|
|
12
12
|
|
|
13
|
-
from arelle import
|
|
13
|
+
from arelle import XbrlConst, XmlUtil
|
|
14
14
|
from arelle.ModelObject import ModelObject
|
|
15
|
-
from arelle.ValidateXbrl import ValidateXbrl
|
|
16
|
-
from arelle.XmlValidate import INVALID
|
|
17
15
|
from arelle.typing import TypeGetText
|
|
18
16
|
from arelle.utils.PluginHooks import ValidationHook
|
|
19
17
|
from arelle.utils.validate.Decorator import validation
|
|
20
18
|
from arelle.utils.validate.Validation import Validation
|
|
19
|
+
from arelle.ValidateXbrl import ValidateXbrl
|
|
20
|
+
from arelle.XmlValidate import INVALID
|
|
21
|
+
|
|
21
22
|
from ..DisclosureSystems import (
|
|
22
23
|
DISCLOSURE_SYSTEM_NT16,
|
|
23
24
|
DISCLOSURE_SYSTEM_NT17,
|
|
@@ -3,36 +3,37 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
import re
|
|
7
6
|
from collections import defaultdict
|
|
8
7
|
from collections.abc import Iterable
|
|
9
8
|
from datetime import date
|
|
10
|
-
from typing import Any, cast
|
|
9
|
+
from typing import TYPE_CHECKING, Any, cast
|
|
11
10
|
|
|
11
|
+
import regex
|
|
12
12
|
from lxml.etree import Element
|
|
13
13
|
|
|
14
|
+
from arelle import ModelDocument, XbrlConst, XmlUtil
|
|
14
15
|
from arelle.LinkbaseType import LinkbaseType
|
|
15
16
|
from arelle.ModelDtsObject import ModelConcept, ModelLink, ModelResource, ModelType
|
|
16
17
|
from arelle.ModelInstanceObject import ModelInlineFact
|
|
17
18
|
from arelle.ModelObject import ModelObject
|
|
18
19
|
from arelle.PrototypeDtsObject import PrototypeObject
|
|
19
|
-
from arelle.ValidateDuplicateFacts import getDuplicateFactSets
|
|
20
|
-
from arelle.XbrlConst import parentChild, standardLabel
|
|
21
|
-
from arelle.XmlValidateConst import VALID
|
|
22
|
-
|
|
23
|
-
from arelle import XbrlConst, XmlUtil, ModelDocument
|
|
24
|
-
from arelle.ValidateXbrl import ValidateXbrl
|
|
25
20
|
from arelle.typing import TypeGetText
|
|
26
21
|
from arelle.utils.PluginHooks import ValidationHook
|
|
27
22
|
from arelle.utils.validate.Decorator import validation
|
|
28
23
|
from arelle.utils.validate.DetectScriptsInXhtml import containsScriptMarkers
|
|
29
24
|
from arelle.utils.validate.ESEFImage import ImageValidationParameters, validateImage
|
|
30
25
|
from arelle.utils.validate.Validation import Validation
|
|
31
|
-
from arelle.ValidateDuplicateFacts import
|
|
32
|
-
from
|
|
33
|
-
|
|
26
|
+
from arelle.ValidateDuplicateFacts import getAspectEqualFacts, getDuplicateFactSets, getHashEquivalentFactGroups
|
|
27
|
+
from arelle.ValidateXbrl import ValidateXbrl
|
|
28
|
+
from arelle.XbrlConst import parentChild, standardLabel
|
|
29
|
+
from arelle.XmlValidateConst import VALID
|
|
30
|
+
|
|
31
|
+
from ..DisclosureSystems import (
|
|
32
|
+
ALL_NL_INLINE_DISCLOSURE_SYSTEMS,
|
|
33
|
+
NL_INLINE_GAAP_IFRS_DISCLOSURE_SYSTEMS,
|
|
34
|
+
NL_INLINE_GAAP_OTHER_DISCLOSURE_SYSTEMS,
|
|
35
|
+
)
|
|
34
36
|
from ..PluginValidationDataExtension import (
|
|
35
|
-
PluginValidationDataExtension,
|
|
36
37
|
ALLOWABLE_LANGUAGES,
|
|
37
38
|
DEFAULT_MEMBER_ROLE_URI,
|
|
38
39
|
DISALLOWED_IXT_NAMESPACES,
|
|
@@ -45,15 +46,16 @@ from ..PluginValidationDataExtension import (
|
|
|
45
46
|
TAXONOMY_URLS_BY_YEAR,
|
|
46
47
|
XBRLI_IDENTIFIER_PATTERN,
|
|
47
48
|
XBRLI_IDENTIFIER_SCHEMA,
|
|
49
|
+
PluginValidationDataExtension,
|
|
48
50
|
)
|
|
49
51
|
|
|
50
52
|
if TYPE_CHECKING:
|
|
51
|
-
from arelle.ModelXbrl import ModelXbrl
|
|
52
53
|
from arelle.ModelValue import QName
|
|
54
|
+
from arelle.ModelXbrl import ModelXbrl
|
|
53
55
|
|
|
54
56
|
_: TypeGetText
|
|
55
57
|
|
|
56
|
-
DOCTYPE_XHTML_PATTERN =
|
|
58
|
+
DOCTYPE_XHTML_PATTERN = regex.compile(r"^<!(?:DOCTYPE\s+)\s*html(?:PUBLIC\s+)?(?:.*-//W3C//DTD\s+(X?HTML)\s)?.*>$", regex.IGNORECASE)
|
|
57
59
|
|
|
58
60
|
|
|
59
61
|
def _getReportingPeriodDateValue(modelXbrl: ModelXbrl, qname: QName) -> date | None:
|
|
@@ -38,12 +38,18 @@ IMG_URL_CSS_PROPERTIES = frozenset([
|
|
|
38
38
|
EMPTYDICT = {}
|
|
39
39
|
_6_APR_2008 = dateTime("2008-04-06", type=DATE)
|
|
40
40
|
|
|
41
|
-
|
|
41
|
+
GENERIC_DIMENSION_VALIDATIONS = {
|
|
42
|
+
# "LocalName": (range of numbers if any, first item name, 2nd choice item name if any)
|
|
43
|
+
"SpecificDiscontinuedOperation": (1, 8, "DescriptionDiscontinuedOperationOrNon-currentAssetsOrDisposalGroupHeldForSale"),
|
|
44
|
+
"SpecificNon-currentAssetsDisposalGroupHeldForSale": (1, 8, "DescriptionDiscontinuedOperationOrNon-currentAssetsOrDisposalGroupHeldForSale"),
|
|
42
45
|
"Chairman": ("NameEntityOfficer",),
|
|
43
46
|
"ChiefExecutive": ("NameEntityOfficer",),
|
|
44
47
|
"ChairmanChiefExecutive": ("NameEntityOfficer",),
|
|
45
48
|
"SeniorPartnerLimitedLiabilityPartnership": ("NameEntityOfficer",),
|
|
46
|
-
"
|
|
49
|
+
"CorporateTrustee": (1, 3, "NameEntityOfficer"),
|
|
50
|
+
"DirectorOfCorporateTrustee": ("NameEntityOfficer",),
|
|
51
|
+
"CustodianTrustee": ("NameEntityOfficer",),
|
|
52
|
+
"Trustee": (1, 20, "NameEntityOfficer",),
|
|
47
53
|
"CompanySecretary": (1, 2, "NameEntityOfficer",),
|
|
48
54
|
"CompanySecretaryDirector": (1, 2, "NameEntityOfficer",),
|
|
49
55
|
"Director": (1, 40, "NameEntityOfficer",),
|
|
@@ -60,7 +66,7 @@ COMMON_GENERIC_DIMENSIONS = {
|
|
|
60
66
|
"UnconsolidatedStructuredEntity": (1, 5, "NameUnconsolidatedStructuredEntity"),
|
|
61
67
|
"IntermediateParent": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
|
|
62
68
|
"EntityWithJointControlOrSignificantInfluence": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
|
|
63
|
-
"
|
|
69
|
+
"OtherGroupMember": (1, 8, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
|
|
64
70
|
"KeyManagementIndividualGroup": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
|
|
65
71
|
"CloseFamilyMember": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
|
|
66
72
|
"EntityControlledByKeyManagementPersonnel": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
|
|
@@ -77,6 +83,7 @@ COMMON_GENERIC_DIMENSIONS = {
|
|
|
77
83
|
"OtherPost-employmentBenefitPlan": (1, 2, "NameDefinedContributionPlan", "NameDefinedBenefitPlan"),
|
|
78
84
|
"OtherContractType": (1, 2, "DescriptionOtherContractType"),
|
|
79
85
|
"OtherDurationType": (1, 2, "DescriptionOtherContractDurationType"),
|
|
86
|
+
"OtherChannelType": (1, 2, "DescriptionOtherSalesChannelType"),
|
|
80
87
|
"SalesChannel": (1, 2, "DescriptionOtherSalesChannelType"),
|
|
81
88
|
}
|
|
82
89
|
|
|
@@ -115,33 +122,6 @@ MUST_HAVE_ONE_ITEM = {
|
|
|
115
122
|
}
|
|
116
123
|
}
|
|
117
124
|
|
|
118
|
-
GENERIC_DIMENSION_VALIDATION = {
|
|
119
|
-
# "taxonomyType": { "LocalName": (range of numbers if any, first item name, 2nd choice item name if any)
|
|
120
|
-
"ukGAAP": COMMON_GENERIC_DIMENSIONS,
|
|
121
|
-
"ukIFRS": COMMON_GENERIC_DIMENSIONS,
|
|
122
|
-
"charities": {
|
|
123
|
-
**COMMON_GENERIC_DIMENSIONS,
|
|
124
|
-
**{
|
|
125
|
-
"Trustee": (1, 20, "NameEntityOfficer"),
|
|
126
|
-
"CorporateTrustee": (1, 3, "NameEntityOfficer"),
|
|
127
|
-
"CustodianTrustee": (1, 3, "NameEntityOfficer"),
|
|
128
|
-
"Director1CorporateTrustee": ("NameEntityOfficer",),
|
|
129
|
-
"Director2CorporateTrustee": ("NameEntityOfficer",),
|
|
130
|
-
"Director3CorporateTrustee": ("NameEntityOfficer",),
|
|
131
|
-
"TrusteeTrustees": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
|
|
132
|
-
"CloseFamilyMemberTrusteeTrustees": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
|
|
133
|
-
"EntityControlledTrustees": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
|
|
134
|
-
"Activity": (1, 50, "DescriptionActivity"),
|
|
135
|
-
"MaterialFund": (1, 50, "DescriptionsMaterialFund"),
|
|
136
|
-
"LinkedCharity": (1, 5, "DescriptionActivitiesLinkedCharity"),
|
|
137
|
-
"NameGrantRecipient": (1, 50, "NameSpecificInstitutionalGrantRecipient"),
|
|
138
|
-
"ConcessionaryLoan": (1, 50, "DescriptionConcessionaryLoan"),
|
|
139
|
-
}
|
|
140
|
-
},
|
|
141
|
-
"FRS": COMMON_GENERIC_DIMENSIONS,
|
|
142
|
-
"FRS-2022": COMMON_GENERIC_DIMENSIONS
|
|
143
|
-
}
|
|
144
|
-
|
|
145
125
|
ALLOWED_IMG_MIME_TYPES = (
|
|
146
126
|
"data:image/gif;base64",
|
|
147
127
|
"data:image/jpeg;base64", "data:image/jpg;base64", # note both jpg and jpeg are in use
|
|
@@ -243,7 +223,7 @@ def validateXbrlFinally(val, *args, **kwargs):
|
|
|
243
223
|
else:
|
|
244
224
|
l = _memName
|
|
245
225
|
n = None
|
|
246
|
-
gdv =
|
|
226
|
+
gdv = GENERIC_DIMENSION_VALIDATIONS.get(l)
|
|
247
227
|
if (gdv and (n is None or
|
|
248
228
|
(isinstance(gdv[0],int) and isinstance(gdv[1],int) and n >= gdv[0] and n <= gdv[1]))):
|
|
249
229
|
gdvFacts = [f for f in gdv if isinstance(f,str)]
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
arelle/Aspect.py,sha256=Pn9I91D1os1RTVj6htuxTfRzVMhmVDtrbKvV_zy9xMI,5470
|
|
2
2
|
arelle/BetaFeatures.py,sha256=T_tPac-FiozHyYLCemt0RoHJ1JahUE71L-0tHmIRKpE,858
|
|
3
|
-
arelle/Cntlr.py,sha256=
|
|
4
|
-
arelle/CntlrCmdLine.py,sha256=
|
|
3
|
+
arelle/Cntlr.py,sha256=GvHkm1ev2hf6rWPA4g3a62YEJOWxz5lZOa2Dq1X1lnM,31721
|
|
4
|
+
arelle/CntlrCmdLine.py,sha256=St0iKu8TcMFNGcoG5L4njBA1a2N6s6LuUNbWtqVToYE,88944
|
|
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
8
|
arelle/CntlrWebMain.py,sha256=_jhosP0Pg-erutBRzTVsL0cmWVgbc6z0WIIlNO-z1N4,50712
|
|
9
|
-
arelle/CntlrWinMain.py,sha256=
|
|
9
|
+
arelle/CntlrWinMain.py,sha256=59zdQBBSZpaSI0_X2gPSMTSY6i80u4H2Yo-jGJGwZVc,98063
|
|
10
10
|
arelle/CntlrWinTooltip.py,sha256=6MzoAIfkYnNu_bl_je8n0adhwmKxAIcymkg9Tij9Z4M,7951
|
|
11
11
|
arelle/DialogAbout.py,sha256=XXzMV0fO4BQ3-l1Puirzmn7EZEdmgJg7JNYdJm1FueM,1987
|
|
12
12
|
arelle/DialogArcroleGroup.py,sha256=r81OT3LFmMkoROpFenk97oVEyQhibKZ1QgDHvMsyCl0,7547
|
|
@@ -125,7 +125,7 @@ arelle/XmlValidateConst.py,sha256=U_wN0Q-nWKwf6dKJtcu_83FXPn9c6P8JjzGA5b0w7P0,33
|
|
|
125
125
|
arelle/XmlValidateParticles.py,sha256=Mn6vhFl0ZKC_vag1mBwn1rH_x2jmlusJYqOOuxFPO2k,9231
|
|
126
126
|
arelle/XmlValidateSchema.py,sha256=6frtZOc1Yrx_5yYF6V6oHbScnglWrVbWr6xW4EHtLQI,7428
|
|
127
127
|
arelle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
|
-
arelle/_version.py,sha256=
|
|
128
|
+
arelle/_version.py,sha256=qh1yDpT2z-PpR-NJRv0w_TqdxkiOFXztPW4E-tALlsU,708
|
|
129
129
|
arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
|
|
130
130
|
arelle/api/Session.py,sha256=a71ML4FOkWxeqxQBRu6WUqkUoI4C5R6znzAQcbGR5jg,7902
|
|
131
131
|
arelle/config/creationSoftwareNames.json,sha256=5MK7XUjfDJ9OpRCCHXeOErJ1SlTBZji4WEcEOdOacx0,3128
|
|
@@ -300,7 +300,7 @@ arelle/plugin/validate/CIPC/Const.py,sha256=GSiODyiK8V9P-pV0_DPEKYAhe2wqgcYJP2Qt
|
|
|
300
300
|
arelle/plugin/validate/CIPC/__init__.py,sha256=R6KVETICUpfW--TvVkFNDo-67Kq_KpWz3my2ECkiKxM,14699
|
|
301
301
|
arelle/plugin/validate/CIPC/config.xml,sha256=4pyn40JAvQQeoRC8I046gZ4ZcmUnekX3TNfYpC5yonI,667
|
|
302
302
|
arelle/plugin/validate/DBA/DisclosureSystems.py,sha256=Dp_r-Pa3tahtCfDha2Zc97N0iyrY4Zagb8w2D9ErILg,294
|
|
303
|
-
arelle/plugin/validate/DBA/PluginValidationDataExtension.py,sha256=
|
|
303
|
+
arelle/plugin/validate/DBA/PluginValidationDataExtension.py,sha256=F_fKc811Dq7l7hH2zoC67iI3wOmZKqtEBgufoYKyhyc,7210
|
|
304
304
|
arelle/plugin/validate/DBA/ValidationPluginExtension.py,sha256=UygF7oELnPJcP6Ta0ncy3dy5fnJq-Mz6N2-gEaVhigo,48690
|
|
305
305
|
arelle/plugin/validate/DBA/__init__.py,sha256=KhmlUkqgsRtEXpu5DZBXFzv43nUTvi-0sdDNRfw5Up4,1564
|
|
306
306
|
arelle/plugin/validate/DBA/resources/config.xml,sha256=KHfo7SrjzmjHbfwIJBmESvOOjdIv4Av26BCcZxfn3Pg,875
|
|
@@ -312,7 +312,7 @@ arelle/plugin/validate/DBA/rules/tm.py,sha256=ui9oKBqlAForwkQ9kk9KBiUogTJE5pv1Rb
|
|
|
312
312
|
arelle/plugin/validate/DBA/rules/tr.py,sha256=4TootFjl0HXsKZk1XNBCyj-vnjRs4lg35hfiz_b_4wU,14684
|
|
313
313
|
arelle/plugin/validate/EBA/__init__.py,sha256=x3zXNcdSDJ3kHfL7kMs0Ve0Vs9oWbzNFVf1TK4Avmy8,45924
|
|
314
314
|
arelle/plugin/validate/EBA/config.xml,sha256=37wMVUAObK-XEqakqD8zPNog20emYt4a_yfL1AKubF8,2022
|
|
315
|
-
arelle/plugin/validate/EDINET/Constants.py,sha256=
|
|
315
|
+
arelle/plugin/validate/EDINET/Constants.py,sha256=Rdwait6p9IYxTQLhfNcyg9WhbW-_Kpg7EX2223_ty3g,8242
|
|
316
316
|
arelle/plugin/validate/EDINET/ContextRequirement.py,sha256=BejN3uz6TCSzR1qfQm-PZMbkhJlgUH9NVrY2Ux-Ph78,5217
|
|
317
317
|
arelle/plugin/validate/EDINET/ControllerPluginData.py,sha256=8FVFpqh25NaxRKWn5qlK23qD6XDUOvNXRW35O6X9hTk,11599
|
|
318
318
|
arelle/plugin/validate/EDINET/CoverItemRequirements.py,sha256=1YdzlSgc5MlUGyw81Ipv37CLxsdpSw8CO90snjgqLzw,1852
|
|
@@ -323,7 +323,7 @@ arelle/plugin/validate/EDINET/FormType.py,sha256=jFqjJACJJ4HhkY1t6Fqei0z6rgvH3Mp
|
|
|
323
323
|
arelle/plugin/validate/EDINET/ManifestInstance.py,sha256=o6BGlaQHSsn6D0VKH4zn59UscKnjTKlo99kSGfGdYlU,6910
|
|
324
324
|
arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=rFzAR8VbVcCO2IO1qp6TGWpBQd2rsOES-Ta2UOKOmDs,31309
|
|
325
325
|
arelle/plugin/validate/EDINET/ReportFolderType.py,sha256=-p_byoOLP6wAyEiPtSN2iMMl68m5vPh__hHTYgypxH8,4612
|
|
326
|
-
arelle/plugin/validate/EDINET/Statement.py,sha256=
|
|
326
|
+
arelle/plugin/validate/EDINET/Statement.py,sha256=twW0Grv4IM_zjCo425YYcdKpPPZqn9t-ROEK2y3AoQ8,9320
|
|
327
327
|
arelle/plugin/validate/EDINET/TableOfContentsBuilder.py,sha256=-TsPfIdtgOCdvUh-H8EZo3B5A63ti7rIDXHCUnt_us8,21760
|
|
328
328
|
arelle/plugin/validate/EDINET/UploadContents.py,sha256=o29mDoX48M3S2jQqrJO4ZaulltAPt4vD-qdsWTMCUPc,1196
|
|
329
329
|
arelle/plugin/validate/EDINET/ValidationPluginExtension.py,sha256=8LNqvXzNaWP54dShEjet5ely4BnM8ByCSyimKpUx3_s,2577
|
|
@@ -333,12 +333,12 @@ arelle/plugin/validate/EDINET/resources/cover-item-requirements.json,sha256=K5j2
|
|
|
333
333
|
arelle/plugin/validate/EDINET/resources/dei-requirements.csv,sha256=8ILKNn8bXbcgG9V0lc8mxorKDKEjJQWLdBQRMvbqtkI,6518
|
|
334
334
|
arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml,sha256=YXaPu-60CI2s0S-vXcLDEXCrrukEAAHyCEk0QRhrYR8,16772
|
|
335
335
|
arelle/plugin/validate/EDINET/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
336
|
-
arelle/plugin/validate/EDINET/rules/contexts.py,sha256=
|
|
337
|
-
arelle/plugin/validate/EDINET/rules/edinet.py,sha256=
|
|
336
|
+
arelle/plugin/validate/EDINET/rules/contexts.py,sha256=wEwIBPjEgWJHJrALxOV6qB1Lj_tws9ZnBT_twewn2js,21357
|
|
337
|
+
arelle/plugin/validate/EDINET/rules/edinet.py,sha256=aZ6zeUMprffP2tOw26Ch65MExdXkW2HmPxTG6GB9OTE,36707
|
|
338
338
|
arelle/plugin/validate/EDINET/rules/frta.py,sha256=wpX5zK0IfVVYZR9ELy2g_Z_F1Jzhwd9gh_KZC5ALkLg,12756
|
|
339
339
|
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=l5XHOBqyorub0LaQ7lA6oISy4oSynNFz4ilW9-Br89A,92060
|
|
340
340
|
arelle/plugin/validate/EDINET/rules/manifests.py,sha256=MoT9R_a4BzuYdQVbF7RC5wz134Ve68svSdJ3NlpO_AU,4026
|
|
341
|
-
arelle/plugin/validate/EDINET/rules/upload.py,sha256=
|
|
341
|
+
arelle/plugin/validate/EDINET/rules/upload.py,sha256=HhY7i_AdU94mEkpIoxwew4xNI9oP3HuM3EoZZl37ZjM,52911
|
|
342
342
|
arelle/plugin/validate/ESEF/Const.py,sha256=JujF_XV-_TNsxjGbF-8SQS4OOZIcJ8zhCMnr-C1O5Ho,22660
|
|
343
343
|
arelle/plugin/validate/ESEF/Dimensions.py,sha256=MOJM7vwNPEmV5cu-ZzPrhx3347ZvxgD6643OB2HRnIk,10597
|
|
344
344
|
arelle/plugin/validate/ESEF/Util.py,sha256=QH3btcGqBpr42M7WSKZLSdNXygZaZLfEiEjlxoG21jE,7950
|
|
@@ -361,11 +361,11 @@ arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=oeiHGtCvpF9oCELWV-
|
|
|
361
361
|
arelle/plugin/validate/NL/__init__.py,sha256=W-SHohiAWM7Yi77gAbt-D3vvZNAB5s1j16mHCTFta6w,3158
|
|
362
362
|
arelle/plugin/validate/NL/resources/config.xml,sha256=qBE6zywFSmemBSWonuTII5iuOCUlNb1nvkpMbsZb5PM,1853
|
|
363
363
|
arelle/plugin/validate/NL/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
364
|
-
arelle/plugin/validate/NL/rules/br_kvk.py,sha256=
|
|
364
|
+
arelle/plugin/validate/NL/rules/br_kvk.py,sha256=O_8TlrK5SItLUgLw2qx9LSXh_bPNSPHZ_PJY8Q11MOk,15779
|
|
365
365
|
arelle/plugin/validate/NL/rules/fg_nl.py,sha256=OJF2EYx4KDTdNggHiw5Trq5S5g7WGpbb7YvO6_IrrGU,10704
|
|
366
366
|
arelle/plugin/validate/NL/rules/fr_kvk.py,sha256=kYqXt45S6eM32Yg9ii7pUhOMfJaHurgYqQ73FyQALs8,8171
|
|
367
367
|
arelle/plugin/validate/NL/rules/fr_nl.py,sha256=ZoyiRsTyqTNZB_VgcdabmeNi6v7DY6jMxzaP6ppLtIU,31387
|
|
368
|
-
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=
|
|
368
|
+
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=hysgvKFIOeTHJedadAITp4Ju8GgU93OXp1yqr9TA9wg,90032
|
|
369
369
|
arelle/plugin/validate/ROS/DisclosureSystems.py,sha256=rJ81mwQDYTi6JecFZ_zhqjjz3VNQRgjHNSh0wcQWAQE,18
|
|
370
370
|
arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=9_dxO20B3TRVElv0jZ_YW7tZbG3HihzRowg7W-397is,4379
|
|
371
371
|
arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=U5EtwSW3eGvvvgVk9JgcUueJn604a4J6C2Fsk_CHQy0,874
|
|
@@ -375,7 +375,7 @@ arelle/plugin/validate/ROS/resources/config.xml,sha256=HXWume5HlrAqOx5AtiWWqgADb
|
|
|
375
375
|
arelle/plugin/validate/ROS/rules/__init__.py,sha256=wW7BUAIb7sRkOxC1Amc_ZKrz03FM-Qh1TyZe6wxYaAU,1567
|
|
376
376
|
arelle/plugin/validate/ROS/rules/ros.py,sha256=CRZkZfsKe4y1B-PDkazQ_cD5LRZBk1GJjTscCZXXYUI,21173
|
|
377
377
|
arelle/plugin/validate/UK/ValidateUK.py,sha256=UwNR3mhFzWNn6RKLSiC7j3LlMlConOx-9gWGovKamHA,61035
|
|
378
|
-
arelle/plugin/validate/UK/__init__.py,sha256=
|
|
378
|
+
arelle/plugin/validate/UK/__init__.py,sha256=tKAcsYzwopWbhY863sZE7kmOEaQbAGSABcAouhzTPcc,26589
|
|
379
379
|
arelle/plugin/validate/UK/config.xml,sha256=mUFhWDfBzGTn7v0ZSmf4HaweQTMJh_4ZcJmD9mzCHrA,1547
|
|
380
380
|
arelle/plugin/validate/UK/consistencyChecksByName.json,sha256=BgB9YAWzmcsX-_rU74RBkABwEsS75vrMlwBHsYCz2R0,25247
|
|
381
381
|
arelle/plugin/validate/UK/hmrc-taxonomies.xml,sha256=3lR-wb2sooAddQkVqqRzG_VqLuHq_MQ8kIaXAQs1KVk,9623
|
|
@@ -688,9 +688,9 @@ arelle/utils/validate/ValidationUtil.py,sha256=hghMQoNuC3ocs6kkNtIQPhh8QwzubwHGt
|
|
|
688
688
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
689
689
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
690
690
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
691
|
-
arelle_release-2.37.
|
|
692
|
-
arelle_release-2.37.
|
|
693
|
-
arelle_release-2.37.
|
|
694
|
-
arelle_release-2.37.
|
|
695
|
-
arelle_release-2.37.
|
|
696
|
-
arelle_release-2.37.
|
|
691
|
+
arelle_release-2.37.68.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
692
|
+
arelle_release-2.37.68.dist-info/METADATA,sha256=VgnB8qmdhdmMFTbU4XVY6nOvBJiUpSDW5WjRTDkr8ak,9355
|
|
693
|
+
arelle_release-2.37.68.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
694
|
+
arelle_release-2.37.68.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
695
|
+
arelle_release-2.37.68.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
|
|
696
|
+
arelle_release-2.37.68.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|