arelle-release 2.37.46__py3-none-any.whl → 2.38.0__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.
- arelle/BetaFeatures.py +0 -21
- arelle/Cntlr.py +15 -8
- arelle/CntlrCmdLine.py +121 -56
- arelle/CntlrWinMain.py +143 -70
- arelle/DialogFind.py +1 -1
- arelle/DialogPluginManager.py +6 -4
- arelle/DisclosureSystem.py +7 -0
- arelle/ErrorManager.py +21 -6
- arelle/FileSource.py +11 -4
- arelle/FunctionIxt.py +16 -11
- arelle/HtmlUtil.py +5 -4
- arelle/LeiUtil.py +63 -43
- arelle/ModelDocument.py +20 -15
- arelle/ModelDtsObject.py +8 -0
- arelle/ModelInstanceObject.py +1 -1
- arelle/ModelObject.py +16 -18
- arelle/ModelObjectFactory.py +35 -17
- arelle/ModelXbrl.py +28 -11
- arelle/PluginManager.py +130 -105
- arelle/RuntimeOptions.py +1 -0
- arelle/UrlUtil.py +14 -0
- arelle/Validate.py +17 -12
- arelle/ValidateDuplicateFacts.py +3 -1
- arelle/ValidateFileSource.py +38 -0
- arelle/ValidateFilingText.py +3 -3
- arelle/ValidateXbrl.py +5 -2
- arelle/ValidateXbrlCalcs.py +210 -186
- arelle/ValidateXbrlDTS.py +1 -1
- arelle/ViewFile.py +1 -0
- arelle/ViewFileFactTable.py +2 -2
- arelle/ViewWinDTS.py +4 -1
- arelle/WebCache.py +28 -24
- arelle/XbrlConst.py +22 -0
- arelle/XmlUtil.py +16 -21
- arelle/XmlValidate.py +6 -9
- arelle/_version.py +16 -3
- arelle/api/Session.py +11 -2
- arelle/config/disclosuresystems.xsd +2 -0
- arelle/config/rosettaEntitlements.plist +8 -0
- arelle/conformance/CSVTestcaseLoader.py +1 -1
- arelle/formula/XPathContext.py +3 -3
- arelle/logging/formatters/LogFormatter.py +3 -1
- arelle/packages/report/ReportPackage.py +26 -13
- arelle/packages/report/ReportPackageConst.py +0 -1
- arelle/plugin/inlineXbrlDocumentSet.py +19 -5
- arelle/plugin/validate/DBA/DisclosureSystems.py +19 -1
- arelle/plugin/validate/DBA/PluginValidationDataExtension.py +2 -4
- arelle/plugin/validate/DBA/ValidationPluginExtension.py +2 -1
- arelle/plugin/validate/DBA/resources/config.xml +5 -0
- arelle/plugin/validate/DBA/rules/__init__.py +2 -2
- arelle/plugin/validate/DBA/rules/fr.py +19 -2
- arelle/plugin/validate/DBA/rules/tc.py +2 -0
- arelle/plugin/validate/DBA/rules/th.py +6 -0
- arelle/plugin/validate/DBA/rules/tm.py +18 -5
- arelle/plugin/validate/DBA/rules/tr.py +11 -5
- arelle/plugin/validate/EDINET/Constants.py +193 -9
- arelle/plugin/validate/EDINET/ContextRequirement.py +58 -0
- arelle/plugin/validate/EDINET/ControllerPluginData.py +220 -1
- arelle/plugin/validate/EDINET/CoverItemRequirements.py +42 -0
- arelle/plugin/validate/EDINET/DeiRequirements.py +118 -0
- arelle/plugin/validate/EDINET/FilingFormat.py +275 -0
- arelle/plugin/validate/EDINET/FormType.py +134 -0
- arelle/plugin/validate/EDINET/ManifestInstance.py +72 -5
- arelle/plugin/validate/EDINET/NamespaceConfig.py +50 -0
- arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +493 -132
- arelle/plugin/validate/EDINET/{InstanceType.py → ReportFolderType.py} +72 -15
- arelle/plugin/validate/EDINET/Statement.py +139 -0
- arelle/plugin/validate/EDINET/TableOfContentsBuilder.py +595 -0
- arelle/plugin/validate/EDINET/UploadContents.py +48 -0
- arelle/plugin/validate/EDINET/ValidationPluginExtension.py +20 -2
- arelle/plugin/validate/EDINET/__init__.py +31 -6
- arelle/plugin/validate/EDINET/resources/config.xml +8 -1
- arelle/plugin/validate/EDINET/resources/cover-item-requirements.json +793 -0
- arelle/plugin/validate/EDINET/resources/dei-requirements.csv +27 -0
- arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml +2 -0
- arelle/plugin/validate/EDINET/rules/contexts.py +375 -14
- arelle/plugin/validate/EDINET/rules/edinet.py +1934 -45
- arelle/plugin/validate/EDINET/rules/frta.py +122 -3
- arelle/plugin/validate/EDINET/rules/gfm.py +1907 -11
- arelle/plugin/validate/EDINET/rules/upload.py +989 -141
- arelle/plugin/validate/ESEF/Const.py +3 -1
- arelle/plugin/validate/ESEF/ESEF_2021/DTS.py +5 -0
- arelle/plugin/validate/ESEF/ESEF_2021/Image.py +2 -2
- arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +23 -20
- arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +47 -14
- arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +100 -25
- arelle/plugin/validate/ESEF/__init__.py +20 -6
- arelle/plugin/validate/ESEF/resources/authority-validations.json +76 -9
- arelle/plugin/validate/ESEF/resources/config.xml +20 -0
- arelle/plugin/validate/NL/DisclosureSystems.py +22 -0
- arelle/plugin/validate/NL/PluginValidationDataExtension.py +27 -9
- arelle/plugin/validate/NL/ValidationPluginExtension.py +51 -7
- arelle/plugin/validate/NL/resources/config.xml +18 -0
- arelle/plugin/validate/NL/rules/br_kvk.py +17 -61
- arelle/plugin/validate/NL/rules/fg_nl.py +7 -38
- arelle/plugin/validate/NL/rules/fr_kvk.py +7 -42
- arelle/plugin/validate/NL/rules/fr_nl.py +31 -147
- arelle/plugin/validate/NL/rules/nl_kvk.py +142 -28
- arelle/plugin/validate/ROS/PluginValidationDataExtension.py +2 -0
- arelle/plugin/validate/ROS/ValidationPluginExtension.py +4 -1
- arelle/plugin/validate/ROS/rules/ros.py +41 -9
- arelle/plugin/validate/UK/ValidateUK.py +130 -66
- arelle/plugin/validate/UK/__init__.py +89 -103
- arelle/utils/EntryPointDetection.py +79 -13
- arelle/utils/PluginHooks.py +125 -0
- arelle/utils/validate/ESEFImage.py +6 -6
- arelle/utils/validate/Validation.py +18 -0
- arelle/utils/validate/ValidationPlugin.py +76 -11
- arelle/utils/validate/ValidationUtil.py +35 -3
- {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/METADATA +30 -20
- {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/RECORD +115 -191
- {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/licenses/LICENSE.md +0 -3
- arelle/archive/CustomLogger.py +0 -43
- arelle/archive/LoadEFMvalidate.py +0 -32
- arelle/archive/LoadSavePreLbCsv.py +0 -26
- arelle/archive/LoadValidate.cs +0 -31
- arelle/archive/LoadValidate.py +0 -36
- arelle/archive/LoadValidateCmdLine.java +0 -69
- arelle/archive/LoadValidatePostedZip.java +0 -57
- arelle/archive/LoadValidateWebService.java +0 -34
- arelle/archive/SaveTableToExelle.py +0 -140
- arelle/archive/TR3toTR4.py +0 -88
- arelle/archive/plugin/ESEF_2022/__init__.py +0 -47
- arelle/archive/plugin/bigInstance.py +0 -394
- arelle/archive/plugin/cmdWebServerExtension.py +0 -43
- arelle/archive/plugin/crashTest.py +0 -38
- arelle/archive/plugin/functionsXmlCreation.py +0 -106
- arelle/archive/plugin/hello_i18n.pot +0 -26
- arelle/archive/plugin/hello_i18n.py +0 -32
- arelle/archive/plugin/importTestChild1.py +0 -21
- arelle/archive/plugin/importTestChild2.py +0 -22
- arelle/archive/plugin/importTestGrandchild1.py +0 -21
- arelle/archive/plugin/importTestGrandchild2.py +0 -21
- arelle/archive/plugin/importTestImported1.py +0 -23
- arelle/archive/plugin/importTestImported11.py +0 -22
- arelle/archive/plugin/importTestParent.py +0 -48
- arelle/archive/plugin/instanceInfo.py +0 -306
- arelle/archive/plugin/loadFromOIM-2018.py +0 -1282
- arelle/archive/plugin/locale/fr/LC_MESSAGES/hello_i18n.po +0 -25
- arelle/archive/plugin/objectmaker.py +0 -285
- arelle/archive/plugin/packagedImportTest/__init__.py +0 -47
- arelle/archive/plugin/packagedImportTest/importTestChild1.py +0 -21
- arelle/archive/plugin/packagedImportTest/importTestChild2.py +0 -22
- arelle/archive/plugin/packagedImportTest/importTestGrandchild1.py +0 -21
- arelle/archive/plugin/packagedImportTest/importTestGrandchild2.py +0 -21
- arelle/archive/plugin/packagedImportTest/importTestImported1.py +0 -24
- arelle/archive/plugin/packagedImportTest/importTestImported11.py +0 -21
- arelle/archive/plugin/packagedImportTest/subdir/importTestImported111.py +0 -21
- arelle/archive/plugin/packagedImportTest/subdir/subsubdir/importTestImported1111.py +0 -21
- arelle/archive/plugin/sakaCalendar.py +0 -215
- arelle/archive/plugin/saveInstanceInfoset.py +0 -121
- arelle/archive/plugin/sphinx/FormulaGenerator.py +0 -823
- arelle/archive/plugin/sphinx/SphinxContext.py +0 -404
- arelle/archive/plugin/sphinx/SphinxEvaluator.py +0 -783
- arelle/archive/plugin/sphinx/SphinxMethods.py +0 -1287
- arelle/archive/plugin/sphinx/SphinxParser.py +0 -1093
- arelle/archive/plugin/sphinx/SphinxValidator.py +0 -163
- arelle/archive/plugin/sphinx/US-GAAP Ratios Example.xsr +0 -52
- arelle/archive/plugin/sphinx/__init__.py +0 -285
- arelle/archive/plugin/streamingExtensions.py +0 -335
- arelle/archive/plugin/updateTableLB.py +0 -242
- arelle/archive/plugin/validate/SBRnl/CustomLoader.py +0 -19
- arelle/archive/plugin/validate/SBRnl/DTS.py +0 -305
- arelle/archive/plugin/validate/SBRnl/Dimensions.py +0 -357
- arelle/archive/plugin/validate/SBRnl/Document.py +0 -799
- arelle/archive/plugin/validate/SBRnl/Filing.py +0 -467
- arelle/archive/plugin/validate/SBRnl/__init__.py +0 -75
- arelle/archive/plugin/validate/SBRnl/config.xml +0 -26
- arelle/archive/plugin/validate/SBRnl/sbr-nl-taxonomies.xml +0 -754
- arelle/archive/plugin/validate/USBestPractices.py +0 -570
- arelle/archive/plugin/validate/USCorpAction.py +0 -557
- arelle/archive/plugin/validate/USSecTagging.py +0 -337
- arelle/archive/plugin/validate/XDC/__init__.py +0 -77
- arelle/archive/plugin/validate/XDC/config.xml +0 -20
- arelle/archive/plugin/validate/XFsyntax/__init__.py +0 -64
- arelle/archive/plugin/validate/XFsyntax/xf.py +0 -2227
- arelle/archive/plugin/validate/calc2.py +0 -536
- arelle/archive/plugin/validateSchemaLxml.py +0 -156
- arelle/archive/plugin/validateTableInfoset.py +0 -52
- arelle/archive/us-gaap-dei-docType-extraction-frm.xml +0 -90
- arelle/archive/us-gaap-dei-ratio-cash-frm.xml +0 -150
- arelle/examples/plugin/formulaSuiteConverter.py +0 -212
- arelle/examples/plugin/functionsCustom.py +0 -59
- arelle/examples/plugin/hello_dolly.py +0 -64
- arelle/examples/plugin/multi.py +0 -58
- arelle/examples/plugin/rssSaveOim.py +0 -96
- arelle/examples/plugin/validate/XYZ/DisclosureSystems.py +0 -2
- arelle/examples/plugin/validate/XYZ/PluginValidationDataExtension.py +0 -10
- arelle/examples/plugin/validate/XYZ/ValidationPluginExtension.py +0 -49
- arelle/examples/plugin/validate/XYZ/__init__.py +0 -75
- arelle/examples/plugin/validate/XYZ/resources/config.xml +0 -16
- arelle/examples/plugin/validate/XYZ/rules/__init__.py +0 -0
- arelle/examples/plugin/validate/XYZ/rules/rules01.py +0 -110
- arelle/examples/plugin/validate/XYZ/rules/rules02.py +0 -59
- arelle/model/CommentBase.py +0 -9
- arelle/model/ElementBase.py +0 -11
- arelle/model/PIBase.py +0 -10
- arelle/model/__init__.py +0 -15
- arelle/scripts-macOS/startWebServer.command +0 -3
- arelle/scripts-unix/startWebServer.sh +0 -1
- arelle/scripts-windows/startWebServer.bat +0 -5
- {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.46.dist-info → arelle_release-2.38.0.dist-info}/top_level.txt +0 -0
|
@@ -3,6 +3,7 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
+
from arelle.Cntlr import Cntlr
|
|
6
7
|
from arelle.ModelValue import qname
|
|
7
8
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
8
9
|
from arelle.typing import TypeGetText
|
|
@@ -26,7 +27,7 @@ REQUIRED_DISCLOSURE_OF_EQUITY_FACTS = 2
|
|
|
26
27
|
|
|
27
28
|
|
|
28
29
|
class ValidationPluginExtension(ValidationPlugin):
|
|
29
|
-
def newPluginData(self, validateXbrl: ValidateXbrl) -> PluginValidationDataExtension:
|
|
30
|
+
def newPluginData(self, cntlr: Cntlr, validateXbrl: ValidateXbrl | None) -> PluginValidationDataExtension:
|
|
30
31
|
return PluginValidationDataExtension(
|
|
31
32
|
self.name,
|
|
32
33
|
accountingPolicyConceptQns=frozenset([
|
|
@@ -14,7 +14,7 @@ from arelle.ModelInstanceObject import ModelFact
|
|
|
14
14
|
from arelle.ModelValue import QName
|
|
15
15
|
from arelle.ModelXbrl import ModelXbrl
|
|
16
16
|
from arelle.typing import TypeGetText
|
|
17
|
-
from arelle.UrlUtil import
|
|
17
|
+
from arelle.UrlUtil import isExternalUrl
|
|
18
18
|
from arelle.utils.Contexts import ContextHashKey
|
|
19
19
|
from arelle.utils.validate.Validation import Validation
|
|
20
20
|
from arelle.ValidateFilingText import parseImageDataURL
|
|
@@ -73,7 +73,7 @@ def errorOnForbiddenImage(
|
|
|
73
73
|
"""
|
|
74
74
|
invalidImages = []
|
|
75
75
|
for image in images:
|
|
76
|
-
if
|
|
76
|
+
if isExternalUrl(image):
|
|
77
77
|
invalidImages.append(image)
|
|
78
78
|
elif image.startswith("data:image"):
|
|
79
79
|
dataURLParts = parseImageDataURL(image)
|
|
@@ -20,12 +20,13 @@ from . import errorOnDateFactComparison, getFactsWithDimension, getFactsGroupedB
|
|
|
20
20
|
minimumRequiredFactsFound, consolidatedDimensionExists
|
|
21
21
|
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
22
22
|
from ..ValidationPluginExtension import DANISH_CURRENCY_ID, ROUNDING_MARGIN, PERSONNEL_EXPENSE_THRESHOLD, REQUIRED_DISCLOSURE_OF_EQUITY_FACTS, REQUIRED_STATEMENT_OF_CHANGES_IN_EQUITY_FACTS
|
|
23
|
-
from ..DisclosureSystems import
|
|
23
|
+
from ..DisclosureSystems import ARL_MULTI_TARGET_DISCLOSURE_SYSTEMS, STAND_ALONE_DISCLOSURE_SYSTEMS, ARL_DISCLOSURE_SYSTEMS
|
|
24
24
|
|
|
25
25
|
_: TypeGetText
|
|
26
26
|
|
|
27
27
|
@validation(
|
|
28
28
|
hook=ValidationHook.XBRL_FINALLY,
|
|
29
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
29
30
|
)
|
|
30
31
|
def rule_fr1(
|
|
31
32
|
pluginData: PluginValidationDataExtension,
|
|
@@ -52,6 +53,7 @@ def rule_fr1(
|
|
|
52
53
|
|
|
53
54
|
@validation(
|
|
54
55
|
hook=ValidationHook.XBRL_FINALLY,
|
|
56
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
55
57
|
)
|
|
56
58
|
def rule_fr7(
|
|
57
59
|
pluginData: PluginValidationDataExtension,
|
|
@@ -108,6 +110,7 @@ def rule_fr20(
|
|
|
108
110
|
|
|
109
111
|
@validation(
|
|
110
112
|
hook=ValidationHook.XBRL_FINALLY,
|
|
113
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
111
114
|
)
|
|
112
115
|
def rule_fr24(
|
|
113
116
|
pluginData: PluginValidationDataExtension,
|
|
@@ -143,6 +146,7 @@ def rule_fr24(
|
|
|
143
146
|
|
|
144
147
|
@validation(
|
|
145
148
|
hook=ValidationHook.XBRL_FINALLY,
|
|
149
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
146
150
|
)
|
|
147
151
|
def rule_fr25(
|
|
148
152
|
pluginData: PluginValidationDataExtension,
|
|
@@ -302,6 +306,7 @@ def rule_fr35(
|
|
|
302
306
|
|
|
303
307
|
@validation(
|
|
304
308
|
hook=ValidationHook.XBRL_FINALLY,
|
|
309
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
305
310
|
)
|
|
306
311
|
def rule_fr36(
|
|
307
312
|
pluginData: PluginValidationDataExtension,
|
|
@@ -329,6 +334,7 @@ def rule_fr36(
|
|
|
329
334
|
|
|
330
335
|
@validation(
|
|
331
336
|
hook=ValidationHook.XBRL_FINALLY,
|
|
337
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
332
338
|
)
|
|
333
339
|
def rule_fr37(
|
|
334
340
|
pluginData: PluginValidationDataExtension,
|
|
@@ -468,6 +474,7 @@ def rule_fr52(
|
|
|
468
474
|
|
|
469
475
|
@validation(
|
|
470
476
|
hook=ValidationHook.XBRL_FINALLY,
|
|
477
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
471
478
|
)
|
|
472
479
|
def rule_fr53(
|
|
473
480
|
pluginData: PluginValidationDataExtension,
|
|
@@ -770,6 +777,7 @@ def rule_fr57(
|
|
|
770
777
|
|
|
771
778
|
@validation(
|
|
772
779
|
hook=ValidationHook.XBRL_FINALLY,
|
|
780
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
773
781
|
)
|
|
774
782
|
def rule_fr58(
|
|
775
783
|
pluginData: PluginValidationDataExtension,
|
|
@@ -805,6 +813,7 @@ def rule_fr58(
|
|
|
805
813
|
|
|
806
814
|
@validation(
|
|
807
815
|
hook=ValidationHook.XBRL_FINALLY,
|
|
816
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
808
817
|
)
|
|
809
818
|
def rule_fr59(
|
|
810
819
|
pluginData: PluginValidationDataExtension,
|
|
@@ -934,6 +943,7 @@ def rule_fr71(
|
|
|
934
943
|
|
|
935
944
|
@validation(
|
|
936
945
|
hook=ValidationHook.XBRL_FINALLY,
|
|
946
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
937
947
|
)
|
|
938
948
|
def rule_fr72(
|
|
939
949
|
pluginData: PluginValidationDataExtension,
|
|
@@ -973,6 +983,7 @@ def rule_fr72(
|
|
|
973
983
|
|
|
974
984
|
@validation(
|
|
975
985
|
hook=ValidationHook.XBRL_FINALLY,
|
|
986
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
976
987
|
)
|
|
977
988
|
def rule_fr73(
|
|
978
989
|
pluginData: PluginValidationDataExtension,
|
|
@@ -1006,6 +1017,7 @@ def rule_fr73(
|
|
|
1006
1017
|
|
|
1007
1018
|
@validation(
|
|
1008
1019
|
hook=ValidationHook.XBRL_FINALLY,
|
|
1020
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
1009
1021
|
)
|
|
1010
1022
|
def rule_fr74(
|
|
1011
1023
|
pluginData: PluginValidationDataExtension,
|
|
@@ -1146,6 +1158,7 @@ def rule_fr77(
|
|
|
1146
1158
|
|
|
1147
1159
|
@validation(
|
|
1148
1160
|
hook=ValidationHook.XBRL_FINALLY,
|
|
1161
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
1149
1162
|
)
|
|
1150
1163
|
def rule_fr81(
|
|
1151
1164
|
pluginData: PluginValidationDataExtension,
|
|
@@ -1171,7 +1184,7 @@ def rule_fr81(
|
|
|
1171
1184
|
|
|
1172
1185
|
@validation(
|
|
1173
1186
|
hook=ValidationHook.XBRL_FINALLY,
|
|
1174
|
-
disclosureSystems=
|
|
1187
|
+
disclosureSystems=ARL_MULTI_TARGET_DISCLOSURE_SYSTEMS,
|
|
1175
1188
|
)
|
|
1176
1189
|
def rule_fr82(
|
|
1177
1190
|
pluginData: PluginValidationDataExtension,
|
|
@@ -1215,6 +1228,7 @@ def rule_fr83(
|
|
|
1215
1228
|
|
|
1216
1229
|
@validation(
|
|
1217
1230
|
hook=ValidationHook.XBRL_FINALLY,
|
|
1231
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
1218
1232
|
)
|
|
1219
1233
|
def rule_fr87(
|
|
1220
1234
|
pluginData: PluginValidationDataExtension,
|
|
@@ -1251,6 +1265,7 @@ def rule_fr87(
|
|
|
1251
1265
|
|
|
1252
1266
|
@validation(
|
|
1253
1267
|
hook=ValidationHook.XBRL_FINALLY,
|
|
1268
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
1254
1269
|
)
|
|
1255
1270
|
def rule_fr89(
|
|
1256
1271
|
pluginData: PluginValidationDataExtension,
|
|
@@ -1301,6 +1316,7 @@ def rule_fr89(
|
|
|
1301
1316
|
|
|
1302
1317
|
@validation(
|
|
1303
1318
|
hook=ValidationHook.XBRL_FINALLY,
|
|
1319
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
1304
1320
|
)
|
|
1305
1321
|
def rule_fr91(
|
|
1306
1322
|
pluginData: PluginValidationDataExtension,
|
|
@@ -1331,6 +1347,7 @@ def rule_fr91(
|
|
|
1331
1347
|
|
|
1332
1348
|
@validation(
|
|
1333
1349
|
hook=ValidationHook.XBRL_FINALLY,
|
|
1350
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
1334
1351
|
)
|
|
1335
1352
|
def rule_fr92(
|
|
1336
1353
|
pluginData: PluginValidationDataExtension,
|
|
@@ -13,11 +13,13 @@ from arelle.utils.validate.Decorator import validation
|
|
|
13
13
|
from arelle.utils.validate.Validation import Validation
|
|
14
14
|
from arelle.XmlValidateConst import VALID
|
|
15
15
|
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
16
|
+
from ..DisclosureSystems import ARL_DISCLOSURE_SYSTEMS
|
|
16
17
|
|
|
17
18
|
_: TypeGetText
|
|
18
19
|
|
|
19
20
|
@validation(
|
|
20
21
|
hook=ValidationHook.XBRL_FINALLY,
|
|
22
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS,
|
|
21
23
|
)
|
|
22
24
|
def rule_tc02(
|
|
23
25
|
pluginData: PluginValidationDataExtension,
|
|
@@ -14,12 +14,14 @@ from arelle.utils.validate.Decorator import validation
|
|
|
14
14
|
from arelle.utils.validate.Validation import Validation
|
|
15
15
|
from arelle.XmlValidateConst import VALID
|
|
16
16
|
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
17
|
+
from ..DisclosureSystems import ALL_DISCLOSURE_SYSTEMS
|
|
17
18
|
|
|
18
19
|
_: TypeGetText
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
@validation(
|
|
22
23
|
hook=ValidationHook.XBRL_FINALLY,
|
|
24
|
+
disclosureSystems=ALL_DISCLOSURE_SYSTEMS
|
|
23
25
|
)
|
|
24
26
|
def rule_th01(
|
|
25
27
|
pluginData: PluginValidationDataExtension,
|
|
@@ -49,6 +51,7 @@ def rule_th01(
|
|
|
49
51
|
|
|
50
52
|
@validation(
|
|
51
53
|
hook=ValidationHook.XBRL_FINALLY,
|
|
54
|
+
disclosureSystems=ALL_DISCLOSURE_SYSTEMS
|
|
52
55
|
)
|
|
53
56
|
def rule_th05 (
|
|
54
57
|
pluginData: PluginValidationDataExtension,
|
|
@@ -71,6 +74,7 @@ def rule_th05 (
|
|
|
71
74
|
|
|
72
75
|
@validation(
|
|
73
76
|
hook=ValidationHook.XBRL_FINALLY,
|
|
77
|
+
disclosureSystems=ALL_DISCLOSURE_SYSTEMS
|
|
74
78
|
)
|
|
75
79
|
def rule_th06 (
|
|
76
80
|
pluginData: PluginValidationDataExtension,
|
|
@@ -95,6 +99,7 @@ def rule_th06 (
|
|
|
95
99
|
|
|
96
100
|
@validation(
|
|
97
101
|
hook=ValidationHook.XBRL_FINALLY,
|
|
102
|
+
disclosureSystems=ALL_DISCLOSURE_SYSTEMS
|
|
98
103
|
)
|
|
99
104
|
def rule_th10 (
|
|
100
105
|
pluginData: PluginValidationDataExtension,
|
|
@@ -143,6 +148,7 @@ def rule_th10 (
|
|
|
143
148
|
|
|
144
149
|
@validation(
|
|
145
150
|
hook=ValidationHook.XBRL_FINALLY,
|
|
151
|
+
disclosureSystems=ALL_DISCLOSURE_SYSTEMS
|
|
146
152
|
)
|
|
147
153
|
def rule_th14 (
|
|
148
154
|
pluginData: PluginValidationDataExtension,
|
|
@@ -3,26 +3,24 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
-
import datetime
|
|
7
|
-
import decimal
|
|
8
|
-
import itertools
|
|
9
6
|
from collections.abc import Iterable
|
|
10
|
-
from typing import Any
|
|
7
|
+
from typing import Any
|
|
11
8
|
|
|
12
9
|
from arelle.typing import TypeGetText
|
|
13
10
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
14
11
|
from arelle.utils.PluginHooks import ValidationHook
|
|
15
12
|
from arelle.utils.validate.Decorator import validation
|
|
16
13
|
from arelle.utils.validate.Validation import Validation
|
|
17
|
-
from arelle.XmlValidateConst import VALID
|
|
18
14
|
from . import errorOnRequiredFact, errorOnMultipleFacts
|
|
19
15
|
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
16
|
+
from ..DisclosureSystems import ALL_DISCLOSURE_SYSTEMS, ARL_DISCLOSURE_SYSTEMS
|
|
20
17
|
|
|
21
18
|
_: TypeGetText
|
|
22
19
|
|
|
23
20
|
|
|
24
21
|
@validation(
|
|
25
22
|
hook=ValidationHook.XBRL_FINALLY,
|
|
23
|
+
disclosureSystems=ALL_DISCLOSURE_SYSTEMS
|
|
26
24
|
)
|
|
27
25
|
def rule_tm12(
|
|
28
26
|
pluginData: PluginValidationDataExtension,
|
|
@@ -43,6 +41,7 @@ def rule_tm12(
|
|
|
43
41
|
|
|
44
42
|
@validation(
|
|
45
43
|
hook=ValidationHook.XBRL_FINALLY,
|
|
44
|
+
disclosureSystems=ALL_DISCLOSURE_SYSTEMS
|
|
46
45
|
)
|
|
47
46
|
def rule_tm13(
|
|
48
47
|
pluginData: PluginValidationDataExtension,
|
|
@@ -58,6 +57,7 @@ def rule_tm13(
|
|
|
58
57
|
|
|
59
58
|
@validation(
|
|
60
59
|
hook=ValidationHook.XBRL_FINALLY,
|
|
60
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
61
61
|
)
|
|
62
62
|
def rule_tm16(
|
|
63
63
|
pluginData: PluginValidationDataExtension,
|
|
@@ -73,6 +73,7 @@ def rule_tm16(
|
|
|
73
73
|
|
|
74
74
|
@validation(
|
|
75
75
|
hook=ValidationHook.XBRL_FINALLY,
|
|
76
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
76
77
|
)
|
|
77
78
|
def rule_tm18(
|
|
78
79
|
pluginData: PluginValidationDataExtension,
|
|
@@ -102,6 +103,7 @@ def rule_tm18(
|
|
|
102
103
|
|
|
103
104
|
@validation(
|
|
104
105
|
hook=ValidationHook.XBRL_FINALLY,
|
|
106
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
105
107
|
)
|
|
106
108
|
def rule_tm20(
|
|
107
109
|
pluginData: PluginValidationDataExtension,
|
|
@@ -131,6 +133,7 @@ def rule_tm20(
|
|
|
131
133
|
|
|
132
134
|
@validation(
|
|
133
135
|
hook=ValidationHook.XBRL_FINALLY,
|
|
136
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
134
137
|
)
|
|
135
138
|
def rule_tm22(
|
|
136
139
|
pluginData: PluginValidationDataExtension,
|
|
@@ -146,6 +149,7 @@ def rule_tm22(
|
|
|
146
149
|
|
|
147
150
|
@validation(
|
|
148
151
|
hook=ValidationHook.XBRL_FINALLY,
|
|
152
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
149
153
|
)
|
|
150
154
|
def rule_tm24(
|
|
151
155
|
pluginData: PluginValidationDataExtension,
|
|
@@ -161,6 +165,7 @@ def rule_tm24(
|
|
|
161
165
|
|
|
162
166
|
@validation(
|
|
163
167
|
hook=ValidationHook.XBRL_FINALLY,
|
|
168
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
164
169
|
)
|
|
165
170
|
def rule_tm25(
|
|
166
171
|
pluginData: PluginValidationDataExtension,
|
|
@@ -181,6 +186,7 @@ def rule_tm25(
|
|
|
181
186
|
|
|
182
187
|
@validation(
|
|
183
188
|
hook=ValidationHook.XBRL_FINALLY,
|
|
189
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
184
190
|
)
|
|
185
191
|
def rule_tm26(
|
|
186
192
|
pluginData: PluginValidationDataExtension,
|
|
@@ -196,6 +202,7 @@ def rule_tm26(
|
|
|
196
202
|
|
|
197
203
|
@validation(
|
|
198
204
|
hook=ValidationHook.XBRL_FINALLY,
|
|
205
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
199
206
|
)
|
|
200
207
|
def rule_tm27(
|
|
201
208
|
pluginData: PluginValidationDataExtension,
|
|
@@ -216,6 +223,7 @@ def rule_tm27(
|
|
|
216
223
|
|
|
217
224
|
@validation(
|
|
218
225
|
hook=ValidationHook.XBRL_FINALLY,
|
|
226
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
219
227
|
)
|
|
220
228
|
def rule_tm28(
|
|
221
229
|
pluginData: PluginValidationDataExtension,
|
|
@@ -231,6 +239,7 @@ def rule_tm28(
|
|
|
231
239
|
|
|
232
240
|
@validation(
|
|
233
241
|
hook=ValidationHook.XBRL_FINALLY,
|
|
242
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
234
243
|
)
|
|
235
244
|
def rule_tm29(
|
|
236
245
|
pluginData: PluginValidationDataExtension,
|
|
@@ -253,6 +262,7 @@ def rule_tm29(
|
|
|
253
262
|
|
|
254
263
|
@validation(
|
|
255
264
|
hook=ValidationHook.XBRL_FINALLY,
|
|
265
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
256
266
|
)
|
|
257
267
|
def rule_tm30(
|
|
258
268
|
pluginData: PluginValidationDataExtension,
|
|
@@ -268,6 +278,7 @@ def rule_tm30(
|
|
|
268
278
|
|
|
269
279
|
@validation(
|
|
270
280
|
hook=ValidationHook.XBRL_FINALLY,
|
|
281
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
271
282
|
)
|
|
272
283
|
def rule_tm31(
|
|
273
284
|
pluginData: PluginValidationDataExtension,
|
|
@@ -293,6 +304,7 @@ def rule_tm31(
|
|
|
293
304
|
|
|
294
305
|
@validation(
|
|
295
306
|
hook=ValidationHook.XBRL_FINALLY,
|
|
307
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
296
308
|
)
|
|
297
309
|
def rule_tm32(
|
|
298
310
|
pluginData: PluginValidationDataExtension,
|
|
@@ -323,6 +335,7 @@ def rule_tm32(
|
|
|
323
335
|
|
|
324
336
|
@validation(
|
|
325
337
|
hook=ValidationHook.XBRL_FINALLY,
|
|
338
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
326
339
|
)
|
|
327
340
|
def rule_tm33(
|
|
328
341
|
pluginData: PluginValidationDataExtension,
|
|
@@ -19,13 +19,15 @@ from arelle.XmlValidateConst import VALID
|
|
|
19
19
|
from . import lookup_namespaced_facts, errorOnForbiddenImage
|
|
20
20
|
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
21
21
|
from ..ValidationPluginExtension import NAMESPACE_GSD
|
|
22
|
-
from ..DisclosureSystems import
|
|
22
|
+
from ..DisclosureSystems import (ARL_MULTI_TARGET_DISCLOSURE_SYSTEMS, STAND_ALONE_DISCLOSURE_SYSTEMS,
|
|
23
|
+
ALL_DISCLOSURE_SYSTEMS, ARL_DISCLOSURE_SYSTEMS)
|
|
23
24
|
|
|
24
25
|
_: TypeGetText
|
|
25
26
|
|
|
26
27
|
|
|
27
28
|
@validation(
|
|
28
29
|
hook=ValidationHook.XBRL_FINALLY,
|
|
30
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
29
31
|
)
|
|
30
32
|
def rule_tr01(
|
|
31
33
|
pluginData: PluginValidationDataExtension,
|
|
@@ -178,6 +180,7 @@ def rule_tr06(
|
|
|
178
180
|
|
|
179
181
|
@validation(
|
|
180
182
|
hook=ValidationHook.XBRL_FINALLY,
|
|
183
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
181
184
|
)
|
|
182
185
|
def rule_tr09(
|
|
183
186
|
pluginData: PluginValidationDataExtension,
|
|
@@ -197,7 +200,8 @@ def rule_tr09(
|
|
|
197
200
|
|
|
198
201
|
|
|
199
202
|
@validation(
|
|
200
|
-
hook=ValidationHook.XBRL_FINALLY
|
|
203
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
204
|
+
disclosureSystems=ALL_DISCLOSURE_SYSTEMS
|
|
201
205
|
)
|
|
202
206
|
def rule_tr12(
|
|
203
207
|
pluginData: PluginValidationDataExtension,
|
|
@@ -223,6 +227,7 @@ def rule_tr12(
|
|
|
223
227
|
|
|
224
228
|
@validation(
|
|
225
229
|
hook=ValidationHook.XBRL_FINALLY,
|
|
230
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
226
231
|
)
|
|
227
232
|
def rule_tr11(
|
|
228
233
|
pluginData: PluginValidationDataExtension,
|
|
@@ -252,7 +257,7 @@ def rule_tr11(
|
|
|
252
257
|
|
|
253
258
|
@validation(
|
|
254
259
|
hook=ValidationHook.XBRL_FINALLY,
|
|
255
|
-
disclosureSystems=
|
|
260
|
+
disclosureSystems=ARL_MULTI_TARGET_DISCLOSURE_SYSTEMS,
|
|
256
261
|
)
|
|
257
262
|
def rule_tr15(
|
|
258
263
|
pluginData: PluginValidationDataExtension,
|
|
@@ -276,7 +281,7 @@ def rule_tr15(
|
|
|
276
281
|
|
|
277
282
|
@validation(
|
|
278
283
|
hook=ValidationHook.XBRL_FINALLY,
|
|
279
|
-
disclosureSystems=
|
|
284
|
+
disclosureSystems=ARL_MULTI_TARGET_DISCLOSURE_SYSTEMS,
|
|
280
285
|
)
|
|
281
286
|
def rule_tr16(
|
|
282
287
|
pluginData: PluginValidationDataExtension,
|
|
@@ -301,7 +306,7 @@ def rule_tr16(
|
|
|
301
306
|
|
|
302
307
|
@validation(
|
|
303
308
|
hook=ValidationHook.XBRL_FINALLY,
|
|
304
|
-
disclosureSystems=
|
|
309
|
+
disclosureSystems=ARL_MULTI_TARGET_DISCLOSURE_SYSTEMS,
|
|
305
310
|
)
|
|
306
311
|
def rule_tr17(
|
|
307
312
|
pluginData: PluginValidationDataExtension,
|
|
@@ -342,6 +347,7 @@ def rule_tr17(
|
|
|
342
347
|
|
|
343
348
|
@validation(
|
|
344
349
|
hook=ValidationHook.XBRL_FINALLY,
|
|
350
|
+
disclosureSystems=ARL_DISCLOSURE_SYSTEMS
|
|
345
351
|
)
|
|
346
352
|
def rule_tr19(
|
|
347
353
|
pluginData: PluginValidationDataExtension,
|
|
@@ -3,18 +3,18 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from enum import Enum
|
|
5
5
|
|
|
6
|
+
import regex
|
|
7
|
+
|
|
6
8
|
from arelle.ModelValue import qname
|
|
7
9
|
|
|
8
|
-
class
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
class AccountingStandard(Enum):
|
|
11
|
+
IFRS = 'IFRS'
|
|
12
|
+
JAPAN_GAAP = 'Japan GAAP'
|
|
13
|
+
US_GAAP = 'US GAAP'
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
domainItemTypeQname = qname("{http://www.xbrl.org/dtr/type/non-numeric}nonnum:domainItemType")
|
|
12
17
|
|
|
13
|
-
CORPORATE_FORMS =frozenset([
|
|
14
|
-
FormType.FORM_2_4,
|
|
15
|
-
FormType.FORM_2_7,
|
|
16
|
-
FormType.FORM_3,
|
|
17
|
-
])
|
|
18
18
|
qnEdinetManifestInsert = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}insert")
|
|
19
19
|
qnEdinetManifestInstance = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}instance")
|
|
20
20
|
qnEdinetManifestItem = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}item")
|
|
@@ -22,3 +22,187 @@ qnEdinetManifestIxbrl = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest
|
|
|
22
22
|
qnEdinetManifestList = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}list")
|
|
23
23
|
qnEdinetManifestTitle = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}title")
|
|
24
24
|
qnEdinetManifestTocComposition = qname("{http://disclosure.edinet-fsa.go.jp/2013/manifest}tocComposition")
|
|
25
|
+
xhtmlDtdExtension = "xhtml1-strict-ix.dtd"
|
|
26
|
+
|
|
27
|
+
COVER_PAGE_FILENAME_PREFIX = "0000000_header_"
|
|
28
|
+
|
|
29
|
+
LC3_NAME_PATTERN = regex.compile(r"^[A-Z][^\][\(\)\*\+\?\/\^\{\}\|@#%^=~`\"';:,<>&$\u00a3\u20ac]*$") # u20ac=Euro, u00a3=pound sterling
|
|
30
|
+
|
|
31
|
+
PROHIBITED_HTML_ATTRIBUTES = frozenset({
|
|
32
|
+
'onblur',
|
|
33
|
+
'onchange',
|
|
34
|
+
'onclick',
|
|
35
|
+
'ondblclick',
|
|
36
|
+
'onfocus',
|
|
37
|
+
'onkeydown',
|
|
38
|
+
'onkeypress',
|
|
39
|
+
'onkeyup',
|
|
40
|
+
'onload',
|
|
41
|
+
'onmousedown',
|
|
42
|
+
'onmousemove',
|
|
43
|
+
'onmouseout',
|
|
44
|
+
'onmouseover',
|
|
45
|
+
'onmouseup',
|
|
46
|
+
'onreset',
|
|
47
|
+
'onselect',
|
|
48
|
+
'onsubmit',
|
|
49
|
+
'onunload',
|
|
50
|
+
})
|
|
51
|
+
|
|
52
|
+
PROHIBITED_HTML_TAGS = frozenset({
|
|
53
|
+
'applet',
|
|
54
|
+
'embed',
|
|
55
|
+
'form',
|
|
56
|
+
'frame',
|
|
57
|
+
'frameset',
|
|
58
|
+
'iframe',
|
|
59
|
+
'input',
|
|
60
|
+
'object',
|
|
61
|
+
'plaintext',
|
|
62
|
+
'pre',
|
|
63
|
+
'script',
|
|
64
|
+
'select',
|
|
65
|
+
'textarea',
|
|
66
|
+
})
|
|
67
|
+
|
|
68
|
+
NUMERIC_LABEL_ROLES = frozenset({
|
|
69
|
+
'http://www.xbrl.org/2003/role/positiveLabel',
|
|
70
|
+
'http://www.xbrl.org/2003/role/positiveTerseLabel',
|
|
71
|
+
'http://www.xbrl.org/2003/role/positiveVerboseLabel',
|
|
72
|
+
'http://www.xbrl.org/2003/role/negativeLabel',
|
|
73
|
+
'http://www.xbrl.org/2003/role/negativeTerseLabel',
|
|
74
|
+
'http://www.xbrl.org/2003/role/negativeVerboseLabel',
|
|
75
|
+
'http://www.xbrl.org/2003/role/zeroLabel',
|
|
76
|
+
'http://www.xbrl.org/2003/role/zeroTerseLabel',
|
|
77
|
+
'http://www.xbrl.org/2003/role/zeroVerboseLabel',
|
|
78
|
+
'http://www.xbrl.org/2003/role/totalLabel',
|
|
79
|
+
'http://www.xbrl.org/2009/role/negatedLabel',
|
|
80
|
+
'http://www.xbrl.org/2009/role/negatedPeriodEndLabel',
|
|
81
|
+
'http://www.xbrl.org/2009/role/negatedPeriodStartLabel',
|
|
82
|
+
'http://www.xbrl.org/2009/role/negatedTotalLabel',
|
|
83
|
+
'http://www.xbrl.org/2009/role/negatedNetLabel',
|
|
84
|
+
'http://www.xbrl.org/2009/role/negatedTerseLabel',
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
PATTERN_CODE = r'(?P<code>[A-Za-z\d]+)'
|
|
88
|
+
PATTERN_CONSOLIDATED = r'(?P<consolidated>c|n)'
|
|
89
|
+
PATTERN_COUNT = r'(?P<count>\d{2})'
|
|
90
|
+
PATTERN_PERIOD_DATE = r'(?P<period_year>\d{4})-(?P<period_month>\d{2})-(?P<period_day>\d{2})'
|
|
91
|
+
PATTERN_SUBMISSION_DATE = r'(?P<submission_year>\d{4})-(?P<submission_month>\d{2})-(?P<submission_day>\d{2})'
|
|
92
|
+
PATTERN_FORM = r'(?P<form>\d{6})'
|
|
93
|
+
PATTERN_LINKBASE = r'(?P<linkbase>lab|lab-en|gla|pre|def|cal)'
|
|
94
|
+
PATTERN_MAIN = r'(?P<main>\d{7})'
|
|
95
|
+
PATTERN_NAME = r'(?P<name>[a-z]{6})'
|
|
96
|
+
PATTERN_ORDINANCE = r'(?P<ordinance>[a-z]+)'
|
|
97
|
+
PATTERN_PERIOD = r'(?P<period>c|p)' # TODO: Have only seen "c" in sample/public filings, assuming "p" for previous.
|
|
98
|
+
PATTERN_REPORT = r'(?P<report>[a-z]+)'
|
|
99
|
+
PATTERN_REPORT_SERIAL = r'(?P<report_serial>\d{3})'
|
|
100
|
+
PATTERN_SERIAL = r'(?P<serial>\d{3})'
|
|
101
|
+
|
|
102
|
+
PATTERN_AUDIT_REPORT_PREFIX = rf'jpaud-{PATTERN_REPORT}-{PATTERN_PERIOD}{PATTERN_CONSOLIDATED}'
|
|
103
|
+
PATTERN_REPORT_PREFIX = rf'jp{PATTERN_ORDINANCE}{PATTERN_FORM}-{PATTERN_REPORT}'
|
|
104
|
+
PATTERN_SUFFIX = rf'{PATTERN_REPORT_SERIAL}_{PATTERN_CODE}-{PATTERN_SERIAL}_{PATTERN_PERIOD_DATE}_{PATTERN_COUNT}_{PATTERN_SUBMISSION_DATE}'
|
|
105
|
+
|
|
106
|
+
PATTERN_URI_HOST = r'http:\/\/disclosure\.edinet-fsa\.go\.jp'
|
|
107
|
+
|
|
108
|
+
PATTERN_AUDIT_NAMESPACE_PREFIX = rf'jpaud\/{PATTERN_REPORT}\/{PATTERN_PERIOD}{PATTERN_CONSOLIDATED}'
|
|
109
|
+
PATTERN_REPORT_NAMESPACE_PREFIX = rf'jp{PATTERN_ORDINANCE}{PATTERN_FORM}\/{PATTERN_REPORT}'
|
|
110
|
+
PATTERN_NAMESPACE_SUFFIX = rf'{PATTERN_REPORT_SERIAL}\/{PATTERN_CODE}-{PATTERN_SERIAL}\/{PATTERN_PERIOD_DATE}\/{PATTERN_COUNT}\/{PATTERN_SUBMISSION_DATE}'
|
|
111
|
+
|
|
112
|
+
PATTERN_ELR_ID = rf'rol_(?P<root_element_name>[\w]+)(?:-(?P<modifier>[a-zA-Z0-9]+))?(?:-{PATTERN_COUNT})?'
|
|
113
|
+
|
|
114
|
+
# Extension role ID
|
|
115
|
+
# Example: http://disclosure.edinet-fsa.go.jp/role/jpcrp-esr/rol_CoverPage-Modifier-01
|
|
116
|
+
REPORT_ELR_ID_PATTERN = regex.compile(PATTERN_ELR_ID)
|
|
117
|
+
|
|
118
|
+
# Extension role URI
|
|
119
|
+
# Example: http://disclosure.edinet-fsa.go.jp/role/jpdei/rol_RootElementName
|
|
120
|
+
# Example: http://disclosure.edinet-fsa.go.jp/role/jpdei-qrr/rol_RootElementName-Modifier-01
|
|
121
|
+
REPORT_ELR_URI_PATTERN = regex.compile(rf'{PATTERN_URI_HOST}\/role\/jp{PATTERN_ORDINANCE}(?:-{PATTERN_REPORT})?\/{PATTERN_ELR_ID}')
|
|
122
|
+
|
|
123
|
+
# Extension namespace URI for report
|
|
124
|
+
# Example: http://disclosure.edinet-fsa.go.jp/jpcrp030000/asr/001/X99002-000/2025-03-31/01/2025-06-28
|
|
125
|
+
REPORT_NAMESPACE_PATTERN = regex.compile(rf'{PATTERN_URI_HOST}\/{PATTERN_REPORT_NAMESPACE_PREFIX}\/{PATTERN_NAMESPACE_SUFFIX}')
|
|
126
|
+
|
|
127
|
+
# Extension namespace URI for audit report
|
|
128
|
+
# Example: http://disclosure.edinet-fsa.go.jp/jpaud/aar/cn/001/X99002-000/2025-03-31/01/2025-06-28
|
|
129
|
+
AUDIT_NAMESPACE_PATTERN = regex.compile(rf'{PATTERN_URI_HOST}\/{PATTERN_AUDIT_NAMESPACE_PREFIX}\/{PATTERN_NAMESPACE_SUFFIX}')
|
|
130
|
+
|
|
131
|
+
# Extension namespace prefix for report
|
|
132
|
+
# Example: jpcrp040300-ssr_X99005-000
|
|
133
|
+
REPORT_PREFIX_PATTERN = regex.compile(rf'{PATTERN_REPORT_PREFIX}_{PATTERN_CODE}-{PATTERN_SERIAL}')
|
|
134
|
+
|
|
135
|
+
# Extension namespace prefix for audit report
|
|
136
|
+
# Example: jpaud-qrr-cn_X99005-000
|
|
137
|
+
AUDIT_PREFIX_PATTERN = regex.compile(rf'{PATTERN_AUDIT_REPORT_PREFIX}_{PATTERN_CODE}-{PATTERN_SERIAL}')
|
|
138
|
+
|
|
139
|
+
# Instance file for report
|
|
140
|
+
# Example: jpcrp050300-esr-001_X99007-000_2025-04-10_01_2025-04-10.xsd
|
|
141
|
+
REPORT_XBRL_FILENAME_PATTERN = regex.compile(rf'{PATTERN_REPORT_PREFIX}-{PATTERN_SUFFIX}\.xbrl')
|
|
142
|
+
|
|
143
|
+
# Instance file for audit report
|
|
144
|
+
# Example: jpaud-aar-cn-001_X99001-000_2025-03-31_01_2025-06-28.xsd
|
|
145
|
+
AUDIT_XBRL_FILENAME_PATTERN = regex.compile(rf'{PATTERN_AUDIT_REPORT_PREFIX}-{PATTERN_SUFFIX}\.xbrl')
|
|
146
|
+
|
|
147
|
+
# Schema file for report
|
|
148
|
+
# Example: jpcrp050300-esr-001_X99007-000_2025-04-10_01_2025-04-10.xsd
|
|
149
|
+
REPORT_SCHEMA_FILENAME_PATTERN = regex.compile(rf'{PATTERN_REPORT_PREFIX}-{PATTERN_SUFFIX}\.xsd')
|
|
150
|
+
|
|
151
|
+
# Schema file for audit report
|
|
152
|
+
# Example: jpaud-aar-cn-001_X99001-000_2025-03-31_01_2025-06-28.xsd
|
|
153
|
+
AUDIT_SCHEMA_FILENAME_PATTERN = regex.compile(rf'{PATTERN_AUDIT_REPORT_PREFIX}-{PATTERN_SUFFIX}\.xsd')
|
|
154
|
+
|
|
155
|
+
# Linkbase file for report
|
|
156
|
+
# Example: jpcrp020000-srs-001_X99001-000_2025-03-31_01_2025-11-20_cal.xml
|
|
157
|
+
REPORT_LINKBASE_FILENAME_PATTERN = regex.compile(rf'{PATTERN_REPORT_PREFIX}-{PATTERN_SUFFIX}_{PATTERN_LINKBASE}\.xml')
|
|
158
|
+
|
|
159
|
+
# Linkbase file for audit report
|
|
160
|
+
# Example: jpaud-qrr-cc-001_X99001-000_2025-03-31_01_2025-11-20_pre.xml
|
|
161
|
+
AUDIT_LINKBASE_FILENAME_PATTERN = regex.compile(rf'{PATTERN_AUDIT_REPORT_PREFIX}-{PATTERN_SUFFIX}_{PATTERN_LINKBASE}\.xml')
|
|
162
|
+
|
|
163
|
+
# Cover page file for report
|
|
164
|
+
# Example: 0000000_header_jpcrp020000-srs-001_X99001-000_2025-03-31_01_2025-11-20_ixbrl.htm
|
|
165
|
+
REPORT_COVER_FILENAME_PATTERN = regex.compile(rf'{COVER_PAGE_FILENAME_PREFIX}{PATTERN_REPORT_PREFIX}-{PATTERN_SUFFIX}_ixbrl\.htm')
|
|
166
|
+
|
|
167
|
+
# Main file for report
|
|
168
|
+
# Example: 0205020_honbun_jpcrp020000-srs-001_X99001-000_2025-03-31_01_2025-11-20_ixbrl.htm
|
|
169
|
+
REPORT_IXBRL_FILENAME_PATTERN = regex.compile(rf'{PATTERN_MAIN}_{PATTERN_NAME}_{PATTERN_REPORT_PREFIX}-{PATTERN_SUFFIX}_ixbrl\.htm')
|
|
170
|
+
|
|
171
|
+
# Main file for audit report
|
|
172
|
+
# Example: jpaud-qrr-cc-001_X99001-000_2025-03-31_01_2025-11-20_pre.xml
|
|
173
|
+
AUDIT_IXBRL_FILENAME_PATTERN = regex.compile(rf'{PATTERN_AUDIT_REPORT_PREFIX}-{PATTERN_SUFFIX}_ixbrl\.htm')
|
|
174
|
+
|
|
175
|
+
PATTERN_CONTEXT_RELATIVE_PERIOD = r'(?P<relative_period>Prior[1-9]Year|CurrentYear|Prior[1-9]Interim|Interim)'
|
|
176
|
+
PATTERN_CONTEXT_PERIOD = r'(?P<relative_period>Prior[1-9]Year|CurrentYear|Prior[1-9]Interim|Prior[1-9]Quarter|Prior[1-9]YTD|Interim|FilingDate|RecordDate|CurrentQuarter|CurrentYTD)'
|
|
177
|
+
PATTERN_CONTEXT_DURATION = r'(?P<duration>Duration|Instant)'
|
|
178
|
+
PATTERN_CONTEXT_MEMBERS = r'(?P<context_members>(?:_[a-zA-Z][a-zA-Z0-9-]+)+)*'
|
|
179
|
+
PATTERN_CONTEXT_NUMBER = r'(?P<context_number>[0-9]{3})'
|
|
180
|
+
|
|
181
|
+
# All context IDs
|
|
182
|
+
# Example: Prior2YearDuration_jpcrp020000-srs_X99001-000IndustrialMachineryReportableSegmentMember
|
|
183
|
+
CONTEXT_ID_PATTERN = regex.compile(rf'{PATTERN_CONTEXT_PERIOD}{PATTERN_CONTEXT_DURATION}{PATTERN_CONTEXT_MEMBERS}(?:_{PATTERN_CONTEXT_NUMBER})?')
|
|
184
|
+
|
|
185
|
+
# Context IDs for facts associated with Financial Statements
|
|
186
|
+
# Example: Prior2YearDuration
|
|
187
|
+
FINANCIAL_STATEMENT_CONTEXT_ID_PATTERN = regex.compile(rf'^{PATTERN_CONTEXT_RELATIVE_PERIOD}{PATTERN_CONTEXT_DURATION}.*')
|
|
188
|
+
|
|
189
|
+
# Context IDs for facts associated with individual (non-consolidated) Financial Statements
|
|
190
|
+
# Example: Prior2YearDuration_NonConsolidatedMember
|
|
191
|
+
INDIVIDUAL_CONTEXT_ID_PATTERN = regex.compile(rf'^{PATTERN_CONTEXT_RELATIVE_PERIOD}{PATTERN_CONTEXT_DURATION}_NonConsolidatedMember.*')
|
|
192
|
+
|
|
193
|
+
# Accepted language codes for Japan
|
|
194
|
+
JAPAN_LANGUAGE_CODES = frozenset({'ja', 'jp', 'ja-jp', 'JA', 'JP', 'JA-JP'})
|
|
195
|
+
|
|
196
|
+
# Half Kana characters taken from JACONV library
|
|
197
|
+
# We define it here because the JACONV library does not allow the constant to be imported
|
|
198
|
+
HALF_KANA = frozenset({'ァ', 'ア', 'ィ', 'イ', 'ゥ', 'ウ', 'ェ', 'エ', 'ォ', 'オ',
|
|
199
|
+
'カ', 'ガ', 'キ', 'ギ', 'ク', 'グ', 'ケ', 'ゲ', 'コ',
|
|
200
|
+
'ゴ', 'サ', 'ザ', 'シ', 'ジ', 'ス', 'ズ', 'セ', 'ゼ',
|
|
201
|
+
'ソ', 'ゾ', 'タ', 'ダ', 'チ', 'ヂ', 'ッ', 'ツ', 'ヅ',
|
|
202
|
+
'テ', 'デ', 'ト', 'ド', 'ナ', 'ニ', 'ヌ', 'ネ', 'ノ', 'ハ',
|
|
203
|
+
'バ', 'パ', 'ヒ', 'ビ', 'ピ', 'フ', 'ブ', 'プ', 'ヘ',
|
|
204
|
+
'ベ', 'ペ', 'ホ', 'ボ', 'ポ', 'マ', 'ミ', 'ム', 'メ',
|
|
205
|
+
'モ', 'ャ', 'ヤ', 'ュ', 'ユ', 'ョ', 'ヨ', 'ラ', 'リ', 'ル',
|
|
206
|
+
'レ', 'ロ', 'ワ', 'ヲ', 'ン', 'ー',
|
|
207
|
+
'ヮ', 'ヰ', 'ヱ', 'ヵ', 'ヶ', 'ヴ', 'ヽ', 'ヾ', '・',
|
|
208
|
+
'「', '」', '。', '、'})
|