arelle-release 2.17.1__py3-none-any.whl → 2.37.71__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.
Files changed (893) hide show
  1. arelle/Aspect.py +6 -3
  2. arelle/BetaFeatures.py +3 -0
  3. arelle/Cntlr.py +117 -413
  4. arelle/CntlrCmdLine.py +364 -227
  5. arelle/CntlrQuickBooks.py +4 -2
  6. arelle/CntlrWebMain.py +179 -119
  7. arelle/CntlrWinMain.py +342 -124
  8. arelle/DialogAbout.py +1 -1
  9. arelle/DialogArcroleGroup.py +1 -1
  10. arelle/DialogFind.py +1 -1
  11. arelle/DialogFormulaParameters.py +2 -2
  12. arelle/DialogLanguage.py +45 -36
  13. arelle/DialogNewFactItem.py +1 -1
  14. arelle/DialogOpenArchive.py +30 -34
  15. arelle/DialogPackageManager.py +11 -8
  16. arelle/DialogPluginManager.py +43 -89
  17. arelle/DialogRssWatch.py +2 -2
  18. arelle/DialogURL.py +1 -1
  19. arelle/DialogUserPassword.py +1 -1
  20. arelle/DisclosureSystem.py +69 -1
  21. arelle/ErrorManager.py +321 -0
  22. arelle/FileSource.py +201 -99
  23. arelle/FunctionFn.py +44 -5
  24. arelle/FunctionIxt.py +16 -13
  25. arelle/FunctionUtil.py +1 -1
  26. arelle/FunctionXfi.py +68 -24
  27. arelle/FunctionXs.py +1 -1
  28. arelle/HtmlUtil.py +5 -4
  29. arelle/LeiUtil.py +63 -43
  30. arelle/LinkbaseType.py +94 -0
  31. arelle/LocalViewer.py +8 -2
  32. arelle/Locale.py +239 -79
  33. arelle/ModelDocument.py +180 -48
  34. arelle/ModelDtsObject.py +32 -27
  35. arelle/ModelFormulaObject.py +14 -6
  36. arelle/ModelInstanceObject.py +43 -14
  37. arelle/ModelManager.py +6 -1
  38. arelle/ModelObject.py +12 -8
  39. arelle/ModelObjectFactory.py +18 -2
  40. arelle/ModelRelationshipSet.py +46 -3
  41. arelle/ModelRenderingObject.py +899 -951
  42. arelle/ModelRssItem.py +2 -4
  43. arelle/ModelTestcaseObject.py +41 -4
  44. arelle/ModelValue.py +42 -14
  45. arelle/ModelVersReport.py +1 -1
  46. arelle/ModelXbrl.py +133 -273
  47. arelle/PackageManager.py +202 -176
  48. arelle/PluginManager.py +551 -239
  49. arelle/PluginUtils.py +54 -0
  50. arelle/PrototypeInstanceObject.py +53 -12
  51. arelle/PythonUtil.py +166 -25
  52. arelle/RuntimeOptions.py +32 -18
  53. arelle/SocketUtils.py +3 -0
  54. arelle/SystemInfo.py +1 -1
  55. arelle/TkTableWrapper.py +33 -5
  56. arelle/UITkTable.py +27 -21
  57. arelle/Updater.py +7 -3
  58. arelle/UrlUtil.py +6 -2
  59. arelle/Validate.py +596 -402
  60. arelle/ValidateDuplicateFacts.py +584 -0
  61. arelle/ValidateFileSource.py +38 -0
  62. arelle/ValidateFilingText.py +46 -29
  63. arelle/ValidateInfoset.py +104 -32
  64. arelle/ValidateUtr.py +31 -4
  65. arelle/ValidateXbrl.py +144 -120
  66. arelle/ValidateXbrlCalcs.py +51 -66
  67. arelle/ValidateXbrlDTS.py +98 -29
  68. arelle/Version.py +2 -7
  69. arelle/ViewFile.py +2 -0
  70. arelle/ViewFileDTS.py +7 -2
  71. arelle/ViewFileFactList.py +1 -1
  72. arelle/ViewFileFactTable.py +4 -4
  73. arelle/ViewFileRelationshipSet.py +36 -19
  74. arelle/ViewFileRenderedGrid.py +164 -753
  75. arelle/ViewFileRenderedLayout.py +174 -0
  76. arelle/ViewFileRenderedStructure.py +108 -0
  77. arelle/ViewWinDTS.py +4 -1
  78. arelle/ViewWinFactList.py +1 -1
  79. arelle/ViewWinFactTable.py +1 -1
  80. arelle/ViewWinRelationshipSet.py +14 -8
  81. arelle/ViewWinRenderedGrid.py +397 -287
  82. arelle/ViewWinRssFeed.py +4 -0
  83. arelle/ViewWinTree.py +15 -9
  84. arelle/ViewWinXml.py +1 -1
  85. arelle/WebCache.py +510 -272
  86. arelle/XbrlConst.py +202 -196
  87. arelle/XbrlUtil.py +2 -1
  88. arelle/XhtmlValidate.py +9 -23
  89. arelle/XmlUtil.py +24 -19
  90. arelle/XmlValidate.py +95 -67
  91. arelle/XmlValidateParticles.py +4 -4
  92. arelle/_version.py +33 -3
  93. arelle/api/Session.py +183 -0
  94. arelle/config/creationSoftwareNames.json +24 -10
  95. arelle/config/disclosuresystems.xml +1 -1
  96. arelle/config/disclosuresystems.xsd +3 -0
  97. arelle/config/sbr-text-formatting.xsd +737 -0
  98. arelle/conformance/CSVTestcaseLoader.py +102 -0
  99. arelle/formula/FactAspectsCache.py +10 -4
  100. arelle/formula/ValidateFormula.py +82 -194
  101. arelle/formula/XPathContext.py +42 -28
  102. arelle/formula/XPathParser.py +15 -9
  103. arelle/locale/ar_EG/LC_MESSAGES/ar_EG.po +3 -4
  104. arelle/locale/messages.pot +1 -2
  105. arelle/locale/ru/LC_MESSAGES/ru.po +2 -2
  106. arelle/logging/formatters/LogFormatter.py +47 -0
  107. arelle/logging/handlers/LogHandlerWithXml.py +94 -0
  108. arelle/logging/handlers/LogToBufferHandler.py +20 -0
  109. arelle/logging/handlers/LogToPrintHandler.py +41 -0
  110. arelle/logging/handlers/LogToXmlHandler.py +244 -0
  111. arelle/logging/handlers/StructuredMessageLogHandler.py +74 -0
  112. arelle/model/CommentBase.py +3 -0
  113. arelle/model/ElementBase.py +3 -0
  114. arelle/model/PIBase.py +3 -0
  115. arelle/model/__init__.py +3 -0
  116. arelle/oim/Load.py +2869 -0
  117. arelle/oim/Validate.py +155 -0
  118. arelle/oim/xml/Save.py +21 -0
  119. arelle/packages/PackageConst.py +7 -0
  120. arelle/packages/PackageType.py +13 -0
  121. arelle/packages/PackageUtils.py +22 -0
  122. arelle/packages/PackageValidation.py +200 -0
  123. arelle/packages/report/DetectReportPackage.py +13 -0
  124. arelle/packages/report/ReportPackage.py +265 -0
  125. arelle/packages/report/ReportPackageConst.py +79 -0
  126. arelle/packages/report/ReportPackageValidator.py +207 -0
  127. arelle/plugin/EdgarRendererAllReports.py +12 -12
  128. arelle/plugin/OimTaxonomy/ModelValueMore.py +15 -0
  129. arelle/plugin/OimTaxonomy/ValidateDTS.py +484 -0
  130. arelle/plugin/OimTaxonomy/ViewXbrlTxmyObj.py +239 -0
  131. arelle/plugin/OimTaxonomy/XbrlAbstract.py +16 -0
  132. arelle/plugin/OimTaxonomy/XbrlConcept.py +68 -0
  133. arelle/plugin/OimTaxonomy/XbrlConst.py +261 -0
  134. arelle/plugin/OimTaxonomy/XbrlCube.py +91 -0
  135. arelle/plugin/OimTaxonomy/XbrlDimension.py +38 -0
  136. arelle/plugin/OimTaxonomy/XbrlDts.py +152 -0
  137. arelle/plugin/OimTaxonomy/XbrlEntity.py +16 -0
  138. arelle/plugin/OimTaxonomy/XbrlGroup.py +22 -0
  139. arelle/plugin/OimTaxonomy/XbrlImportedTaxonomy.py +22 -0
  140. arelle/plugin/OimTaxonomy/XbrlLabel.py +31 -0
  141. arelle/plugin/OimTaxonomy/XbrlNetwork.py +100 -0
  142. arelle/plugin/OimTaxonomy/XbrlProperty.py +28 -0
  143. arelle/plugin/OimTaxonomy/XbrlReference.py +33 -0
  144. arelle/plugin/OimTaxonomy/XbrlReport.py +24 -0
  145. arelle/plugin/OimTaxonomy/XbrlTableTemplate.py +35 -0
  146. arelle/plugin/OimTaxonomy/XbrlTaxonomy.py +93 -0
  147. arelle/plugin/OimTaxonomy/XbrlTaxonomyObject.py +154 -0
  148. arelle/plugin/OimTaxonomy/XbrlTransform.py +17 -0
  149. arelle/plugin/OimTaxonomy/XbrlTypes.py +23 -0
  150. arelle/plugin/OimTaxonomy/XbrlUnit.py +17 -0
  151. arelle/plugin/OimTaxonomy/__init__.py +1037 -0
  152. arelle/plugin/OimTaxonomy/resources/iso4217.json +4479 -0
  153. arelle/plugin/OimTaxonomy/resources/oim-taxonomy-schema.json +935 -0
  154. arelle/plugin/OimTaxonomy/resources/ref.json +333 -0
  155. arelle/plugin/OimTaxonomy/resources/transform-types.json +2481 -0
  156. arelle/plugin/OimTaxonomy/resources/types.json +727 -0
  157. arelle/plugin/OimTaxonomy/resources/utr.json +3046 -0
  158. arelle/plugin/OimTaxonomy/resources/xbrlSpec.json +1082 -0
  159. arelle/plugin/formulaLoader.py +3 -3
  160. arelle/plugin/formulaSaver.py +4 -4
  161. arelle/plugin/inlineXbrlDocumentSet.py +331 -102
  162. arelle/plugin/internet/proxyNTLM/HTTPNtlmAuthHandler.py +1 -1
  163. arelle/plugin/loadFromExcel.py +13 -10
  164. arelle/plugin/loadFromOIM.py +16 -3096
  165. arelle/plugin/logging/saveMessages.py +1 -1
  166. arelle/plugin/saveHtmlEBAtables.py +293 -213
  167. arelle/plugin/saveLoadableOIM.py +652 -361
  168. arelle/plugin/saveOIMTaxonomy.py +311 -0
  169. arelle/plugin/streamingExtensions.py +1 -1
  170. arelle/plugin/systemInfo.py +46 -0
  171. arelle/plugin/transforms/tester.py +4 -4
  172. arelle/plugin/validate/CIPC/Const.py +18 -0
  173. arelle/plugin/validate/CIPC/__init__.py +34 -13
  174. arelle/plugin/validate/DBA/DisclosureSystems.py +12 -0
  175. arelle/plugin/validate/DBA/PluginValidationDataExtension.py +165 -0
  176. arelle/plugin/validate/DBA/ValidationPluginExtension.py +545 -0
  177. arelle/plugin/validate/DBA/__init__.py +49 -0
  178. arelle/plugin/validate/DBA/resources/config.xml +21 -0
  179. arelle/plugin/validate/DBA/rules/__init__.py +323 -0
  180. arelle/plugin/validate/DBA/rules/fr.py +1377 -0
  181. arelle/plugin/validate/DBA/rules/tc.py +45 -0
  182. arelle/plugin/validate/DBA/rules/th.py +172 -0
  183. arelle/plugin/validate/DBA/rules/tm.py +351 -0
  184. arelle/plugin/validate/DBA/rules/tr.py +373 -0
  185. arelle/plugin/validate/EBA/__init__.py +11 -12
  186. arelle/plugin/validate/EDINET/Constants.py +208 -0
  187. arelle/plugin/validate/EDINET/ContextRequirement.py +58 -0
  188. arelle/plugin/validate/EDINET/ControllerPluginData.py +298 -0
  189. arelle/plugin/validate/EDINET/CoverItemRequirements.py +42 -0
  190. arelle/plugin/validate/EDINET/DeiRequirements.py +118 -0
  191. arelle/plugin/validate/EDINET/DisclosureSystems.py +1 -0
  192. arelle/plugin/validate/EDINET/FilingFormat.py +275 -0
  193. arelle/plugin/validate/EDINET/FormType.py +134 -0
  194. arelle/plugin/validate/EDINET/ManifestInstance.py +236 -0
  195. arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +640 -0
  196. arelle/plugin/validate/EDINET/ReportFolderType.py +162 -0
  197. arelle/plugin/validate/EDINET/Statement.py +139 -0
  198. arelle/plugin/validate/EDINET/TableOfContentsBuilder.py +493 -0
  199. arelle/plugin/validate/EDINET/UploadContents.py +48 -0
  200. arelle/plugin/validate/EDINET/ValidationPluginExtension.py +64 -0
  201. arelle/plugin/validate/EDINET/__init__.py +109 -0
  202. arelle/plugin/validate/EDINET/resources/config.xml +22 -0
  203. arelle/plugin/validate/EDINET/resources/cover-item-requirements.json +793 -0
  204. arelle/plugin/validate/EDINET/resources/dei-requirements.csv +27 -0
  205. arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml +62 -0
  206. arelle/plugin/validate/EDINET/rules/contexts.py +547 -0
  207. arelle/plugin/validate/EDINET/rules/edinet.py +1991 -0
  208. arelle/plugin/validate/EDINET/rules/frta.py +301 -0
  209. arelle/plugin/validate/EDINET/rules/gfm.py +2394 -0
  210. arelle/plugin/validate/EDINET/rules/manifests.py +88 -0
  211. arelle/plugin/validate/EDINET/rules/upload.py +1370 -0
  212. arelle/plugin/validate/ESEF/Const.py +16 -75
  213. arelle/plugin/validate/ESEF/Dimensions.py +2 -2
  214. arelle/plugin/validate/ESEF/ESEF_2021/DTS.py +6 -1
  215. arelle/plugin/validate/ESEF/ESEF_2021/Image.py +7 -4
  216. arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +80 -57
  217. arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +60 -22
  218. arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +272 -133
  219. arelle/plugin/validate/ESEF/Util.py +5 -19
  220. arelle/plugin/validate/ESEF/__init__.py +61 -46
  221. arelle/plugin/validate/ESEF/resources/authority-validations.json +120 -10
  222. arelle/plugin/validate/ESEF/resources/config.xml +44 -3
  223. arelle/plugin/validate/FERC/__init__.py +31 -18
  224. arelle/plugin/validate/FERC/config.xml +18 -18
  225. arelle/plugin/validate/NL/DisclosureSystems.py +19 -3
  226. arelle/plugin/validate/NL/PluginValidationDataExtension.py +710 -7
  227. arelle/plugin/validate/NL/ValidationPluginExtension.py +117 -12
  228. arelle/plugin/validate/NL/__init__.py +21 -10
  229. arelle/plugin/validate/NL/resources/config.xml +27 -6
  230. arelle/plugin/validate/NL/rules/br_kvk.py +81 -21
  231. arelle/plugin/validate/NL/rules/fg_nl.py +292 -0
  232. arelle/plugin/validate/NL/rules/fr_kvk.py +60 -7
  233. arelle/plugin/validate/NL/rules/fr_nl.py +705 -24
  234. arelle/plugin/validate/NL/rules/nl_kvk.py +2182 -0
  235. arelle/plugin/validate/ROS/DisclosureSystems.py +1 -0
  236. arelle/plugin/validate/ROS/PluginValidationDataExtension.py +109 -0
  237. arelle/plugin/validate/ROS/ValidationPluginExtension.py +27 -0
  238. arelle/plugin/validate/ROS/__init__.py +28 -341
  239. arelle/plugin/validate/ROS/resources/config.xml +20 -0
  240. arelle/plugin/validate/ROS/rules/__init__.py +56 -0
  241. arelle/plugin/validate/ROS/rules/ros.py +393 -0
  242. arelle/plugin/validate/UK/ValidateUK.py +1372 -0
  243. arelle/plugin/validate/{HMRC → UK}/__init__.py +195 -189
  244. arelle/plugin/validate/{HMRC → UK}/config.xml +1 -1
  245. arelle/plugin/xbrlDB/SqlDb.py +1 -1
  246. arelle/plugin/xbrlDB/XbrlOpenSqlDB.py +5 -5
  247. arelle/plugin/xbrlDB/XbrlPublicPostgresDB.py +1 -1
  248. arelle/plugin/xbrlDB/XbrlSemanticJsonDB.py +1 -1
  249. arelle/plugin/xbrlDB/XbrlSemanticRdfDB.py +1 -1
  250. arelle/plugin/xbrlDB/__init__.py +4 -1
  251. arelle/{RenderingEvaluator.py → rendering/RenderingEvaluator.py} +120 -99
  252. arelle/rendering/RenderingLayout.py +476 -0
  253. arelle/rendering/RenderingResolution.py +814 -0
  254. arelle/resources/cache/http/www.eurofiling.info/eu/fr/xbrl/ext/filing-indicators.xsd +20 -0
  255. arelle/resources/cache/http/www.w3.org/2001/03/xml.xsd +117 -0
  256. arelle/resources/cache/http/www.w3.org/2001/XMLSchema.xsd +2534 -0
  257. arelle/resources/cache/http/www.w3.org/2001/xml.xsd +287 -0
  258. arelle/resources/cache/http/www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd +779 -0
  259. arelle/resources/cache/http/www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd +486 -0
  260. arelle/resources/cache/http/www.xbrl.org/2003/xl-2003-12-31.xsd +251 -0
  261. arelle/resources/cache/http/www.xbrl.org/2003/xlink-2003-12-31.xsd +121 -0
  262. arelle/resources/cache/http/www.xbrl.org/2004/ref-2004-08-10.xsd +129 -0
  263. arelle/resources/cache/http/www.xbrl.org/2005/xbrldt-2005.xsd +53 -0
  264. arelle/resources/cache/http/www.xbrl.org/2006/ref-2006-02-27.xsd +120 -0
  265. arelle/resources/cache/http/www.xbrl.org/2006/xbrldi-2006.xsd +41 -0
  266. arelle/resources/cache/http/www.xbrl.org/2008/boolean-filter.xsd +51 -0
  267. arelle/resources/cache/http/www.xbrl.org/2008/concept-filter.xsd +127 -0
  268. arelle/resources/cache/http/www.xbrl.org/2008/conformance.xsd +116 -0
  269. arelle/resources/cache/http/www.xbrl.org/2008/conformanceFunction.xsd +51 -0
  270. arelle/resources/cache/http/www.xbrl.org/2008/consistency-assertion.xsd +66 -0
  271. arelle/resources/cache/http/www.xbrl.org/2008/dimension-filter.xsd +86 -0
  272. arelle/resources/cache/http/www.xbrl.org/2008/entity-filter.xsd +92 -0
  273. arelle/resources/cache/http/www.xbrl.org/2008/existence-assertion.xsd +44 -0
  274. arelle/resources/cache/http/www.xbrl.org/2008/formula.xsd +261 -0
  275. arelle/resources/cache/http/www.xbrl.org/2008/function.xsd +90 -0
  276. arelle/resources/cache/http/www.xbrl.org/2008/general-filter.xsd +38 -0
  277. arelle/resources/cache/http/www.xbrl.org/2008/generic-label.xsd +80 -0
  278. arelle/resources/cache/http/www.xbrl.org/2008/generic-link.xsd +81 -0
  279. arelle/resources/cache/http/www.xbrl.org/2008/generic-reference.xsd +63 -0
  280. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
  281. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
  282. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xl-2003-12-31.xsd +248 -0
  283. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xlink-2003-12-31.xsd +117 -0
  284. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xframes-1.xsd +166 -0
  285. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-applet-1.xsd +66 -0
  286. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-attribs-1.xsd +72 -0
  287. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-base-1.xsd +36 -0
  288. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-form-1.xsd +195 -0
  289. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-table-1.xsd +169 -0
  290. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-model-1.xsd +376 -0
  291. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
  292. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-modules-1.xsd +259 -0
  293. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10.xsd +98 -0
  294. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-bdo-1.xsd +78 -0
  295. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkphras-1.xsd +161 -0
  296. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkpres-1.xsd +37 -0
  297. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkstruct-1.xsd +49 -0
  298. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-charent-1.xsd +38 -0
  299. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-copyright-1.xsd +29 -0
  300. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-csismap-1.xsd +96 -0
  301. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-datatypes-1.xsd +128 -0
  302. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-edit-1.xsd +39 -0
  303. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-events-1.xsd +130 -0
  304. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-form-1.xsd +326 -0
  305. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-frames-1.xsd +113 -0
  306. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-framework-1.xsd +66 -0
  307. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-hypertext-1.xsd +47 -0
  308. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-iframe-1.xsd +68 -0
  309. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-image-1.xsd +45 -0
  310. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlphras-1.xsd +163 -0
  311. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlpres-1.xsd +39 -0
  312. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstruct-1.xsd +50 -0
  313. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstyle-1.xsd +27 -0
  314. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-legacy-1.xsd +97 -0
  315. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-link-1.xsd +45 -0
  316. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-list-1.xsd +99 -0
  317. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-meta-1.xsd +42 -0
  318. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-misc-1.xsd +441 -0
  319. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-nameident-1.xsd +63 -0
  320. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-notations-1.xsd +69 -0
  321. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-object-1.xsd +76 -0
  322. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-param-1.xsd +51 -0
  323. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-pres-1.xsd +51 -0
  324. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-1.xsd +171 -0
  325. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-basic-1.xsd +89 -0
  326. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-script-1.xsd +70 -0
  327. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ssismap-1.xsd +43 -0
  328. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-struct-1.xsd +112 -0
  329. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-style-1.xsd +52 -0
  330. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-table-1.xsd +272 -0
  331. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-target-1.xsd +53 -0
  332. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-text-1.xsd +67 -0
  333. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-model-1.xsd +677 -0
  334. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-module-redefines-1.xsd +335 -0
  335. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-modules-1.xsd +528 -0
  336. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11.xsd +104 -0
  337. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml2.xsd +21 -0
  338. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-1.xsd +73 -0
  339. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-2.xsd +74 -0
  340. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-1.xsd +73 -0
  341. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-2.xsd +75 -0
  342. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-1.xsd +34 -0
  343. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-2.xsd +34 -0
  344. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-handlers-2.xsd +98 -0
  345. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-definitions.xsd +225 -0
  346. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-model.xsd +681 -0
  347. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-modules.xsd +535 -0
  348. arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0.xsd +40 -0
  349. arelle/resources/cache/http/www.xbrl.org/2008/match-filter.xsd +94 -0
  350. arelle/resources/cache/http/www.xbrl.org/2008/period-filter.xsd +86 -0
  351. arelle/resources/cache/http/www.xbrl.org/2008/registry.xsd +145 -0
  352. arelle/resources/cache/http/www.xbrl.org/2008/relative-filter.xsd +38 -0
  353. arelle/resources/cache/http/www.xbrl.org/2008/segment-scenario-filter.xsd +41 -0
  354. arelle/resources/cache/http/www.xbrl.org/2008/tuple-filter.xsd +83 -0
  355. arelle/resources/cache/http/www.xbrl.org/2008/unit-filter.xsd +58 -0
  356. arelle/resources/cache/http/www.xbrl.org/2008/validation.xsd +78 -0
  357. arelle/resources/cache/http/www.xbrl.org/2008/value-assertion.xsd +43 -0
  358. arelle/resources/cache/http/www.xbrl.org/2008/value-filter.xsd +43 -0
  359. arelle/resources/cache/http/www.xbrl.org/2008/variable.xsd +240 -0
  360. arelle/resources/cache/http/www.xbrl.org/2010/aspect-cover-filter.xsd +67 -0
  361. arelle/resources/cache/http/www.xbrl.org/2010/concept-relation-filter.xsd +108 -0
  362. arelle/resources/cache/http/www.xbrl.org/2010/custom-function-implementation.xsd +71 -0
  363. arelle/resources/cache/http/www.xbrl.org/2010/generic-message.xsd +68 -0
  364. arelle/resources/cache/http/www.xbrl.org/2010/validation-message.xsd +50 -0
  365. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
  366. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
  367. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xl-2003-12-31.xsd +248 -0
  368. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xlink-2003-12-31.xsd +117 -0
  369. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xframes-1.xsd +166 -0
  370. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-applet-1.xsd +66 -0
  371. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-attribs-1.xsd +72 -0
  372. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-base-1.xsd +36 -0
  373. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-form-1.xsd +195 -0
  374. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-table-1.xsd +169 -0
  375. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-model-1.xsd +376 -0
  376. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
  377. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-modules-1.xsd +259 -0
  378. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10.xsd +98 -0
  379. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-bdo-1.xsd +78 -0
  380. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkphras-1.xsd +161 -0
  381. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkpres-1.xsd +37 -0
  382. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkstruct-1.xsd +49 -0
  383. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-charent-1.xsd +38 -0
  384. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-copyright-1.xsd +29 -0
  385. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-csismap-1.xsd +96 -0
  386. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-datatypes-1.xsd +128 -0
  387. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-edit-1.xsd +39 -0
  388. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-events-1.xsd +130 -0
  389. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-form-1.xsd +326 -0
  390. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-frames-1.xsd +113 -0
  391. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-framework-1.xsd +66 -0
  392. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-hypertext-1.xsd +47 -0
  393. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-iframe-1.xsd +68 -0
  394. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-image-1.xsd +45 -0
  395. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlphras-1.xsd +163 -0
  396. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlpres-1.xsd +39 -0
  397. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstruct-1.xsd +50 -0
  398. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstyle-1.xsd +27 -0
  399. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-legacy-1.xsd +97 -0
  400. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-link-1.xsd +45 -0
  401. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-list-1.xsd +99 -0
  402. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-meta-1.xsd +42 -0
  403. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-misc-1.xsd +441 -0
  404. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-nameident-1.xsd +63 -0
  405. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-notations-1.xsd +69 -0
  406. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-object-1.xsd +76 -0
  407. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-param-1.xsd +51 -0
  408. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-pres-1.xsd +51 -0
  409. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-1.xsd +171 -0
  410. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-basic-1.xsd +89 -0
  411. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-script-1.xsd +70 -0
  412. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ssismap-1.xsd +43 -0
  413. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-struct-1.xsd +112 -0
  414. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-style-1.xsd +52 -0
  415. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-table-1.xsd +272 -0
  416. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-target-1.xsd +53 -0
  417. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-text-1.xsd +67 -0
  418. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-model-1.xsd +677 -0
  419. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-module-redefines-1.xsd +335 -0
  420. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-modules-1.xsd +528 -0
  421. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11.xsd +104 -0
  422. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml2.xsd +21 -0
  423. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-1.xsd +73 -0
  424. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-2.xsd +74 -0
  425. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-1.xsd +73 -0
  426. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-2.xsd +75 -0
  427. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-1.xsd +34 -0
  428. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-2.xsd +34 -0
  429. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-handlers-2.xsd +98 -0
  430. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-definitions.xsd +252 -0
  431. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-model.xsd +681 -0
  432. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-modules.xsd +535 -0
  433. arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1.xsd +40 -0
  434. arelle/resources/cache/http/www.xbrl.org/2013/match-filter.xsd +94 -0
  435. arelle/resources/cache/http/www.xbrl.org/2013/preferred-label.xsd +12 -0
  436. arelle/resources/cache/http/www.xbrl.org/2013/versioning-base.xsd +142 -0
  437. arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-details.xsd +143 -0
  438. arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-use.xsd +64 -0
  439. arelle/resources/cache/http/www.xbrl.org/2013/versioning-dimensions.xsd +162 -0
  440. arelle/resources/cache/http/www.xbrl.org/2014/extensible-enumerations.xsd +27 -0
  441. arelle/resources/cache/http/www.xbrl.org/2014/table.xsd +356 -0
  442. arelle/resources/cache/http/www.xbrl.org/2014/tablemodel.xsd +156 -0
  443. arelle/resources/cache/http/www.xbrl.org/2016/assertion-severity.xsd +29 -0
  444. arelle/resources/cache/http/www.xbrl.org/2016/severities.xml +21 -0
  445. arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package-catalog.xsd +38 -0
  446. arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package.xsd +154 -0
  447. arelle/resources/cache/http/www.xbrl.org/2022/assertion-severity.xsd +43 -0
  448. arelle/resources/cache/http/www.xbrl.org/2022/severities.xml +21 -0
  449. arelle/resources/cache/http/www.xbrl.org/dtr/type/nonNumeric-2009-12-16.xsd +76 -0
  450. arelle/resources/cache/http/www.xbrl.org/dtr/type/numeric-2009-12-16.xsd +78 -0
  451. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/accounting-arcrole-2023-01-04.xsd +39 -0
  452. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/deprecated-2009-12-16.xsd +29 -0
  453. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/esma-arcrole-2018-11-21.xsd +14 -0
  454. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/factExplanatory-2009-12-16.xsd +13 -0
  455. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/jpfr-arcrole-2007-11-07.xsd +27 -0
  456. arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/parent-child-2013-09-19.xsd +12 -0
  457. arelle/resources/cache/http/www.xbrl.org/lrr/role/deprecated-2009-12-16.xsd +17 -0
  458. arelle/resources/cache/http/www.xbrl.org/lrr/role/jpfr-role-2007-11-07.xsd +47 -0
  459. arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2008-03-31.xsd +30 -0
  460. arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2009-12-16.xsd +33 -0
  461. arelle/resources/cache/http/www.xbrl.org/lrr/role/negative-2009-12-16.xsd +25 -0
  462. arelle/resources/cache/http/www.xbrl.org/lrr/role/net-2009-12-16.xsd +13 -0
  463. arelle/resources/cache/http/www.xbrl.org/lrr/role/positive-2009-12-16.xsd +25 -0
  464. arelle/resources/cache/http/www.xbrl.org/lrr/role/property-2022-09-28.xsd +15 -0
  465. arelle/resources/cache/http/www.xbrl.org/lrr/role/reference-2009-12-16.xsd +21 -0
  466. arelle/resources/cache/http/www.xbrl.org/lrr/role/restated-2006-02-21.xsd +19 -0
  467. arelle/resources/cache/http/www.xbrl.org/utr/2012-01-30/utr.xml +4543 -0
  468. arelle/resources/cache/http/www.xbrl.org/utr/2012-10-31/utr.xml +4510 -0
  469. arelle/resources/cache/http/www.xbrl.org/utr/2012-11-30/utr.xml +4567 -0
  470. arelle/resources/cache/http/www.xbrl.org/utr/2013-02-28/utr.xml +5180 -0
  471. arelle/resources/cache/http/www.xbrl.org/utr/2013-05-17/utr.xml +5349 -0
  472. arelle/resources/cache/http/www.xbrl.org/utr/2016-08-10/utr.xml +5363 -0
  473. arelle/resources/cache/http/www.xbrl.org/utr/2017-07-12/utr.xml +6164 -0
  474. arelle/resources/cache/http/www.xbrl.org/utr/2021-02-16/utr.xml +6370 -0
  475. arelle/resources/cache/http/www.xbrl.org/utr/2021-12-08/utr.xml +6493 -0
  476. arelle/resources/cache/http/www.xbrl.org/utr/2022-02-16/utr.xml +6551 -0
  477. arelle/resources/cache/http/www.xbrl.org/utr/2022-07-20/utr.xml +6638 -0
  478. arelle/resources/cache/http/www.xbrl.org/utr/2023-12-20/utr.xml +6680 -0
  479. arelle/resources/cache/http/www.xbrl.org/utr/2024-01-31/utr.xml +6680 -0
  480. arelle/resources/cache/http/www.xbrl.org/utr/2024-10-22/utr.xml +6693 -0
  481. arelle/resources/cache/http/www.xbrl.org/utr/utr.xml +6693 -0
  482. arelle/resources/cache/https/www.xbrl.org/2005/conformance.xsd +87 -0
  483. arelle/resources/cache/https/www.xbrl.org/2020/extensible-enumerations-2.0.xsd +51 -0
  484. arelle/resources/cache/https/www.xbrl.org/2023/calculation-1.1.xsd +27 -0
  485. arelle/resources/cache/https/www.xbrl.org/dtr/type/2020-01-21/types.xsd +812 -0
  486. arelle/resources/cache/https/www.xbrl.org/dtr/type/2022-03-31/types.xsd +847 -0
  487. arelle/resources/cache/https/www.xbrl.org/dtr/type/2024-01-31/types.xsd +897 -0
  488. arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-def.xml +68 -0
  489. arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-label.xml +84 -0
  490. arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators.xsd +67 -0
  491. arelle/resources/libs/Tktable2.11/linux-x86_64/README.txt +149 -0
  492. arelle/resources/libs/Tktable2.11/linux-x86_64/html/tkTable.html +2039 -0
  493. arelle/resources/libs/Tktable2.11/linux-x86_64/libTktable2.11.so +0 -0
  494. arelle/resources/libs/Tktable2.11/linux-x86_64/license.txt +51 -0
  495. arelle/resources/libs/Tktable2.11/linux-x86_64/pkgIndex.tcl +3 -0
  496. arelle/resources/libs/Tktable2.11/linux-x86_64/tkTable.tcl +825 -0
  497. arelle/resources/libs/Tktable2.11/linux-x86_64/tktable.py +674 -0
  498. arelle/resources/libs/Tktable2.11/macos-arm64/README.txt +149 -0
  499. arelle/resources/libs/Tktable2.11/macos-arm64/html/tkTable.html +2039 -0
  500. arelle/resources/libs/Tktable2.11/macos-arm64/libTktable2.11.dylib +0 -0
  501. arelle/resources/libs/Tktable2.11/macos-arm64/license.txt +51 -0
  502. arelle/resources/libs/Tktable2.11/macos-arm64/pkgIndex.tcl +2 -0
  503. arelle/resources/libs/Tktable2.11/macos-arm64/tkTable.tcl +825 -0
  504. arelle/resources/libs/Tktable2.11/macos-arm64/tktable.py +674 -0
  505. arelle/resources/libs/Tktable2.11/macos-x86_64/README.txt +149 -0
  506. arelle/resources/libs/Tktable2.11/macos-x86_64/html/tkTable.html +2039 -0
  507. arelle/resources/libs/Tktable2.11/macos-x86_64/libTktable2.11.dylib +0 -0
  508. arelle/resources/libs/Tktable2.11/macos-x86_64/license.txt +51 -0
  509. arelle/resources/libs/Tktable2.11/macos-x86_64/pkgIndex.tcl +2 -0
  510. arelle/resources/libs/Tktable2.11/macos-x86_64/tkTable.tcl +825 -0
  511. arelle/resources/libs/Tktable2.11/macos-x86_64/tktable.py +674 -0
  512. arelle/resources/libs/Tktable2.11/win-x86_64/Tktable.dll +0 -0
  513. arelle/resources/libs/Tktable2.11/win-x86_64/pkgIndex.tcl +2 -0
  514. arelle/resources/libs/Tktable2.11/win-x86_64/tkTable.tcl +825 -0
  515. arelle/typing.py +9 -4
  516. arelle/utils/Contexts.py +38 -0
  517. arelle/utils/EntryPointDetection.py +139 -0
  518. arelle/utils/Equivalence.py +22 -0
  519. arelle/utils/{validate/PluginValidationData.py → PluginData.py} +5 -2
  520. arelle/utils/PluginHooks.py +256 -5
  521. arelle/utils/Units.py +36 -0
  522. arelle/utils/validate/Decorator.py +5 -3
  523. arelle/utils/validate/DetectScriptsInXhtml.py +99 -0
  524. arelle/utils/validate/ESEFImage.py +283 -0
  525. arelle/utils/validate/Validation.py +9 -1
  526. arelle/utils/validate/ValidationPlugin.py +74 -11
  527. arelle/utils/validate/ValidationUtil.py +55 -0
  528. arelle/webserver/bottle.py +5 -4424
  529. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/METADATA +51 -42
  530. arelle_release-2.37.71.dist-info/RECORD +697 -0
  531. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/WHEEL +1 -1
  532. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info/licenses}/LICENSE.md +1 -4
  533. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/top_level.txt +0 -1
  534. arelle/DialogOpenTaxonomyPackage.py +0 -1
  535. arelle/RenderingResolver.py +0 -624
  536. arelle/examples/.pydevproject +0 -5
  537. arelle/examples/CustomLogger.py +0 -43
  538. arelle/examples/LoadEFMvalidate.py +0 -32
  539. arelle/examples/LoadSavePreLbCsv.py +0 -26
  540. arelle/examples/LoadValidate.cs +0 -31
  541. arelle/examples/LoadValidate.py +0 -36
  542. arelle/examples/LoadValidateCmdLine.java +0 -69
  543. arelle/examples/LoadValidatePostedZip.java +0 -57
  544. arelle/examples/LoadValidateWebService.java +0 -34
  545. arelle/examples/SaveTableToExelle.py +0 -140
  546. arelle/examples/TR3toTR4.py +0 -88
  547. arelle/examples/plugin/bigInstance.py +0 -394
  548. arelle/examples/plugin/cmdWebServerExtension.py +0 -42
  549. arelle/examples/plugin/crashTest.py +0 -38
  550. arelle/examples/plugin/formulaSuiteConverter.py +0 -212
  551. arelle/examples/plugin/functionsCustom.py +0 -59
  552. arelle/examples/plugin/hello_dolly.py +0 -64
  553. arelle/examples/plugin/hello_i18n.pot +0 -26
  554. arelle/examples/plugin/hello_i18n.py +0 -32
  555. arelle/examples/plugin/importTestChild1.py +0 -21
  556. arelle/examples/plugin/importTestChild2.py +0 -22
  557. arelle/examples/plugin/importTestGrandchild1.py +0 -21
  558. arelle/examples/plugin/importTestGrandchild2.py +0 -21
  559. arelle/examples/plugin/importTestImported1.py +0 -23
  560. arelle/examples/plugin/importTestImported11.py +0 -22
  561. arelle/examples/plugin/importTestParent.py +0 -48
  562. arelle/examples/plugin/locale/fr/LC_MESSAGES/hello_i18n.po +0 -25
  563. arelle/examples/plugin/packagedImportTest/__init__.py +0 -47
  564. arelle/examples/plugin/packagedImportTest/importTestChild1.py +0 -21
  565. arelle/examples/plugin/packagedImportTest/importTestChild2.py +0 -22
  566. arelle/examples/plugin/packagedImportTest/importTestGrandchild1.py +0 -21
  567. arelle/examples/plugin/packagedImportTest/importTestGrandchild2.py +0 -21
  568. arelle/examples/plugin/packagedImportTest/importTestImported1.py +0 -24
  569. arelle/examples/plugin/packagedImportTest/importTestImported11.py +0 -21
  570. arelle/examples/plugin/packagedImportTest/subdir/importTestImported111.py +0 -21
  571. arelle/examples/plugin/packagedImportTest/subdir/subsubdir/importTestImported1111.py +0 -21
  572. arelle/examples/plugin/sakaCalendar.py +0 -215
  573. arelle/examples/plugin/saveInstanceInfoset.py +0 -121
  574. arelle/examples/plugin/streamingExtensions.py +0 -335
  575. arelle/examples/plugin/testcaseCalc11ValidateSetup.py +0 -32
  576. arelle/examples/plugin/testcaseIxExpectedHtmlFixup.py +0 -45
  577. arelle/examples/plugin/updateTableLB.py +0 -242
  578. arelle/examples/plugin/validate/XYZ/DisclosureSystems.py +0 -2
  579. arelle/examples/plugin/validate/XYZ/PluginValidationDataExtension.py +0 -10
  580. arelle/examples/plugin/validate/XYZ/ValidationPluginExtension.py +0 -49
  581. arelle/examples/plugin/validate/XYZ/__init__.py +0 -75
  582. arelle/examples/plugin/validate/XYZ/resources/config.xml +0 -16
  583. arelle/examples/plugin/validate/XYZ/rules/rules01.py +0 -109
  584. arelle/examples/plugin/validate/XYZ/rules/rules02.py +0 -58
  585. arelle/examples/plugin/validateSchemaLxml.py +0 -156
  586. arelle/examples/plugin/validateTableInfoset.py +0 -52
  587. arelle/examples/us-gaap-dei-docType-extraction-frm.xml +0 -90
  588. arelle/examples/us-gaap-dei-ratio-cash-frm.xml +0 -150
  589. arelle/plugin/functionsXmlCreation.py +0 -106
  590. arelle/plugin/instanceInfo.py +0 -306
  591. arelle/plugin/loadFromOIM-2018.py +0 -1282
  592. arelle/plugin/objectmaker.py +0 -285
  593. arelle/plugin/sphinx/FormulaGenerator.py +0 -823
  594. arelle/plugin/sphinx/SphinxContext.py +0 -404
  595. arelle/plugin/sphinx/SphinxEvaluator.py +0 -783
  596. arelle/plugin/sphinx/SphinxMethods.py +0 -1287
  597. arelle/plugin/sphinx/SphinxParser.py +0 -1093
  598. arelle/plugin/sphinx/SphinxValidator.py +0 -163
  599. arelle/plugin/sphinx/US-GAAP Ratios Example.xsr +0 -52
  600. arelle/plugin/sphinx/__init__.py +0 -285
  601. arelle/plugin/transforms/SEC/__init__.py +0 -308
  602. arelle/plugin/transforms/SEC/conf/README.md +0 -39
  603. arelle/plugin/transforms/SEC/conf/extractTestcase.sh +0 -2
  604. arelle/plugin/transforms/SEC/conf/extractTestcase.xsl +0 -109
  605. arelle/plugin/transforms/SEC/conf/runIxtSecTests.sh +0 -16
  606. arelle/plugin/transforms/SEC/conf/saxon9.jar +0 -0
  607. arelle/plugin/transforms/SEC/conf/testcase.xml +0 -7117
  608. arelle/plugin/transforms/SEC/conf/tests.xml +0 -848
  609. arelle/plugin/transforms/SEC/text2num.py +0 -110
  610. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-boolballotbox.xml +0 -66
  611. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-countrynameen.xml +0 -65
  612. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-datequarterend.xml +0 -66
  613. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durday.xml +0 -61
  614. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durhour.xml +0 -69
  615. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durmonth.xml +0 -71
  616. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durweek.xml +0 -70
  617. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durwordsen.xml +0 -56
  618. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-duryear.xml +0 -64
  619. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-edgarprovcountryen.xml +0 -65
  620. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-entityfilercategoryen.xml +0 -63
  621. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-exchnameen.xml +0 -86
  622. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-numwordsen.xml +0 -55
  623. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-stateprovnameen.xml +0 -64
  624. arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-yesnoballotbox.xml +0 -66
  625. arelle/plugin/transforms/SEC/transformationRegistry/registry/transform-registry.xml +0 -314
  626. arelle/plugin/transforms/SEC/transformationRegistry/schema/inlinexbrl-sec-transformation.xsd +0 -418
  627. arelle/plugin/validate/EFM/Consts.py +0 -362
  628. arelle/plugin/validate/EFM/DTS.py +0 -569
  629. arelle/plugin/validate/EFM/Dimensions.py +0 -264
  630. arelle/plugin/validate/EFM/Document.py +0 -206
  631. arelle/plugin/validate/EFM/Filing.py +0 -4383
  632. arelle/plugin/validate/EFM/IsolateSeparateIXDSes.py +0 -19
  633. arelle/plugin/validate/EFM/MessageNumericId.py +0 -142
  634. arelle/plugin/validate/EFM/PreCalAlignment.py +0 -324
  635. arelle/plugin/validate/EFM/Util.py +0 -688
  636. arelle/plugin/validate/EFM/__init__.py +0 -843
  637. arelle/plugin/validate/EFM/config.xml +0 -333
  638. arelle/plugin/validate/EFM/resources/README.md +0 -57
  639. arelle/plugin/validate/EFM/resources/axiswarnings.json +0 -27
  640. arelle/plugin/validate/EFM/resources/cef-deprecated-concepts.json +0 -8
  641. arelle/plugin/validate/EFM/resources/country-deprecated-concepts.json +0 -19
  642. arelle/plugin/validate/EFM/resources/currency-deprecated-concepts.json +0 -7
  643. arelle/plugin/validate/EFM/resources/dei-deprecated-concepts.json +0 -8
  644. arelle/plugin/validate/EFM/resources/dei-validations.json +0 -2884
  645. arelle/plugin/validate/EFM/resources/dqc-us-rules.json +0 -1389
  646. arelle/plugin/validate/EFM/resources/ecd-deprecated-concepts.json +0 -1
  647. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-16-4.xml +0 -115
  648. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-0-4.xml +0 -300
  649. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-1.xml +0 -304
  650. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-2.xml +0 -290
  651. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-3-1.xml +0 -294
  652. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.1.xml +0 -549
  653. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.2.xml +0 -506
  654. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.3.xml +0 -496
  655. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-1.xml +0 -662
  656. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-2.xml +0 -3761
  657. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-3.xml +0 -3577
  658. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-1.xml +0 -4020
  659. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-2.xml +0 -3320
  660. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-3.xml +0 -2998
  661. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2012.xml +0 -957
  662. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2013.xml +0 -982
  663. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2014.xml +0 -1001
  664. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2015.xml +0 -1076
  665. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2016.xml +0 -120
  666. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-1.xml +0 -3329
  667. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-2.xml +0 -1230
  668. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-3.xml +0 -1113
  669. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-4.xml +0 -1321
  670. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1-preview.xml +0 -1721
  671. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1.xml +0 -1841
  672. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2-2.xml +0 -1450
  673. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2.xml +0 -1429
  674. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-4.xml +0 -1527
  675. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1-1.xml +0 -2049
  676. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1.xml +0 -2065
  677. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-2.xml +0 -1674
  678. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-3.xml +0 -1715
  679. arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-all-years.xml +0 -10671
  680. arelle/plugin/validate/EFM/resources/edgartaxonomies/erxl.xsd +0 -69
  681. arelle/plugin/validate/EFM/resources/edgartaxonomies/extendedtaxonomies-all-years.xml +0 -18
  682. arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrs-taxonomies.xml +0 -3126
  683. arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrstaxonomies-all-years.xml +0 -22
  684. arelle/plugin/validate/EFM/resources/ex26-validations.json +0 -255
  685. arelle/plugin/validate/EFM/resources/exch-deprecated-concepts.json +0 -163
  686. arelle/plugin/validate/EFM/resources/ifrs-full-deprecated-concepts.json +0 -204
  687. arelle/plugin/validate/EFM/resources/invest-deprecated-concepts.json +0 -99
  688. arelle/plugin/validate/EFM/resources/ixbrl-transform-registries.json +0 -16
  689. arelle/plugin/validate/EFM/resources/naics-deprecated-concepts.json +0 -295
  690. arelle/plugin/validate/EFM/resources/oef-deprecated-concepts.json +0 -59
  691. arelle/plugin/validate/EFM/resources/other-standard-taxonomies.json +0 -12
  692. arelle/plugin/validate/EFM/resources/rr-deprecated-concepts.json +0 -14
  693. arelle/plugin/validate/EFM/resources/rxp-deprecated-concepts.json +0 -1
  694. arelle/plugin/validate/EFM/resources/shr-deprecated-concepts.json +0 -1
  695. arelle/plugin/validate/EFM/resources/sic-deprecated-concepts.json +0 -1
  696. arelle/plugin/validate/EFM/resources/signwarnings.json +0 -112
  697. arelle/plugin/validate/EFM/resources/srt-deprecated-concepts.json +0 -1
  698. arelle/plugin/validate/EFM/resources/stpr-deprecated-concepts.json +0 -1
  699. arelle/plugin/validate/EFM/resources/taxonomy-compatibility.json +0 -79
  700. arelle/plugin/validate/EFM/resources/us-gaap-deprecated-concepts.json +0 -2886
  701. arelle/plugin/validate/EFM/resources/us-gaap-rels-2020.json +0 -29068
  702. arelle/plugin/validate/EFM/resources/us-gaap-rels-2021.json +0 -29598
  703. arelle/plugin/validate/EFM/resources/us-gaap-rels-2022.json +0 -29141
  704. arelle/plugin/validate/EFM/resources/us-gaap-rels-2023.json +0 -29400
  705. arelle/plugin/validate/EFM/resources/vip-deprecated-concepts.json +0 -1
  706. arelle/plugin/validate/EFM/tools/CheckTxmyRefs.py +0 -180
  707. arelle/plugin/validate/EFM-htm/Const.py +0 -205
  708. arelle/plugin/validate/EFM-htm/__init__.py +0 -217
  709. arelle/plugin/validate/EFM-htm/config.xml +0 -17
  710. arelle/plugin/validate/EFM-htm/resources/efm-htm.dtd +0 -664
  711. arelle/plugin/validate/ESEF/ESEF_Current/Image.py +0 -199
  712. arelle/plugin/validate/ESEF_2022/__init__.py +0 -47
  713. arelle/plugin/validate/GFM/__init__.py +0 -59
  714. arelle/plugin/validate/GFM/config.xml +0 -82
  715. arelle/plugin/validate/SBRnl/CustomLoader.py +0 -19
  716. arelle/plugin/validate/SBRnl/DTS.py +0 -305
  717. arelle/plugin/validate/SBRnl/Dimensions.py +0 -357
  718. arelle/plugin/validate/SBRnl/Document.py +0 -799
  719. arelle/plugin/validate/SBRnl/Filing.py +0 -467
  720. arelle/plugin/validate/SBRnl/__init__.py +0 -75
  721. arelle/plugin/validate/SBRnl/config.xml +0 -26
  722. arelle/plugin/validate/SBRnl/sbr-nl-taxonomies.xml +0 -754
  723. arelle/plugin/validate/USBestPractices.py +0 -570
  724. arelle/plugin/validate/USCorpAction.py +0 -557
  725. arelle/plugin/validate/USSecTagging.py +0 -337
  726. arelle/plugin/validate/XDC/__init__.py +0 -77
  727. arelle/plugin/validate/XDC/config.xml +0 -20
  728. arelle/plugin/validate/XFsyntax/__init__.py +0 -64
  729. arelle/plugin/validate/XFsyntax/xf.py +0 -2227
  730. arelle/plugin/validate/__init__.py +0 -20
  731. arelle/plugin/validate/calc2.py +0 -536
  732. arelle/plugin/validateSBRnl.py +0 -530
  733. arelle/scripts-macOS/startWebServer.command +0 -3
  734. arelle/scripts-unix/startWebServer.sh +0 -1
  735. arelle/scripts-windows/startWebServer.bat +0 -5
  736. arelle_release-2.17.1.dist-info/RECORD +0 -676
  737. tests/__init__.py +0 -0
  738. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/ArelleGUITest.csproj +0 -30
  739. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Tests.cs +0 -381
  740. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Usings.cs +0 -1
  741. tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest.sln +0 -31
  742. tests/integration_tests/ui_tests/resources/workiva.zip +0 -0
  743. tests/integration_tests/validation/README.md +0 -50
  744. tests/integration_tests/validation/conformance_suite_config.py +0 -59
  745. tests/integration_tests/validation/conformance_suite_configs.py +0 -63
  746. tests/integration_tests/validation/conformance_suite_configurations/efm_current.py +0 -261
  747. tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2021.py +0 -85
  748. tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2022.py +0 -90
  749. tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2021.py +0 -15
  750. tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2022.py +0 -15
  751. tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py +0 -13
  752. tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py +0 -13
  753. tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py +0 -13
  754. tests/integration_tests/validation/conformance_suite_configurations/xbrl_2_1.py +0 -34
  755. tests/integration_tests/validation/conformance_suite_configurations/xbrl_calculations_1_1.py +0 -40
  756. tests/integration_tests/validation/conformance_suite_configurations/xbrl_dimensions_1_0.py +0 -28
  757. tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_1_0.py +0 -10
  758. tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_2_0.py +0 -10
  759. tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0.py +0 -9
  760. tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_assertion_severity_2_0.py +0 -9
  761. tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_function_registry.py +0 -14
  762. tests/integration_tests/validation/conformance_suite_configurations/xbrl_ixbrl_1_1.py +0 -22
  763. tests/integration_tests/validation/conformance_suite_configurations/xbrl_link_role_registry_1_0.py +0 -11
  764. tests/integration_tests/validation/conformance_suite_configurations/xbrl_oim_1_0.py +0 -19
  765. tests/integration_tests/validation/conformance_suite_configurations/xbrl_table_linkbase_1_0.py +0 -296
  766. tests/integration_tests/validation/conformance_suite_configurations/xbrl_taxonomy_packages_1_0.py +0 -13
  767. tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_3.py +0 -13
  768. tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_4.py +0 -13
  769. tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_5.py +0 -13
  770. tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_malformed_1_0.py +0 -31
  771. tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_registry_1_0.py +0 -22
  772. tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_structure_1_0.py +0 -18
  773. tests/integration_tests/validation/conftest.py +0 -24
  774. tests/integration_tests/validation/discover_tests.py +0 -22
  775. tests/integration_tests/validation/download_conformance_suites.py +0 -47
  776. tests/integration_tests/validation/run_conformance_suites.py +0 -175
  777. tests/integration_tests/validation/test_conformance_suites.py +0 -14
  778. tests/integration_tests/validation/validation_util.py +0 -271
  779. tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-invalid-period.xbrl +0 -63
  780. tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-testcase.xml +0 -22
  781. tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-missing.xbrl +0 -53
  782. tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-multiple.xbrl +0 -60
  783. tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-testcase.xml +0 -33
  784. tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-invalid.xbrl +0 -57
  785. tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-testcase.xml +0 -22
  786. tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-invalid.xbrl +0 -58
  787. tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-testcase.xml +0 -22
  788. tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-invalid.xbrl +0 -63
  789. tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-testcase.xml +0 -22
  790. tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-missing.xbrl +0 -61
  791. tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-testcase.xml +0 -22
  792. tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-invalid-date.xbrl +0 -89
  793. tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-testcase.xml +0 -22
  794. tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-invalid-file-extension.xml +0 -56
  795. tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-testcase.xml +0 -22
  796. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-invalid-lang.xbrl +0 -56
  797. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-missing-lang.xbrl +0 -55
  798. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-testcase.xml +0 -33
  799. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-entrypoint.xsd +0 -6
  800. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
  801. tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-testcase.xml +0 -22
  802. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
  803. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-testcase.xml +0 -22
  804. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
  805. tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-testcase.xml +0 -22
  806. tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-file.xbrl +0 -2
  807. tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-zip.zip +0 -0
  808. tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-testcase.xml +0 -33
  809. tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-invalid-doctype.xbrl +0 -4
  810. tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-testcase.xml +0 -22
  811. tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-invalid-encoding.xbrl +0 -0
  812. tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-testcase.xml +0 -22
  813. tests/resources/conformance_suites/nl_nt16/fr_nl/1-06-testcase.xml +0 -22
  814. tests/resources/conformance_suites/nl_nt16/fr_nl/1-06.invalid.xbrl +0 -2
  815. tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-file.xbrl +0 -8
  816. tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-zip.zip +0 -0
  817. tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-testcase.xml +0 -33
  818. tests/resources/conformance_suites/nl_nt16/index.xml +0 -20
  819. tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-invalid-period.xbrl +0 -63
  820. tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-testcase.xml +0 -22
  821. tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-missing.xbrl +0 -53
  822. tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-multiple.xbrl +0 -60
  823. tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-testcase.xml +0 -33
  824. tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-invalid.xbrl +0 -57
  825. tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-testcase.xml +0 -22
  826. tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-invalid.xbrl +0 -58
  827. tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-testcase.xml +0 -22
  828. tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-invalid.xbrl +0 -63
  829. tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-testcase.xml +0 -22
  830. tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-missing.xbrl +0 -61
  831. tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-testcase.xml +0 -22
  832. tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-invalid-date.xbrl +0 -89
  833. tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-testcase.xml +0 -22
  834. tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-invalid-file-extension.xml +0 -56
  835. tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-testcase.xml +0 -22
  836. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-invalid-lang.xbrl +0 -56
  837. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-missing-lang.xbrl +0 -55
  838. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-testcase.xml +0 -33
  839. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-entrypoint.xsd +0 -6
  840. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
  841. tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-testcase.xml +0 -22
  842. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
  843. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-testcase.xml +0 -22
  844. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
  845. tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-testcase.xml +0 -22
  846. tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-file.xbrl +0 -2
  847. tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-zip.zip +0 -0
  848. tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-testcase.xml +0 -33
  849. tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-invalid-doctype.xbrl +0 -4
  850. tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-testcase.xml +0 -22
  851. tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-invalid-encoding.xbrl +0 -0
  852. tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-testcases.xml +0 -22
  853. tests/resources/conformance_suites/nl_nt17/fr_nl/1-06-testcase.xml +0 -22
  854. tests/resources/conformance_suites/nl_nt17/fr_nl/1-06.invalid.xbrl +0 -2
  855. tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-file.xbrl +0 -8
  856. tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-zip.zip +0 -0
  857. tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-testcase.xml +0 -33
  858. tests/resources/conformance_suites/nl_nt17/index.xml +0 -20
  859. tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-invalid-doctype.xbrl +0 -4
  860. tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-testcase.xml +0 -22
  861. tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-invalid-encoding.xbrl +0 -0
  862. tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-testcases.xml +0 -22
  863. tests/resources/conformance_suites/nl_nt18/fr_nl/1-06-testcase.xml +0 -22
  864. tests/resources/conformance_suites/nl_nt18/fr_nl/1-06.invalid.xbrl +0 -2
  865. tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-file.xbrl +0 -2
  866. tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-zip.zip +0 -0
  867. tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-testcase.xml +0 -33
  868. tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-file.xbrl +0 -8
  869. tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-zip.zip +0 -0
  870. tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-testcase.xml +0 -33
  871. tests/resources/conformance_suites/nl_nt18/index.xml +0 -8
  872. tests/unit_tests/arelle/conftest.py +0 -16
  873. tests/unit_tests/arelle/formula/test_fact_aspects_cache.py +0 -170
  874. tests/unit_tests/arelle/plugin/test_loadfromoim.py +0 -40
  875. tests/unit_tests/arelle/plugin/test_plugin_imports.py +0 -27
  876. tests/unit_tests/arelle/test_betafeatures.py +0 -81
  877. tests/unit_tests/arelle/test_cntlr.py +0 -28
  878. tests/unit_tests/arelle/test_import.py +0 -40
  879. tests/unit_tests/arelle/test_locale.py +0 -73
  880. tests/unit_tests/arelle/test_modelmanager.py +0 -15
  881. tests/unit_tests/arelle/test_packagemanager.py +0 -65
  882. tests/unit_tests/arelle/test_pluginmanager.py +0 -176
  883. tests/unit_tests/arelle/test_qname.py +0 -140
  884. tests/unit_tests/arelle/test_runtimeoptions.py +0 -56
  885. tests/unit_tests/arelle/test_system_info.py +0 -26
  886. tests/unit_tests/arelle/test_updater.py +0 -507
  887. tests/unit_tests/arelle/test_urlutil.py +0 -49
  888. tests/unit_tests/arelle/test_version.py +0 -46
  889. tests/unit_tests/arelle/utils/validate/test_decorator.py +0 -59
  890. /arelle/{examples/plugin/validate/XYZ → plugin/validate/EDINET}/rules/__init__.py +0 -0
  891. /arelle/plugin/validate/{HMRC → UK}/consistencyChecksByName.json +0 -0
  892. /arelle/plugin/validate/{HMRC → UK}/hmrc-taxonomies.xml +0 -0
  893. {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,1991 @@
1
+ """
2
+ See COPYRIGHT.md for copyright information.
3
+ """
4
+ from __future__ import annotations
5
+
6
+ from collections import defaultdict
7
+ from collections.abc import Iterable
8
+ from pathlib import Path
9
+ from typing import Any
10
+
11
+ import regex
12
+ import unicodedata
13
+ from jaconv import jaconv
14
+
15
+ from arelle import XbrlConst, ValidateDuplicateFacts, XmlUtil
16
+ from arelle.Cntlr import Cntlr
17
+ from arelle.FileSource import FileSource
18
+ from arelle.LinkbaseType import LinkbaseType
19
+ from arelle.ModelDtsObject import ModelResource, ModelConcept
20
+ from arelle.ModelRelationshipSet import ModelRelationshipSet
21
+ from arelle.ModelValue import QName, qname
22
+ from arelle.ModelXbrl import ModelXbrl
23
+ from arelle.ValidateDuplicateFacts import DuplicateType
24
+ from arelle.ValidateXbrl import ValidateXbrl
25
+ from arelle.typing import TypeGetText
26
+ from arelle.utils.PluginHooks import ValidationHook
27
+ from arelle.utils.validate.Decorator import validation
28
+ from arelle.utils.validate.Validation import Validation
29
+ from arelle.utils.validate.ValidationUtil import hasPresentationalConceptsWithFacts
30
+ from ..Constants import AccountingStandard, HALF_KANA, JAPAN_LANGUAGE_CODES, REPORT_ELR_URI_PATTERN, REPORT_ELR_ID_PATTERN
31
+ from ..ControllerPluginData import ControllerPluginData
32
+ from ..DeiRequirements import DeiItemStatus
33
+ from ..DisclosureSystems import DISCLOSURE_SYSTEM_EDINET
34
+ from ..FilingFormat import DocumentType
35
+ from ..PluginValidationDataExtension import PluginValidationDataExtension
36
+ from ..ReportFolderType import ReportFolderType
37
+ from ..Statement import StatementType
38
+
39
+ _: TypeGetText
40
+
41
+
42
+ @validation(
43
+ hook=ValidationHook.XBRL_FINALLY,
44
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
45
+ )
46
+ def rule_balances(
47
+ pluginData: PluginValidationDataExtension,
48
+ val: ValidateXbrl,
49
+ *args: Any,
50
+ **kwargs: Any,
51
+ ) -> Iterable[Validation]:
52
+ """
53
+ EDINET.EC8057W: On the consolidated balance sheet, the sum of all liabilities and
54
+ equity must equal the sum of all assets.
55
+ EDINET.EC8058W: On the nonconsolidated balance sheet, the sum of all liabilities and
56
+ equity must equal the sum of all assets.
57
+ EDINET.EC8062W: On the consolidated statement of financial position, the sum of all liabilities and
58
+ equity must equal the sum of all assets.
59
+ EDINET.EC8064W: On the nonconsolidated statement of financial position, the sum of all liabilities and
60
+ equity must equal the sum of all assets.
61
+ """
62
+ for statementInstance in pluginData.getStatementInstances(val.modelXbrl):
63
+ statement = statementInstance.statement
64
+ for balanceSheet in statementInstance.balanceSheets:
65
+ if balanceSheet.creditSum == balanceSheet.debitSum:
66
+ continue
67
+ code = None
68
+ if statement.statementType == StatementType.BALANCE_SHEET:
69
+ if statement.isConsolidated:
70
+ code = "EDINET.EC8057W"
71
+ else:
72
+ code = "EDINET.EC8058W"
73
+ elif statement.statementType == StatementType.STATEMENT_OF_FINANCIAL_POSITION:
74
+ if statement.isConsolidated:
75
+ code = "EDINET.EC8062W"
76
+ else:
77
+ code = "EDINET.EC8064W"
78
+ assert code is not None, "Unknown balance sheet encountered."
79
+ yield Validation.warning(
80
+ codes=code,
81
+ msg=_("The %(consolidated)s %(balanceSheet)s is not balanced. "
82
+ "The sum of all liabilities and equity must equal the sum of all assets. "
83
+ "Please correct the debit (%(debitSum)s) and credit (%(creditSum)s) "
84
+ "values so that they match "
85
+ "<roleUri=%(roleUri)s> <contextID=%(contextId)s> <unitID=%(unitId)s>."),
86
+ consolidated=_("consolidated") if statement.isConsolidated
87
+ else _("nonconsolidated"),
88
+ balanceSheet=_("balance sheet") if statement.statementType == StatementType.BALANCE_SHEET
89
+ else _("statement of financial position"),
90
+ debitSum=f"{balanceSheet.debitSum:,}",
91
+ creditSum=f"{balanceSheet.creditSum:,}",
92
+ roleUri=statement.roleUri,
93
+ contextId=balanceSheet.contextId,
94
+ unitId=balanceSheet.unitId,
95
+ modelObject=balanceSheet.facts,
96
+ )
97
+
98
+
99
+ @validation(
100
+ hook=ValidationHook.XBRL_FINALLY,
101
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
102
+ )
103
+ def rule_EC1057E(
104
+ pluginData: PluginValidationDataExtension,
105
+ val: ValidateXbrl,
106
+ *args: Any,
107
+ **kwargs: Any,
108
+ ) -> Iterable[Validation]:
109
+ """
110
+ EDINET.EC1057E: The submission date on the cover page has not been filled in.
111
+ Ensure that there is a nonnil value disclosed for FilingDateCoverPage
112
+ Note: This rule is only applicable to the public documents.
113
+ """
114
+ facts = [
115
+ fact
116
+ for qname in (
117
+ pluginData.jpcrpEsrFilingDateCoverPageQn,
118
+ pluginData.jpcrpFilingDateCoverPageQn,
119
+ pluginData.jpspsFilingDateCoverPageQn
120
+ )
121
+ for fact in pluginData.iterValidNonNilFacts(val.modelXbrl, qname)
122
+ ]
123
+ for modelDocument in pluginData.iterCoverPages(val.modelXbrl):
124
+ if any(fact.modelDocument == modelDocument for fact in facts):
125
+ continue
126
+ if not (pluginData.hasValidNonNilFact(val.modelXbrl, pluginData.jpcrpEsrFilingDateCoverPageQn)
127
+ or pluginData.hasValidNonNilFact(val.modelXbrl, pluginData.jpcrpFilingDateCoverPageQn)
128
+ or pluginData.hasValidNonNilFact(val.modelXbrl, pluginData.jpspsFilingDateCoverPageQn)):
129
+ yield Validation.error(
130
+ codes='EDINET.EC1057E',
131
+ msg=_("There is no submission date ('【提出日】') on the cover page. "
132
+ "File name: '%(file)s'. "
133
+ "Please add '【提出日】' to the relevant file."),
134
+ file=modelDocument.basename,
135
+ )
136
+
137
+
138
+ @validation(
139
+ hook=ValidationHook.XBRL_FINALLY,
140
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
141
+ )
142
+ def rule_EC5002E(
143
+ pluginData: PluginValidationDataExtension,
144
+ val: ValidateXbrl,
145
+ *args: Any,
146
+ **kwargs: Any,
147
+ ) -> Iterable[Validation]:
148
+ """
149
+ EDINET.EC5002E: A unit other than number of shares (xbrli:shares) has been set for the
150
+ Number of Shares (xbrli:sharesItemType) item '{xxx}yyy'.
151
+ Please check the units and enter the correct information.
152
+
153
+ Similar to "xbrl.4.8.2:sharesFactUnit-notSharesMeasure" and "xbrl.4.8.2:sharesFactUnit-notSingleMeasure"
154
+ TODO: Consolidate this rule with the above two rules if possible.
155
+ """
156
+ errorFacts = []
157
+ for fact in val.modelXbrl.facts:
158
+ concept = fact.concept
159
+ if concept is None or not concept.isShares:
160
+ continue
161
+ unit = fact.unit
162
+ measures = unit.measures
163
+ if (
164
+ not measures or
165
+ len(measures[0]) != 1 or
166
+ len(measures[1]) != 0 or
167
+ measures[0][0] != XbrlConst.qnXbrliShares
168
+ ):
169
+ errorFacts.append(fact)
170
+ for fact in errorFacts:
171
+ yield Validation.error(
172
+ codes='EDINET.EC5002E',
173
+ msg=_("A unit other than number of shares (xbrli:shares) has been set for "
174
+ "the Number of Shares (xbrli:sharesItemType) item '%(qname)s'. "
175
+ "Please check the units and enter the correct information."),
176
+ qname=fact.qname.clarkNotation,
177
+ modelObject=fact,
178
+ )
179
+
180
+
181
+ @validation(
182
+ hook=ValidationHook.XBRL_FINALLY,
183
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
184
+ )
185
+ def rule_EC5602R(
186
+ pluginData: PluginValidationDataExtension,
187
+ val: ValidateXbrl,
188
+ *args: Any,
189
+ **kwargs: Any,
190
+ ) -> Iterable[Validation]:
191
+ """
192
+ EDINET.EC5602R: DEI value must match corresponding cover page value.
193
+
194
+ Applies to FilerNameInJapaneseDEI, FilerNameInEnglishDEI, FundNameInJapaneseDEI.
195
+ """
196
+ errors = []
197
+
198
+ def _normalizeValue(value: str) -> str:
199
+ value = regex.sub(r'\s+', ' ', value).strip()
200
+ return jaconv.h2z(value, kana=True, ascii=True, digit=True)
201
+
202
+ def _collectMismatchedValues(deiQName: QName, coverPageQnames: list[QName]) -> None:
203
+ deiFact = next((
204
+ fact
205
+ for fact in pluginData.iterValidNonNilFacts(val.modelXbrl, deiQName)
206
+ ), None)
207
+ if deiFact is None or deiFact.xValue is None:
208
+ return
209
+ deiValue = _normalizeValue(str(deiFact.xValue))
210
+ for coverPageQname in coverPageQnames:
211
+ for coverPageFact in pluginData.iterValidNonNilFacts(val.modelXbrl, coverPageQname):
212
+ factValue = _normalizeValue(str(coverPageFact.xValue))
213
+ if not factValue.startswith(deiValue):
214
+ errors.append((deiFact, coverPageFact))
215
+
216
+ _collectMismatchedValues(
217
+ pluginData.qname('jpdei_cor', 'FilerNameInJapaneseDEI'),
218
+ [
219
+ #【発行者名】
220
+ pluginData.qname('jpsps-esr_cor', 'IssuerNameCoverPage'),
221
+ pluginData.qname('jpsps-sbr_cor', 'IssuerNameCoverPage'),
222
+ pluginData.qname('jpsps_cor', 'IssuerNameCoverPage'),
223
+ #【会社名】
224
+ pluginData.qname('jpcrp-esr_cor', 'CompanyNameCoverPage'),
225
+ pluginData.qname('jpcrp-sbr_cor', 'CompanyNameCoverPage'),
226
+ pluginData.qname('jpcrp_cor', 'CompanyNameCoverPage'),
227
+ pluginData.qname('jpctl_cor', 'CompanyNameCoverPage'),
228
+ #【氏名又は名称】
229
+ pluginData.qname('jplvh_cor', 'NameCoverPage'),
230
+ #【届出者の名称】
231
+ pluginData.qname('jptoi_cor', 'FullNameOrNameOfFilerOfNotificationCoverPage'),
232
+ #【届出者の氏名又は名称】
233
+ pluginData.qname('jptoo-ton_cor', 'FullNameOrNameOfFilerOfNotificationCoverPage'),
234
+ pluginData.qname('jptoo-wto_cor', 'FullNameOrNameOfFilerOfNotificationCoverPage'),
235
+ #【報告者の名称】
236
+ pluginData.qname('jptoi_cor', 'NameOfFilerCoverPage'),
237
+ pluginData.qname('jptoo-pst_cor', 'NameOfFilerCoverPage'),
238
+ #【報告者の氏名又は名称】
239
+ pluginData.qname('jptoo-toa_cor', 'FullNameOrNameOfFilerCoverPage'),
240
+ pluginData.qname('jptoo-tor_cor', 'FullNameOrNameOfFilerCoverPage'),
241
+ ]
242
+ )
243
+
244
+ _collectMismatchedValues(
245
+ pluginData.qname('jpdei_cor', 'FilerNameInEnglishDEI'),
246
+ [
247
+ #【英訳名】
248
+ pluginData.qname('jpcrp-esr_cor', 'CompanyNameInEnglishCoverPage'),
249
+ pluginData.qname('jpcrp-sbr_cor', 'CompanyNameInEnglishCoverPage'),
250
+ pluginData.qname('jpcrp_cor', 'CompanyNameInEnglishCoverPage'),
251
+ pluginData.qname('jpctl_cor', 'CompanyNameInEnglishCoverPage'),
252
+ ]
253
+ )
254
+
255
+ _collectMismatchedValues(
256
+ pluginData.qname('jpdei_cor', 'FundNameInJapaneseDEI'),
257
+ [
258
+ #【ファンド名】
259
+ pluginData.qname('jpsps-esr_cor', 'FundNameCoverPage'),
260
+ pluginData.qname('jpsps_cor', 'FundNameCoverPage'),
261
+ #【届出の対象とした募集(売出)内国投資信託受益証券に係るファンドの名称】
262
+ pluginData.qname('jpsps_cor', 'NameOfFundRelatedToDomesticInvestmentTrustBeneficiaryCertificateToRegisterForOfferingOrDistributionCoverPageTextBlock'),
263
+ #【届出の対象とした募集(売出)内国投資証券に係る投資法人の名称】
264
+ pluginData.qname('jpsps_cor', 'NameOfInvestmentCorporationRelatedToDomesticInvestmentSecuritiesToRegisterForOfferingOrDistributionCoverPage'),
265
+ ]
266
+ )
267
+
268
+ for deiFact, coverPageFact in errors:
269
+ yield Validation.warning(
270
+ codes='EDINET.EC5602R',
271
+ msg=_("The DEI information \"%(deiQname)s\" (%(deiValue)s) does not match "
272
+ "\"%(coverPageQname)s\" (%(coverPageValue)s) . "
273
+ "Please check the content of the corresponding DEI (the element "
274
+ "displayed in the message) and the value in the submitted document, "
275
+ "and correct it so that they match."),
276
+ deiQname=deiFact.qname,
277
+ deiValue=deiFact.xValue,
278
+ coverPageQname=coverPageFact.qname,
279
+ coverPageValue=coverPageFact.xValue,
280
+ modelObject=[deiFact, coverPageFact],
281
+ )
282
+
283
+
284
+ @validation(
285
+ hook=ValidationHook.XBRL_FINALLY,
286
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
287
+ )
288
+ def rule_EC5613E(
289
+ pluginData: PluginValidationDataExtension,
290
+ val: ValidateXbrl,
291
+ *args: Any,
292
+ **kwargs: Any,
293
+ ) -> Iterable[Validation]:
294
+ """
295
+ EDINET.EC5613E: Please set the DEI "Accounting Standard" value to one
296
+ of the following: "Japan GAAP", "US GAAP", "IFRS".
297
+ """
298
+ validAccountingStandards = {s.value for s in AccountingStandard}
299
+ errorFacts = [
300
+ fact for fact in pluginData.iterValidNonNilFacts(val.modelXbrl, pluginData.accountingStandardsDeiQn)
301
+ if fact.xValue not in validAccountingStandards
302
+ ]
303
+ if len(errorFacts) > 0:
304
+ yield Validation.error(
305
+ codes='EDINET.EC5613E',
306
+ msg=_("Please set the DEI \"Accounting Standard\" value to one "
307
+ "of the following: %(values)s."),
308
+ values=', '.join(f'"{s.value}"' for s in AccountingStandard),
309
+ modelObject=errorFacts,
310
+ )
311
+
312
+
313
+ @validation(
314
+ hook=ValidationHook.XBRL_FINALLY,
315
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
316
+ )
317
+ def rule_EC5614E(
318
+ pluginData: PluginValidationDataExtension,
319
+ val: ValidateXbrl,
320
+ *args: Any,
321
+ **kwargs: Any,
322
+ ) -> Iterable[Validation]:
323
+ """
324
+ EDINET.EC5614E: A required DEI value is missing.
325
+ """
326
+ for coverPageDocument in pluginData.iterCoverPages(val.modelXbrl):
327
+ filingFormat = pluginData.getFilingFormat(val.modelXbrl)
328
+ if filingFormat is None:
329
+ return
330
+ deiRequirements = pluginData.getDeiRequirements(val.modelXbrl)
331
+ for qname in pluginData.deiItems:
332
+ status = deiRequirements.get(qname, filingFormat)
333
+ if (
334
+ status == DeiItemStatus.REQUIRED and
335
+ not pluginData.hasValidNonNilFact(val.modelXbrl, qname)
336
+ ):
337
+ yield Validation.error(
338
+ codes='EDINET.EC5614E',
339
+ msg=_("The value of '%(localName)s' in the DEI does not exist. "
340
+ "File name: '%(file)s'. "
341
+ "Please add the cover item %(localName)s to the relevant file."),
342
+ localName=qname.localName,
343
+ file=coverPageDocument.basename,
344
+ )
345
+
346
+
347
+ @validation(
348
+ hook=ValidationHook.XBRL_FINALLY,
349
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
350
+ )
351
+ def rule_EC5623W(
352
+ pluginData: PluginValidationDataExtension,
353
+ val: ValidateXbrl,
354
+ *args: Any,
355
+ **kwargs: Any,
356
+ ) -> Iterable[Validation]:
357
+ """
358
+ EDINET.EC5623W: Instances using IFRS taxonomies must set the DEI "Accounting Standard" value to "IFRS".
359
+ """
360
+ if pluginData.jpigpNamespace not in val.modelXbrl.prefixedNamespaces.values():
361
+ return
362
+ errorFacts = [
363
+ fact for fact in pluginData.iterValidNonNilFacts(val.modelXbrl, pluginData.accountingStandardsDeiQn)
364
+ if fact.xValue != AccountingStandard.IFRS.value
365
+ ]
366
+ if len(errorFacts) > 0:
367
+ yield Validation.warning(
368
+ codes='EDINET.EC5623W',
369
+ msg=_("Please set the DEI \"Accounting Standard\" value to \"IFRS\"."),
370
+ modelObject=errorFacts,
371
+ )
372
+
373
+
374
+ @validation(
375
+ hook=ValidationHook.XBRL_FINALLY,
376
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
377
+ )
378
+ def rule_namespace_prefixes(
379
+ pluginData: PluginValidationDataExtension,
380
+ val: ValidateXbrl,
381
+ *args: Any,
382
+ **kwargs: Any,
383
+ ) -> Iterable[Validation]:
384
+ """
385
+ EDINET.EC8003W: The namespace prefix used in the namespace declaration of the
386
+ report schema file must conform to the rules.
387
+ jp{府令略号}{様式番号}-{報告書略号}_{EDINET コード又はファンドコード}-{追番(3 桁)}
388
+ EDINET.EC8004W: The namespace prefix used in the namespace declaration of the
389
+ audit report schema file must conform to the rules.
390
+ jpaud-{監査報告書略号}-{当期又は前期の別}{連結又は個別の別}_{EDINET コード又はファンドコード}-{追番(3 桁)}
391
+ """
392
+ extensionSchemas = pluginData.getExtensionSchemas(val.modelXbrl)
393
+ for modelDocument in val.modelXbrl.urlDocs.values():
394
+ for prefix, namespace in modelDocument.xmlRootElement.nsmap.items():
395
+ if namespace not in extensionSchemas:
396
+ continue # Not an extension schema namespace
397
+ pathInfo = extensionSchemas[namespace]
398
+ assert pathInfo.reportFolderType is not None
399
+ patterns = pathInfo.reportFolderType.prefixPatterns
400
+ if len(patterns) == 0:
401
+ continue # No patterns to check against
402
+ match = any(pattern.fullmatch(prefix) for pattern in patterns)
403
+ if match:
404
+ continue # Valid namespace URI
405
+ if pathInfo.reportFolderType == ReportFolderType.AUDIT_DOC:
406
+ yield Validation.warning(
407
+ codes='EDINET.EC8004W',
408
+ msg=_("The namespace prefix used in the namespace declaration of the "
409
+ "audit report schema file does not conform to the rules. "
410
+ "File name: '%(file)s'. "
411
+ "Prefix: '%(prefix)s'."),
412
+ file=pathInfo.path.name,
413
+ prefix=prefix
414
+ )
415
+ else:
416
+ yield Validation.warning(
417
+ codes='EDINET.EC8003W',
418
+ msg=_("The namespace prefix used in the namespace declaration of the "
419
+ "report schema file does not conform to the rules. "
420
+ "File name: '%(file)s'. "
421
+ "Prefix: '%(prefix)s'."),
422
+ file=pathInfo.path.name,
423
+ prefix=prefix
424
+ )
425
+
426
+
427
+ @validation(
428
+ hook=ValidationHook.XBRL_FINALLY,
429
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
430
+ )
431
+ def rule_namespace_uris(
432
+ pluginData: PluginValidationDataExtension,
433
+ val: ValidateXbrl,
434
+ *args: Any,
435
+ **kwargs: Any,
436
+ ) -> Iterable[Validation]:
437
+ """
438
+ EDINET.EC8000W: A report's extension taxonomy namespace URI must conform to the rules.
439
+ http://disclosure.edinet-fsa.go.jp/jp{府令略号}{様式番号}/{報告書略号}/{報告書連番(3 桁)}
440
+ /{EDINET コード又はファンドコード}-{追番(3 桁)}/{報告対象期間期末日|報告義務発生日}
441
+ /{報告書提出回数(2 桁)}/{報告書提出日}
442
+ EDINET.EC8001W: An audit report's extension taxonomy namespace URI must conform to the rules.
443
+ http://disclosure.edinet-fsa.go.jp/jpaud/{監査報告書略号}/{当期又は前期の別}{連結又は個別の別}
444
+ /{報告書連番(3 桁)}/{EDINET コード又はファンドコード}-{追番(3桁)}/{報告対象期間期末日}
445
+ /{報告書提出回数(2 桁)}/{報告書提出日}
446
+ """
447
+ for targetNamespace, pathInfo in pluginData.getExtensionSchemas(val.modelXbrl).items():
448
+ assert pathInfo.reportFolderType is not None
449
+ patterns = pathInfo.reportFolderType.namespaceUriPatterns
450
+ if len(patterns) == 0:
451
+ continue # No patterns to check against
452
+ match = any(pattern.fullmatch(targetNamespace) for pattern in patterns)
453
+ if match:
454
+ continue # Valid namespace URI
455
+ if pathInfo.reportFolderType == ReportFolderType.AUDIT_DOC:
456
+ yield Validation.warning(
457
+ codes='EDINET.EC8001W',
458
+ msg=_("The namespace URI used in the namespace declaration of the "
459
+ "audit report schema file does not conform to the rules. "
460
+ "File name: '%(file)s'. "
461
+ "URI: '%(uri)s'."),
462
+ file=pathInfo.path.name,
463
+ uri=targetNamespace
464
+ )
465
+ else:
466
+ yield Validation.warning(
467
+ codes='EDINET.EC8000W',
468
+ msg=_("The namespace URI used in the namespace declaration of the "
469
+ "report schema file does not conform to the rules. "
470
+ "File name: '%(file)s'. "
471
+ "URI: '%(uri)s'."),
472
+ file=pathInfo.path.name,
473
+ uri=targetNamespace
474
+ )
475
+
476
+
477
+ @validation(
478
+ hook=ValidationHook.XBRL_FINALLY,
479
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
480
+ )
481
+ def rule_roles(
482
+ pluginData: PluginValidationDataExtension,
483
+ val: ValidateXbrl,
484
+ *args: Any,
485
+ **kwargs: Any,
486
+ ) -> Iterable[Validation]:
487
+ """
488
+ EDINET.EC8006W: The ID of the report's extended link role must conform to the rules.
489
+ rol_{Root element name (excluding Abstract and Heading)}(-{Modifier})(-{2-digit sequential number})
490
+ EDINET.EC8007W: The URI of the report's extended link role must conform to the rules.
491
+ http://disclosure.edinet-fsa.go.jp/role/jp{Prefecture Ordinance abbreviation|dei}
492
+ (-{report abbreviation})/rol_{root element name (excluding Abstract and Heading)}
493
+ (-{modifier})(-{two-digit sequential number})
494
+ """
495
+ for roleTypes in val.modelXbrl.roleTypes.values():
496
+ for roleType in roleTypes:
497
+ if not pluginData.isExtensionUri(roleType.modelDocument.uri, val.modelXbrl):
498
+ continue
499
+ if not REPORT_ELR_ID_PATTERN.fullmatch(str(roleType.id)):
500
+ yield Validation.warning(
501
+ codes='EDINET.EC8006W',
502
+ msg=_("The ID of the report's extended link role does not conform to the rules. "
503
+ "File name: '%(file)s'. "
504
+ "ID: '%(id)s'."),
505
+ file=roleType.modelDocument.basename,
506
+ id=roleType.id
507
+ )
508
+ if not REPORT_ELR_URI_PATTERN.fullmatch(roleType.roleURI):
509
+ yield Validation.warning(
510
+ codes='EDINET.EC8007W',
511
+ msg=_("The URI of the report's extended link role does not conform to the rules. "
512
+ "File name: '%(file)s'. "
513
+ "URI: '%(uri)s'."),
514
+ file=roleType.modelDocument.basename,
515
+ uri=roleType.roleURI
516
+ )
517
+
518
+
519
+ @validation(
520
+ hook=ValidationHook.XBRL_FINALLY,
521
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
522
+ )
523
+ def rule_EC8024E(
524
+ pluginData: PluginValidationDataExtension,
525
+ val: ValidateXbrl,
526
+ *args: Any,
527
+ **kwargs: Any,
528
+ ) -> Iterable[Validation]:
529
+ """
530
+ EDINET.EC8024E: Instance values of the same element, context, and unit may not
531
+ have different values or different decimals attributes.
532
+ Correct the element with the relevant context ID. For elements in an inline XBRL file that have
533
+ duplicate elements, context IDs, and unit IDs, set the same values for the value and
534
+ decimals attribute.
535
+ """
536
+ duplicateFactSets = ValidateDuplicateFacts.getDuplicateFactSetsWithType(val.modelXbrl.facts, DuplicateType.INCOMPLETE)
537
+ for duplicateFactSet in duplicateFactSets:
538
+ fact = duplicateFactSet.facts[0]
539
+ yield Validation.error(
540
+ codes='EDINET.EC8024E',
541
+ msg=_("Instance values of the same element, context, and unit may not "
542
+ "have different values or different decimals attributes. <element=%(concept)s> "
543
+ "<contextID=%(context)s> <unit=%(unit)s>. Correct the element with the relevant "
544
+ "context ID. For elements in an inline XBRL file that have duplicate "
545
+ "elements, context IDs, and unit IDs, set the same values for the value and "
546
+ "decimals attribute."),
547
+ concept=fact.qname,
548
+ context=fact.contextID,
549
+ unit=fact.unitID,
550
+ modelObject=duplicateFactSet.facts,
551
+ )
552
+
553
+
554
+ @validation(
555
+ hook=ValidationHook.XBRL_FINALLY,
556
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
557
+ )
558
+ def rule_EC8027W(
559
+ pluginData: PluginValidationDataExtension,
560
+ val: ValidateXbrl,
561
+ *args: Any,
562
+ **kwargs: Any,
563
+ ) -> Iterable[Validation]:
564
+ """
565
+ EDINET.EC8027W: For presentation links and definition links, there must be
566
+ only one root element.
567
+ File name: xxx <Extended link role = yyy>
568
+ Please correct the extended link role of the relevant file. Please set only one
569
+ root element of the extended link role in the presentation link and definition link.
570
+ """
571
+ linkbaseTypes = (LinkbaseType.PRESENTATION, LinkbaseType.DEFINITION)
572
+ roleTypes = [
573
+ roleType
574
+ for roleTypes in val.modelXbrl.roleTypes.values()
575
+ for roleType in roleTypes
576
+ ]
577
+ for roleType in roleTypes:
578
+ for linkbaseType in linkbaseTypes:
579
+ if linkbaseType.getLinkQn() not in roleType.usedOns:
580
+ continue
581
+ arcroles = linkbaseType.getArcroles()
582
+ relSet = val.modelXbrl.relationshipSet(tuple(arcroles), roleType.roleURI)
583
+ relSetFrom = relSet.fromModelObjects()
584
+ rootConcepts = relSet.rootConcepts
585
+ if len(rootConcepts) < 2:
586
+ continue
587
+ rels = [
588
+ rel
589
+ for rootConcept in rootConcepts
590
+ for rel in relSetFrom[rootConcept]
591
+ ]
592
+ yield Validation.warning(
593
+ codes='EDINET.EC8027W',
594
+ msg=_("For presentation links and definition links, there must be only one root element. "
595
+ "File name: %(filename)s <Extended link role = %(roleUri)s> "
596
+ "Please correct the extended link role of the relevant file. Please set only one "
597
+ "root element of the extended link role in the presentation link and definition link."),
598
+ filename=rels[0].modelDocument.basename,
599
+ roleUri=roleType.roleURI,
600
+ modelObject=rels,
601
+ )
602
+
603
+
604
+ @validation(
605
+ hook=ValidationHook.XBRL_FINALLY,
606
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
607
+ )
608
+ def rule_EC8028W(
609
+ pluginData: PluginValidationDataExtension,
610
+ val: ValidateXbrl,
611
+ *args: Any,
612
+ **kwargs: Any,
613
+ ) -> Iterable[Validation]:
614
+ """
615
+ EDINET.EC8028W: The priority attribute must not be duplicated for the same
616
+ element and label role within the submitter's taxonomy.
617
+
618
+ Note: Not mentioned in documentation, but inferring from sample filings that
619
+ label language should also be considered.
620
+ """
621
+ labelsRelationshipSet = val.modelXbrl.relationshipSet(XbrlConst.conceptLabel)
622
+ if labelsRelationshipSet is None:
623
+ return
624
+ for concept, rels in labelsRelationshipSet.fromModelObjects().items():
625
+ groups = defaultdict(list)
626
+ for rel in rels:
627
+ if not isinstance(rel.toModelObject, ModelResource):
628
+ continue
629
+ if not pluginData.isExtensionUri(rel.modelDocument.uri, val.modelXbrl):
630
+ continue
631
+ groups[(rel.toModelObject.xmlLang, rel.toModelObject.role, rel.priority)].append(rel)
632
+ for (lang, role, priority), group in groups.items():
633
+ if len(group) > 1:
634
+ yield Validation.warning(
635
+ codes='EDINET.EC8028W',
636
+ msg=_("The priority attribute must not be duplicated for the same "
637
+ "element and label role in the same submitter taxonomy. "
638
+ "File name: '%(path)s'. Concept: '%(concept)s'. "
639
+ "Role: '%(role)s'. Priority: %(priority)s. "
640
+ "Please check the element and label name of the corresponding "
641
+ "file. Please set the priority attribute so that the same "
642
+ "element and the same label role in the submitter's taxonomy "
643
+ "are not duplicated."),
644
+ path=rels[0].document.basename,
645
+ concept=concept.qname,
646
+ role=role,
647
+ priority=priority,
648
+ modelObject=group,
649
+ )
650
+
651
+
652
+ @validation(
653
+ hook=ValidationHook.COMPLETE,
654
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
655
+ )
656
+ def rule_EC8029W(
657
+ pluginData: ControllerPluginData,
658
+ cntlr: Cntlr,
659
+ fileSource: FileSource,
660
+ *args: Any,
661
+ **kwargs: Any,
662
+ ) -> Iterable[Validation]:
663
+ """
664
+ EDINET.EC8029W: Any non-abstract element referenced in the definition or presentation linkbase must
665
+ be present in an instance.
666
+ """
667
+ linkbaseTypes = (LinkbaseType.DEFINITION, LinkbaseType.PRESENTATION)
668
+ arcroles = tuple(
669
+ arcrole
670
+ for linkbaseType in linkbaseTypes
671
+ for arcrole in linkbaseType.getArcroles()
672
+ )
673
+ referencedConcepts: set[ModelConcept] = set()
674
+ usedConcepts: set[ModelConcept] = set()
675
+ for modelXbrl in pluginData.loadedModelXbrls:
676
+ usedConcepts.update(fact.concept for fact in modelXbrl.facts)
677
+ relSet = modelXbrl.relationshipSet(arcroles)
678
+ if relSet is None:
679
+ continue
680
+ concepts = list(relSet.fromModelObjects().keys()) + list(relSet.toModelObjects().keys())
681
+ for concept in concepts:
682
+ if not isinstance(concept, ModelConcept):
683
+ continue
684
+ if concept.isAbstract:
685
+ continue
686
+ referencedConcepts.add(concept)
687
+ unusedConcepts = referencedConcepts - usedConcepts
688
+ for concept in unusedConcepts:
689
+ yield Validation.warning(
690
+ codes='EDINET.EC8029W',
691
+ msg=_("The non-abstract element present in the presentation link or definition "
692
+ "link is not set in an inline XBRL file. "
693
+ "Element: '%(concept)s'. "
694
+ "Please use the element in the inline XBRL file. If it is an unnecessary "
695
+ "element, please delete it from the presentation link and definition link."),
696
+ concept=concept.qname.localName,
697
+ modelObject=concept,
698
+ )
699
+
700
+
701
+ @validation(
702
+ hook=ValidationHook.XBRL_FINALLY,
703
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
704
+ )
705
+ def rule_EC8030W(
706
+ pluginData: PluginValidationDataExtension,
707
+ val: ValidateXbrl,
708
+ *args: Any,
709
+ **kwargs: Any,
710
+ ) -> Iterable[Validation]:
711
+ """
712
+ EDINET.EC8030W: Any concept (other than DEI concepts) used in an instance must
713
+ be in the presentation linkbase.
714
+ """
715
+ usedConcepts = pluginData.getUsedConcepts(val.modelXbrl)
716
+ relSet = val.modelXbrl.relationshipSet(tuple(LinkbaseType.PRESENTATION.getArcroles()))
717
+ for concept in usedConcepts:
718
+ if concept.qname.namespaceURI == pluginData.jpdeiNamespace:
719
+ continue
720
+ if concept.qname.localName.endswith('DEI'):
721
+ # Example: jpsps_cor:SecuritiesRegistrationStatementAmendmentFlagDeemedRegistrationStatementDEI
722
+ continue
723
+ if not relSet.contains(concept):
724
+ yield Validation.warning(
725
+ codes='EDINET.EC8030W',
726
+ msg=_("An element (other than DEI) set in the inline XBRL file is not set in the "
727
+ "presentation linkbase. "
728
+ "Element: '%(concept)s'. "
729
+ "Please set the relevant element in the presentation linkbase."),
730
+ concept=concept.qname.localName,
731
+ modelObject=concept,
732
+ )
733
+
734
+
735
+ @validation(
736
+ hook=ValidationHook.COMPLETE,
737
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
738
+ )
739
+ def rule_EC8031W(
740
+ pluginData: ControllerPluginData,
741
+ cntlr: Cntlr,
742
+ fileSource: FileSource,
743
+ *args: Any,
744
+ **kwargs: Any,
745
+ ) -> Iterable[Validation]:
746
+ """
747
+ EDINET.EC8031W: For contexts having an ID beginning with "FilingDate", the instant
748
+ date value must match the report submission date set in the file name.
749
+
750
+ However, when reporting corrections, please set the following:
751
+ Context beginning with "FilingDate": The submission date on the cover page of the attached inline XBRL (original submission date)
752
+ "Report submission date" in the file name: The submission date of the correction report, etc.
753
+ """
754
+ isAmendment = pluginData.getDeiValue('ReportAmendmentFlagDEI')
755
+ if isAmendment:
756
+ # Amendment/corrections report are not subject to this validation, but documentation does note:
757
+ # However, when reporting corrections, please set the following:
758
+ # Context beginning with "FilingDate": The submission date on the cover page of the attached inline XBRL (original submission date)
759
+ # "Report submission date" in the file name: The submission date of the correction report, etc.
760
+ return
761
+ uploadContents = pluginData.getUploadContents()
762
+ if uploadContents is None:
763
+ return
764
+ docUris = {
765
+ docUri
766
+ for modelXbrl in pluginData.loadedModelXbrls
767
+ for docUri in modelXbrl.urlDocs.keys()
768
+ }
769
+ actualDates = defaultdict(set)
770
+ for uri in docUris:
771
+ path = Path(uri)
772
+ pathInfo = uploadContents.uploadPathsByFullPath.get(path)
773
+ if pathInfo is None or pathInfo.reportFolderType is None:
774
+ continue
775
+ patterns = pathInfo.reportFolderType.ixbrlFilenamePatterns
776
+ for pattern in patterns:
777
+ matches = pattern.match(path.name)
778
+ if not matches:
779
+ continue
780
+ groups = matches.groupdict()
781
+ year = groups['submission_year']
782
+ month = groups['submission_month']
783
+ day = groups['submission_day']
784
+ actualDate = f'{year:04}-{month:02}-{day:02}'
785
+ actualDates[actualDate].add(path)
786
+ expectedDates = defaultdict(set)
787
+ for modelXbrl in pluginData.loadedModelXbrls:
788
+ for context in modelXbrl.contexts.values():
789
+ if context.id is None:
790
+ continue
791
+ if not context.id.startswith("FilingDate"):
792
+ continue
793
+ if not context.isInstantPeriod:
794
+ continue
795
+ expectedDate = XmlUtil.dateunionValue(context.instantDatetime, subtractOneDay=True)[:10]
796
+ expectedDates[expectedDate].add(context)
797
+ invalidDates = {k: v for k, v in actualDates.items() if k not in expectedDates}
798
+ if len(invalidDates) == 0:
799
+ return
800
+ paths = [
801
+ path
802
+ for paths in invalidDates.values()
803
+ for path in paths
804
+ ]
805
+ contexts = [
806
+ context
807
+ for contexts in expectedDates.values()
808
+ for context in contexts
809
+ ]
810
+ for path in paths:
811
+ for context in contexts:
812
+ yield Validation.warning(
813
+ codes='EDINET.EC8031W',
814
+ msg=_("The value of the instant element in context '%(context)s' "
815
+ "must match the report submission date set in the file name. "
816
+ "File name: '%(file)s'. "
817
+ "Please correct the report submission date in the filename or "
818
+ "the instant element value for the context with ID '%(context)s'."),
819
+ context=context.id,
820
+ file=path.name,
821
+ modelObject=context,
822
+ )
823
+
824
+
825
+ @validation(
826
+ hook=ValidationHook.XBRL_FINALLY,
827
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
828
+ )
829
+ def rule_EC8034W(
830
+ pluginData: PluginValidationDataExtension,
831
+ val: ValidateXbrl,
832
+ *args: Any,
833
+ **kwargs: Any,
834
+ ) -> Iterable[Validation]:
835
+ """
836
+ EDINET.EC8034W: English labels for extension concepts must not contain full-width characters.
837
+ """
838
+ labelsRelationshipSet = val.modelXbrl.relationshipSet(XbrlConst.conceptLabel)
839
+ for concept, modelLabelRels in labelsRelationshipSet.fromModelObjects().items():
840
+ for modelLabelRel in modelLabelRels:
841
+ modelLabel = modelLabelRel.toModelObject
842
+ if not isinstance(modelLabel, ModelResource):
843
+ continue
844
+ if not pluginData.isExtensionUri(modelLabel.modelDocument.uri, val.modelXbrl):
845
+ continue
846
+ if modelLabel.xmlLang != 'en':
847
+ continue
848
+ label = modelLabel.textValue.strip() # Does not trim full-width spaces
849
+ if any(
850
+ unicodedata.east_asian_width(char) in ('F', 'W')
851
+ for char in label
852
+ ):
853
+ yield Validation.warning(
854
+ codes='EDINET.EC8034W',
855
+ msg=_("The English label must be set using half-width alphanumeric characters "
856
+ "and half-width symbols. "
857
+ "File name: '%(file)s'. "
858
+ "English label: '%(label)s'. "
859
+ "Please use only half-width alphanumeric characters and half-width symbols "
860
+ "for the English labels of concepts in the relevant files."),
861
+ file=modelLabel.document.basename,
862
+ label=modelLabel.id,
863
+ modelObject=modelLabel,
864
+ )
865
+
866
+
867
+ @validation(
868
+ hook=ValidationHook.XBRL_FINALLY,
869
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
870
+ )
871
+ def rule_EC8073E(
872
+ pluginData: PluginValidationDataExtension,
873
+ val: ValidateXbrl,
874
+ *args: Any,
875
+ **kwargs: Any,
876
+ ) -> Iterable[Validation]:
877
+ """
878
+ EDINET.EC8073E: Prohibited characters are used in the labels for descendents of
879
+ CategoriesOfDirectorsAndOtherOfficersAxis except for ExecutiveOfficersMember
880
+ """
881
+ axisConcept = val.modelXbrl.qnameConcepts.get(pluginData.categoriesOfDirectorsAndOtherOfficersAxisQn)
882
+ if axisConcept is None:
883
+ return
884
+ defRelSet = val.modelXbrl.relationshipSet(tuple(LinkbaseType.DEFINITION.getArcroles()))
885
+ labelRelSet = val.modelXbrl.relationshipSet(XbrlConst.conceptLabel)
886
+ for rel in defRelSet.fromModelObject(axisConcept):
887
+ if rel.toModelObject is None or rel.toModelObject.qname == pluginData.executiveOfficersMemberQn:
888
+ continue
889
+ for labelRel in labelRelSet.fromModelObject(rel.toModelObject):
890
+ if labelRel.toModelObject is None or labelRel.toModelObject.textValue is None:
891
+ continue
892
+ illegalChars = HALF_KANA.intersection(set(labelRel.toModelObject.textValue))
893
+ if any(illegalChars):
894
+ yield Validation.error(
895
+ codes='EDINET.EC8073E',
896
+ msg=_("The concept: %(concept)s has a %(role)s label which contains characters that are not "
897
+ "allowed. Label: %(label)s, disallowed characters: %(characters)s"),
898
+ concept=rel.toModelObject.qname.localName,
899
+ role=labelRel.toModelObject.role,
900
+ label=labelRel.toModelObject.textValue,
901
+ characters=list(illegalChars)
902
+ )
903
+
904
+
905
+ @validation(
906
+ hook=ValidationHook.XBRL_FINALLY,
907
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
908
+ )
909
+ def rule_EC8073W(
910
+ pluginData: PluginValidationDataExtension,
911
+ val: ValidateXbrl,
912
+ *args: Any,
913
+ **kwargs: Any,
914
+ ) -> Iterable[Validation]:
915
+ """
916
+ EDINET.EC8073W: Prohibited characters are used in Japanese labels for descendents of ExecutiveOfficersMember
917
+ """
918
+ memberConcept = val.modelXbrl.qnameConcepts.get(pluginData.executiveOfficersMemberQn)
919
+ if memberConcept is None:
920
+ return
921
+ defRelSet = val.modelXbrl.relationshipSet(tuple(LinkbaseType.DEFINITION.getArcroles()))
922
+ labelRelSet = val.modelXbrl.relationshipSet(XbrlConst.conceptLabel)
923
+ conceptsLabelsToCheck = {memberConcept}.union(
924
+ {rel.toModelObject for rel in defRelSet.fromModelObject(memberConcept) if rel.toModelObject is not None}
925
+ )
926
+ for concept in conceptsLabelsToCheck:
927
+ for labelRel in labelRelSet.fromModelObject(concept):
928
+ if (labelRel.toModelObject is None or
929
+ labelRel.toModelObject.xmlLang not in JAPAN_LANGUAGE_CODES or
930
+ labelRel.toModelObject.textValue is None):
931
+ continue
932
+ illegalChars = HALF_KANA.intersection(set(labelRel.toModelObject.textValue))
933
+ if any(illegalChars):
934
+ yield Validation.warning(
935
+ codes='EDINET.EC8073W',
936
+ msg=_("The concept: %(concept)s has a %(role)s label which contains characters that are not "
937
+ "allowed. Label: %(label)s, disallowed characters: %(characters)s"),
938
+ concept=concept.qname.localName,
939
+ role=labelRel.toModelObject.role,
940
+ label=labelRel.toModelObject.textValue,
941
+ characters=list(illegalChars)
942
+ )
943
+
944
+
945
+ @validation(
946
+ hook=ValidationHook.XBRL_FINALLY,
947
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
948
+ )
949
+ def rule_EC8075W(
950
+ pluginData: PluginValidationDataExtension,
951
+ val: ValidateXbrl,
952
+ *args: Any,
953
+ **kwargs: Any,
954
+ ) -> Iterable[Validation]:
955
+ """
956
+ EDINET.EC8075W: The percentage of female executives has not been tagged in detail. Ensure that there is
957
+ a nonnil value disclosed for jpcrp_cor:RatioOfFemaleDirectorsAndOtherOfficers.
958
+ """
959
+ if pluginData.isCorporateForm(val.modelXbrl):
960
+ if not pluginData.hasValidNonNilFact(val.modelXbrl, pluginData.ratioOfFemaleDirectorsAndOtherOfficersQn):
961
+ yield Validation.warning(
962
+ codes='EDINET.EC8075W',
963
+ msg=_("The percentage of female executives has not been tagged in detail."),
964
+ )
965
+
966
+
967
+ @validation(
968
+ hook=ValidationHook.XBRL_FINALLY,
969
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
970
+ )
971
+ def rule_EC8076W(
972
+ pluginData: PluginValidationDataExtension,
973
+ val: ValidateXbrl,
974
+ *args: Any,
975
+ **kwargs: Any,
976
+ ) -> Iterable[Validation]:
977
+ """
978
+ EDINET.EC8076W: "Issued Shares, Total Number of Shares, etc. [Text Block]" (IssuedSharesTotalNumberOfSharesEtcTextBlock) is not tagged.
979
+ Applies to forms 3 and 4.
980
+ """
981
+ if pluginData.isStockForm(val.modelXbrl) and pluginData.isCorporateReport(val.modelXbrl):
982
+ if not pluginData.hasValidNonNilFact(val.modelXbrl, pluginData.issuedSharesTotalNumberOfSharesEtcQn):
983
+ yield Validation.warning(
984
+ codes='EDINET.EC8076W',
985
+ msg=_('"Issued Shares, Total Number of Shares, etc. [Text Block]" (IssuedSharesTotalNumberOfSharesEtcTextBlock) is not tagged.'),
986
+ )
987
+
988
+
989
+ @validation(
990
+ hook=ValidationHook.COMPLETE,
991
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
992
+ )
993
+ def rule_EC8038W(
994
+ pluginData: ControllerPluginData,
995
+ cntlr: Cntlr,
996
+ fileSource: FileSource,
997
+ *args: Any,
998
+ **kwargs: Any,
999
+ ) -> Iterable[Validation]:
1000
+ """
1001
+ EDINET.EC8038W: The details of the major shareholders' status have not been tagged.
1002
+ Should have facts in one of the major shareholders roles.
1003
+ """
1004
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1005
+ return
1006
+
1007
+ roleUris = (
1008
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_MajorShareholders-01',
1009
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_MajorShareholders-02',
1010
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_MajorShareholders-01',
1011
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_MajorShareholders-02',
1012
+ )
1013
+ for modelXbrl in pluginData.loadedModelXbrls:
1014
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1015
+ return
1016
+
1017
+ yield Validation.warning(
1018
+ codes='EDINET.EC8038W',
1019
+ msg=_("The details of the major shareholders' status have not been tagged. "
1020
+ "Please provide detailed tagging of the status of major shareholders."),
1021
+ )
1022
+
1023
+
1024
+ @validation(
1025
+ hook=ValidationHook.COMPLETE,
1026
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1027
+ )
1028
+ def rule_EC8039W(
1029
+ pluginData: ControllerPluginData,
1030
+ cntlr: Cntlr,
1031
+ fileSource: FileSource,
1032
+ *args: Any,
1033
+ **kwargs: Any,
1034
+ ) -> Iterable[Validation]:
1035
+ """
1036
+ EDINET.EC8039W: The consolidated balance sheet details have not been tagged.
1037
+ If WhetherConsolidatedFinancialStatementsArePreparedDEI is TRUE and AccountingStandardsDEI is "Japan GAAP",
1038
+ then a BS must exist using one of the specified roles.
1039
+ """
1040
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1041
+ return
1042
+
1043
+ if pluginData.isConsolidated() != True:
1044
+ return
1045
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1046
+ if accountingStandard != AccountingStandard.JAPAN_GAAP.value:
1047
+ return
1048
+
1049
+ roleUris = (
1050
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_ConsolidatedBalanceSheet',
1051
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_ConsolidatedBalanceSheet',
1052
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualConsolidatedBalanceSheet',
1053
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualConsolidatedBalanceSheet',
1054
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_Type1SemiAnnualConsolidatedBalanceSheet',
1055
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_Type1SemiAnnualConsolidatedBalanceSheet',
1056
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_QuarterlyConsolidatedBalanceSheet',
1057
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_QuarterlyConsolidatedBalanceSheet',
1058
+ )
1059
+
1060
+ for modelXbrl in pluginData.loadedModelXbrls:
1061
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1062
+ return
1063
+
1064
+ yield Validation.warning(
1065
+ codes='EDINET.EC8039W',
1066
+ msg=_("The consolidated balance sheet details have not been tagged. "
1067
+ "Please provide detailed tagging of the consolidated balance sheet. "
1068
+ "If you do not provide a consolidated balance sheet, please confirm that "
1069
+ 'the "Consolidated Financial Statements" field in the DEI information is correct.'),
1070
+ )
1071
+
1072
+
1073
+ @validation(
1074
+ hook=ValidationHook.COMPLETE,
1075
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1076
+ )
1077
+ def rule_EC8040W(
1078
+ pluginData: ControllerPluginData,
1079
+ cntlr: Cntlr,
1080
+ fileSource: FileSource,
1081
+ *args: Any,
1082
+ **kwargs: Any,
1083
+ ) -> Iterable[Validation]:
1084
+ """
1085
+ EDINET.EC8040W: Balance sheet details not tagged.
1086
+ If WhetherConsolidatedFinancialStatementsArePreparedDEI is FALSE and AccountingStandardsDEI is "Japan GAAP",
1087
+ then a BS must exist using one of the specified roles.
1088
+ """
1089
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1090
+ return
1091
+
1092
+ if pluginData.isConsolidated() != False:
1093
+ return
1094
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1095
+ if accountingStandard != AccountingStandard.JAPAN_GAAP.value:
1096
+ return
1097
+
1098
+ roleUris = (
1099
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_BalanceSheet',
1100
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_BalanceSheet',
1101
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualBalanceSheet',
1102
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualBalanceSheet',
1103
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_Type1SemiAnnualBalanceSheet',
1104
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_Type1SemiAnnualBalanceSheet',
1105
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_QuarterlyBalanceSheet',
1106
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_QuarterlyBalanceSheet',
1107
+ )
1108
+
1109
+ for modelXbrl in pluginData.loadedModelXbrls:
1110
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1111
+ return
1112
+
1113
+ yield Validation.warning(
1114
+ codes='EDINET.EC8040W',
1115
+ msg=_("Balance sheet details not tagged. Please tag the balance sheet in detail."),
1116
+ )
1117
+
1118
+
1119
+ @validation(
1120
+ hook=ValidationHook.COMPLETE,
1121
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1122
+ )
1123
+ def rule_EC8041W(
1124
+ pluginData: ControllerPluginData,
1125
+ cntlr: Cntlr,
1126
+ fileSource: FileSource,
1127
+ *args: Any,
1128
+ **kwargs: Any,
1129
+ ) -> Iterable[Validation]:
1130
+ """
1131
+ EDINET.EC8041W: The consolidated income statement has not been tagged in detail.
1132
+ If WhetherConsolidatedFinancialStatementsArePreparedDEI is TRUE and AccountingStandardsDEI is "Japan GAAP",
1133
+ then an IS must exist using one of the specified roles.
1134
+ """
1135
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1136
+ return
1137
+
1138
+ if pluginData.isConsolidated() != True:
1139
+ return
1140
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1141
+ if accountingStandard != AccountingStandard.JAPAN_GAAP.value:
1142
+ return
1143
+
1144
+ roleUris = (
1145
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_ConsolidatedStatementOfIncome',
1146
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_ConsolidatedStatementOfIncome',
1147
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualConsolidatedStatementOfIncome',
1148
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualConsolidatedStatementOfIncome',
1149
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_Type1SemiAnnualConsolidatedStatementOfIncome',
1150
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_Type1SemiAnnualConsolidatedStatementOfIncome',
1151
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_YearToQuarterEndConsolidatedStatementOfIncome',
1152
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_YearToQuarterEndConsolidatedStatementOfIncome',
1153
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_QuarterPeriodConsolidatedStatementOfIncome',
1154
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_QuarterPeriodConsolidatedStatementOfIncome',
1155
+ )
1156
+
1157
+ for modelXbrl in pluginData.loadedModelXbrls:
1158
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1159
+ return
1160
+
1161
+ yield Validation.warning(
1162
+ codes='EDINET.EC8041W',
1163
+ msg=_("The consolidated income statement has not been tagged in detail. "
1164
+ "Please provide detailed tagging for the consolidated income statement. "
1165
+ "If you do not provide a consolidated income statement, please confirm that "
1166
+ 'the "Consolidated Financial Statements" field in the DEI information is correct.'),
1167
+ )
1168
+
1169
+
1170
+ @validation(
1171
+ hook=ValidationHook.COMPLETE,
1172
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1173
+ )
1174
+ def rule_EC8042W(
1175
+ pluginData: ControllerPluginData,
1176
+ cntlr: Cntlr,
1177
+ fileSource: FileSource,
1178
+ *args: Any,
1179
+ **kwargs: Any,
1180
+ ) -> Iterable[Validation]:
1181
+ """
1182
+ EDINET.EC8042W: The income statement details are not tagged.
1183
+ If WhetherConsolidatedFinancialStatementsArePreparedDEI is FALSE and AccountingStandardsDEI is "Japan GAAP",
1184
+ then an IS must exist using one of the specified roles.
1185
+ """
1186
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1187
+ return
1188
+
1189
+ if pluginData.isConsolidated() != False:
1190
+ return
1191
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1192
+ if accountingStandard != AccountingStandard.JAPAN_GAAP.value:
1193
+ return
1194
+
1195
+ roleUris = (
1196
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_StatementOfIncome',
1197
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_StatementOfIncome',
1198
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualStatementOfIncome',
1199
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualStatementOfIncome',
1200
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_Type1SemiAnnualStatementOfIncome',
1201
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_Type1SemiAnnualStatementOfIncome',
1202
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_YearToQuarterEndStatementOfIncome',
1203
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_YearToQuarterEndStatementOfIncome',
1204
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_QuarterPeriodStatementOfIncome',
1205
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_QuarterPeriodStatementOfIncome',
1206
+ )
1207
+
1208
+ for modelXbrl in pluginData.loadedModelXbrls:
1209
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1210
+ return
1211
+
1212
+ yield Validation.warning(
1213
+ codes='EDINET.EC8042W',
1214
+ msg=_("The income statement details are not tagged. "
1215
+ "Please provide detailed tagging of your income statement."),
1216
+ )
1217
+
1218
+
1219
+ @validation(
1220
+ hook=ValidationHook.COMPLETE,
1221
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1222
+ )
1223
+ def rule_EC8043W(
1224
+ pluginData: ControllerPluginData,
1225
+ cntlr: Cntlr,
1226
+ fileSource: FileSource,
1227
+ *args: Any,
1228
+ **kwargs: Any,
1229
+ ) -> Iterable[Validation]:
1230
+ """
1231
+ EDINET.EC8043W: The profit and loss statement has not been tagged in detail.
1232
+ If AccountingStandardsDEI = "Japan GAAP" and WhetherConsolidatedFinancialStatementsArePreparedDEI = "false",
1233
+ then a P&L must exist using one of the specified roles.
1234
+ """
1235
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1236
+ return
1237
+
1238
+ if pluginData.isConsolidated() != False:
1239
+ return
1240
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1241
+ if accountingStandard != AccountingStandard.JAPAN_GAAP.value:
1242
+ return
1243
+
1244
+ roleUris = (
1245
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_StatementOfIncomeAndRetainedEarnings',
1246
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_StatementOfIncomeAndRetainedEarnings',
1247
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualStatementOfIncomeAndRetainedEarnings',
1248
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualStatementOfIncomeAndRetainedEarnings',
1249
+ )
1250
+
1251
+ for modelXbrl in pluginData.loadedModelXbrls:
1252
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1253
+ return
1254
+
1255
+ yield Validation.warning(
1256
+ codes='EDINET.EC8043W',
1257
+ msg=_("The profit and loss statement has not been tagged in detail. "
1258
+ "Please provide detailed tagging of the profit and loss and retained earnings statement."),
1259
+ )
1260
+
1261
+
1262
+ @validation(
1263
+ hook=ValidationHook.COMPLETE,
1264
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1265
+ )
1266
+ def rule_EC8044W(
1267
+ pluginData: ControllerPluginData,
1268
+ cntlr: Cntlr,
1269
+ fileSource: FileSource,
1270
+ *args: Any,
1271
+ **kwargs: Any,
1272
+ ) -> Iterable[Validation]:
1273
+ """
1274
+ EDINET.EC8044W: The consolidated statement of changes in equity has not been detailed.
1275
+ If WhetherConsolidatedFinancialStatementsArePreparedDEI is TRUE and AccountingStandardsDEI is "Japan GAAP",
1276
+ then an Equity Statement must exist using one of the specified roles.
1277
+ """
1278
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1279
+ return
1280
+
1281
+ if pluginData.isConsolidated() != True:
1282
+ return
1283
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1284
+ if accountingStandard != AccountingStandard.JAPAN_GAAP.value:
1285
+ return
1286
+
1287
+ roleUris = (
1288
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_ConsolidatedStatementOfChangesInEquity',
1289
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_ConsolidatedStatementOfChangesInEquity',
1290
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_ConsolidatedStatementOfChangesInNetAssets',
1291
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_ConsolidatedStatementOfChangesInNetAssets',
1292
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualConsolidatedStatementOfChangesInEquity',
1293
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualConsolidatedStatementOfChangesInEquity',
1294
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualConsolidatedStatementOfChangesInNetAssets',
1295
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualConsolidatedStatementOfChangesInNetAssets',
1296
+ )
1297
+
1298
+ for modelXbrl in pluginData.loadedModelXbrls:
1299
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1300
+ return
1301
+
1302
+ yield Validation.warning(
1303
+ codes='EDINET.EC8044W',
1304
+ msg=_("The consolidated statement of changes in equity has not been detailed. "
1305
+ "Please tag the details of the consolidated statement of changes in equity. "
1306
+ "If you do not include a consolidated statement of changes in equity, please confirm that "
1307
+ 'the "Consolidated Financial Statements" field in the DEI information is correct.'),
1308
+ )
1309
+
1310
+
1311
+ @validation(
1312
+ hook=ValidationHook.COMPLETE,
1313
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1314
+ )
1315
+ def rule_EC8045W(
1316
+ pluginData: ControllerPluginData,
1317
+ cntlr: Cntlr,
1318
+ fileSource: FileSource,
1319
+ *args: Any,
1320
+ **kwargs: Any,
1321
+ ) -> Iterable[Validation]:
1322
+ """
1323
+ EDINET.EC8045W: The statement of changes in equity has not been tagged in detail.
1324
+ If WhetherConsolidatedFinancialStatementsArePreparedDEI is FALSE and AccountingStandardsDEI is "Japan GAAP",
1325
+ then an Equity Statement must exist using one of the specified roles.
1326
+ """
1327
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1328
+ return
1329
+
1330
+ if pluginData.isConsolidated() != False:
1331
+ return
1332
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1333
+ if accountingStandard != AccountingStandard.JAPAN_GAAP.value:
1334
+ return
1335
+
1336
+ roleUris = (
1337
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_StatementOfChangesInEquity',
1338
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_StatementOfChangesInEquity',
1339
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_StatementOfChangesInNetAssets',
1340
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_StatementOfChangesInNetAssets',
1341
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualStatementOfChangesInEquity',
1342
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualStatementOfChangesInEquity',
1343
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualStatementOfChangesInNetAssets',
1344
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualStatementOfChangesInNetAssets',
1345
+ )
1346
+
1347
+ for modelXbrl in pluginData.loadedModelXbrls:
1348
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1349
+ return
1350
+
1351
+ yield Validation.warning(
1352
+ codes='EDINET.EC8045W',
1353
+ msg=_("The statement of changes in equity has not been tagged in detail. "
1354
+ "Please provide detailed tagging for the Statement of Changes in Equity."),
1355
+ )
1356
+
1357
+
1358
+ @validation(
1359
+ hook=ValidationHook.COMPLETE,
1360
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1361
+ )
1362
+ def rule_EC8046W(
1363
+ pluginData: ControllerPluginData,
1364
+ cntlr: Cntlr,
1365
+ fileSource: FileSource,
1366
+ *args: Any,
1367
+ **kwargs: Any,
1368
+ ) -> Iterable[Validation]:
1369
+ """
1370
+ EDINET.EC8046W: The statement of changes in unitholders' equity has not been tagged in detail.
1371
+ If industry code is "inv", then facts must exist in one of the specified roles.
1372
+ """
1373
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1374
+ return
1375
+
1376
+ industryCodeConsolidated = pluginData.getDeiValue('IndustryCodeWhenConsolidatedFinancialStatementsArePreparedInAccordanceWithIndustrySpecificRegulationsDEI')
1377
+ industryCodeNonConsolidated = pluginData.getDeiValue('IndustryCodeWhenFinancialStatementsArePreparedInAccordanceWithIndustrySpecificRegulationsDEI')
1378
+
1379
+ if industryCodeConsolidated != 'INV' and industryCodeNonConsolidated != 'INV':
1380
+ return
1381
+
1382
+ roleUris = (
1383
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_StatementOfUnitholdersEquity',
1384
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_StatementOfUnitholdersEquity',
1385
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualStatementOfUnitholdersEquity',
1386
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualStatementOfUnitholdersEquity',
1387
+ )
1388
+
1389
+ for modelXbrl in pluginData.loadedModelXbrls:
1390
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1391
+ return
1392
+
1393
+ yield Validation.warning(
1394
+ codes='EDINET.EC8046W',
1395
+ msg=_("The statement of changes in unitholders' equity has not been tagged in detail. "
1396
+ "Please provide detailed tagging for the Statement of Changes in Unitholders' Equity."),
1397
+ )
1398
+
1399
+
1400
+ @validation(
1401
+ hook=ValidationHook.COMPLETE,
1402
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1403
+ )
1404
+ def rule_EC8047W(
1405
+ pluginData: ControllerPluginData,
1406
+ cntlr: Cntlr,
1407
+ fileSource: FileSource,
1408
+ *args: Any,
1409
+ **kwargs: Any,
1410
+ ) -> Iterable[Validation]:
1411
+ """
1412
+ EDINET.EC8047W: The statement of changes in employee capital etc. has not been tagged in detail.
1413
+ If industry code is "liq", then facts must exist in one of the specified roles.
1414
+ """
1415
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1416
+ return
1417
+
1418
+ industryCodeConsolidated = pluginData.getDeiValue('IndustryCodeWhenConsolidatedFinancialStatementsArePreparedInAccordanceWithIndustrySpecificRegulationsDEI')
1419
+ industryCodeNonConsolidated = pluginData.getDeiValue('IndustryCodeWhenFinancialStatementsArePreparedInAccordanceWithIndustrySpecificRegulationsDEI')
1420
+
1421
+ if industryCodeConsolidated != 'LIQ' and industryCodeNonConsolidated != 'LIQ':
1422
+ return
1423
+
1424
+ roleUris = (
1425
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_StatementOfMembersEquity',
1426
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_StatementOfMembersEquity',
1427
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualStatementOfMembersEquity',
1428
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualStatementOfMembersEquity',
1429
+ )
1430
+
1431
+ for modelXbrl in pluginData.loadedModelXbrls:
1432
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1433
+ return
1434
+
1435
+ yield Validation.warning(
1436
+ codes='EDINET.EC8047W',
1437
+ msg=_("The statement of changes in employee capital etc. has not been tagged in detail. "
1438
+ "Please provide detailed tagging for the Statement of Changes in Employee Capital, etc."),
1439
+ )
1440
+
1441
+
1442
+ @validation(
1443
+ hook=ValidationHook.COMPLETE,
1444
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1445
+ )
1446
+ def rule_EC8048W(
1447
+ pluginData: ControllerPluginData,
1448
+ cntlr: Cntlr,
1449
+ fileSource: FileSource,
1450
+ *args: Any,
1451
+ **kwargs: Any,
1452
+ ) -> Iterable[Validation]:
1453
+ """
1454
+ EDINET.EC8048W: The consolidated cash flow statement is not detailed.
1455
+ If WhetherConsolidatedFinancialStatementsArePreparedDEI is TRUE, then an SCF must exist using one of the specified roles.
1456
+ """
1457
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1458
+ return
1459
+
1460
+ if pluginData.isConsolidated() != True:
1461
+ return
1462
+
1463
+ roleUris = (
1464
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_ConsolidatedStatementOfCashFlows-direct',
1465
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_ConsolidatedStatementOfCashFlows-direct',
1466
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualConsolidatedStatementOfCashFlows-direct',
1467
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualConsolidatedStatementOfCashFlows-direct',
1468
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_Type1SemiAnnualConsolidatedStatementOfCashFlows-direct',
1469
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_Type1SemiAnnualConsolidatedStatementOfCashFlows-direct',
1470
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_QuarterlyConsolidatedStatementOfCashFlows-direct',
1471
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_QuarterlyConsolidatedStatementOfCashFlows-direct',
1472
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_ConsolidatedStatementOfCashFlows-indirect',
1473
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_ConsolidatedStatementOfCashFlows-indirect',
1474
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualConsolidatedStatementOfCashFlows-indirect',
1475
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualConsolidatedStatementOfCashFlows-indirect',
1476
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_Type1SemiAnnualConsolidatedStatementOfCashFlows-indirect',
1477
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_Type1SemiAnnualConsolidatedStatementOfCashFlows-indirect',
1478
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_QuarterlyConsolidatedStatementOfCashFlows-indirect',
1479
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_QuarterlyConsolidatedStatementOfCashFlows-indirect',
1480
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_ConsolidatedStatementOfCashFlowsIFRS',
1481
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_std_ConsolidatedStatementOfCashFlowsIFRS',
1482
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedSemiAnnualConsolidatedStatementOfCashFlowsIFRS',
1483
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedQuarterlyConsolidatedStatementOfCashFlowsIFRS',
1484
+ )
1485
+
1486
+ for modelXbrl in pluginData.loadedModelXbrls:
1487
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1488
+ return
1489
+
1490
+ yield Validation.warning(
1491
+ codes='EDINET.EC8048W',
1492
+ msg=_("The consolidated cash flow statement is not detailed. "
1493
+ "Please tag the details of the consolidated cash flow statement. "
1494
+ "If you do not provide a consolidated cash flow statement, please make sure that "
1495
+ 'the "Consolidated Financial Statements" in the DEI information is correct.'),
1496
+ )
1497
+
1498
+
1499
+ @validation(
1500
+ hook=ValidationHook.COMPLETE,
1501
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1502
+ )
1503
+ def rule_EC8049W(
1504
+ pluginData: ControllerPluginData,
1505
+ cntlr: Cntlr,
1506
+ fileSource: FileSource,
1507
+ *args: Any,
1508
+ **kwargs: Any,
1509
+ ) -> Iterable[Validation]:
1510
+ """
1511
+ EDINET.EC8049W: The cash flow statement is not tagged in detail.
1512
+ If WhetherConsolidatedFinancialStatementsArePreparedDEI is FALSE, then an SCF must exist using one of the specified roles.
1513
+ """
1514
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1515
+ return
1516
+
1517
+ if pluginData.isConsolidated() != False:
1518
+ return
1519
+
1520
+ roleUris = (
1521
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_StatementOfCashFlows-direct',
1522
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_StatementOfCashFlows-direct',
1523
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualStatementOfCashFlows-direct',
1524
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualStatementOfCashFlows-direct',
1525
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_Type1SemiAnnualStatementOfCashFlows-direct',
1526
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_Type1SemiAnnualStatementOfCashFlows-direct',
1527
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_QuarterlyStatementOfCashFlows-direct',
1528
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_QuarterlyStatementOfCashFlows-direct',
1529
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_StatementOfCashFlows-indirect',
1530
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_StatementOfCashFlows-indirect',
1531
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_SemiAnnualStatementOfCashFlows-indirect',
1532
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_SemiAnnualStatementOfCashFlows-indirect',
1533
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_Type1SemiAnnualStatementOfCashFlows-indirect',
1534
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_Type1SemiAnnualStatementOfCashFlows-indirect',
1535
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_QuarterlyStatementOfCashFlows-indirect',
1536
+ 'http://disclosure.edinet-fsa.go.jp/role/jppfs/rol_std_QuarterlyStatementOfCashFlows-indirect',
1537
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_StatementOfCashFlowsIFRS',
1538
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedSemiAnnualStatementOfCashFlowsIFRS',
1539
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedQuarterlyStatementOfCashFlowsIFRS',
1540
+ )
1541
+
1542
+ for modelXbrl in pluginData.loadedModelXbrls:
1543
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1544
+ return
1545
+
1546
+ yield Validation.warning(
1547
+ codes='EDINET.EC8049W',
1548
+ msg=_("The cash flow statement is not tagged in detail. "
1549
+ "Please provide detailed tagging for the cash flow statement. "
1550
+ "If you do not provide a cash flow statement, please provide the DEI information with "
1551
+ '"Whether or not consolidated financial statements are provided."'),
1552
+ )
1553
+
1554
+
1555
+ @validation(
1556
+ hook=ValidationHook.COMPLETE,
1557
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1558
+ )
1559
+ def rule_EC8050W(
1560
+ pluginData: ControllerPluginData,
1561
+ cntlr: Cntlr,
1562
+ fileSource: FileSource,
1563
+ *args: Any,
1564
+ **kwargs: Any,
1565
+ ) -> Iterable[Validation]:
1566
+ """
1567
+ EDINET.EC8050W: Segment information is not tagged in detail.
1568
+ Based on AccountingStandardsDEI, segment information with ReportableSegmentsMember must exist.
1569
+ """
1570
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT, }):
1571
+ return
1572
+
1573
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1574
+ if accountingStandard == AccountingStandard.JAPAN_GAAP.value:
1575
+ roleUris: tuple[str, ...] = (
1576
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcType1SemiAnnualFinancialStatements-01',
1577
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcType1SemiAnnualFinancialStatements-02',
1578
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcType1SemiAnnualFinancialStatements-03',
1579
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcType1SemiAnnualConsolidatedFinancialStatements-01',
1580
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcType1SemiAnnualConsolidatedFinancialStatements-02',
1581
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcType1SemiAnnualConsolidatedFinancialStatements-03',
1582
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualFinancialStatements-01',
1583
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualFinancialStatements-02',
1584
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualFinancialStatements-03',
1585
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualFinancialStatements-04',
1586
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualFinancialStatements-05',
1587
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualFinancialStatements-06',
1588
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualFinancialStatements-07',
1589
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualFinancialStatements-08',
1590
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualFinancialStatements-09',
1591
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-01',
1592
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-02',
1593
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-03',
1594
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-04',
1595
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-05',
1596
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-06',
1597
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-07',
1598
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-08',
1599
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-09',
1600
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcQuarterlyFinancialStatements-01',
1601
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcQuarterlyFinancialStatements-02',
1602
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcQuarterlyFinancialStatements-03',
1603
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcQuarterlyConsolidatedFinancialStatements-01',
1604
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcQuarterlyConsolidatedFinancialStatements-02',
1605
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcQuarterlyConsolidatedFinancialStatements-03',
1606
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcFinancialStatements-01',
1607
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcFinancialStatements-02',
1608
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcFinancialStatements-03',
1609
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcFinancialStatements-04',
1610
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcFinancialStatements-05',
1611
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcFinancialStatements-06',
1612
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcFinancialStatements-07',
1613
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcFinancialStatements-08',
1614
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcFinancialStatements-09',
1615
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcConsolidatedFinancialStatements-01',
1616
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcConsolidatedFinancialStatements-02',
1617
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcConsolidatedFinancialStatements-03',
1618
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcConsolidatedFinancialStatements-04',
1619
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcConsolidatedFinancialStatements-05',
1620
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcConsolidatedFinancialStatements-06',
1621
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcConsolidatedFinancialStatements-07',
1622
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcConsolidatedFinancialStatements-08',
1623
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_std_NotesSegmentInformationEtcConsolidatedFinancialStatements-09',
1624
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcType1SemiAnnualFinancialStatements-01',
1625
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcType1SemiAnnualFinancialStatements-02',
1626
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcType1SemiAnnualFinancialStatements-03',
1627
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcType1SemiAnnualConsolidatedFinancialStatements-01',
1628
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcType1SemiAnnualConsolidatedFinancialStatements-02',
1629
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcType1SemiAnnualConsolidatedFinancialStatements-03',
1630
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualFinancialStatements-01',
1631
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualFinancialStatements-02',
1632
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualFinancialStatements-03',
1633
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualFinancialStatements-04',
1634
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualFinancialStatements-05',
1635
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualFinancialStatements-06',
1636
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualFinancialStatements-07',
1637
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualFinancialStatements-08',
1638
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualFinancialStatements-09',
1639
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-01',
1640
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-02',
1641
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-03',
1642
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-04',
1643
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-05',
1644
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-06',
1645
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-07',
1646
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-08',
1647
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcSemiAnnualConsolidatedFinancialStatements-09',
1648
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcQuarterlyFinancialStatements-01',
1649
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcQuarterlyFinancialStatements-02',
1650
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcQuarterlyFinancialStatements-03',
1651
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcQuarterlyConsolidatedFinancialStatements-01',
1652
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcQuarterlyConsolidatedFinancialStatements-02',
1653
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcQuarterlyConsolidatedFinancialStatements-03',
1654
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcFinancialStatements-01',
1655
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcFinancialStatements-02',
1656
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcFinancialStatements-03',
1657
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcFinancialStatements-04',
1658
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcFinancialStatements-05',
1659
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcFinancialStatements-06',
1660
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcFinancialStatements-07',
1661
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcFinancialStatements-08',
1662
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcFinancialStatements-09',
1663
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcConsolidatedFinancialStatements-01',
1664
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcConsolidatedFinancialStatements-02',
1665
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcConsolidatedFinancialStatements-03',
1666
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcConsolidatedFinancialStatements-04',
1667
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcConsolidatedFinancialStatements-05',
1668
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcConsolidatedFinancialStatements-06',
1669
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcConsolidatedFinancialStatements-07',
1670
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcConsolidatedFinancialStatements-08',
1671
+ 'http://disclosure.edinet-fsa.go.jp/role/jpcrp/rol_NotesSegmentInformationEtcConsolidatedFinancialStatements-09',
1672
+ )
1673
+ elif accountingStandard == AccountingStandard.IFRS.value:
1674
+ roleUris = (
1675
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_std_NotesSegmentInformationConsolidatedFinancialStatementsIFRS-01',
1676
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_std_NotesSegmentInformationConsolidatedFinancialStatementsIFRS-02',
1677
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_std_NotesSegmentInformationConsolidatedFinancialStatementsIFRS-03',
1678
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationFinancialStatementsIFRS-01',
1679
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationFinancialStatementsIFRS-02',
1680
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationFinancialStatementsIFRS-03',
1681
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationConsolidatedFinancialStatementsIFRS-01',
1682
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationConsolidatedFinancialStatementsIFRS-02',
1683
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationConsolidatedFinancialStatementsIFRS-03',
1684
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationCondensedSemiAnnualFinancialStatementsIFRS-01',
1685
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationCondensedSemiAnnualFinancialStatementsIFRS-02',
1686
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationCondensedSemiAnnualFinancialStatementsIFRS-03',
1687
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationCondensedSemiAnnualConsolidatedFinancialStatementsIFRS-01',
1688
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationCondensedSemiAnnualConsolidatedFinancialStatementsIFRS-02',
1689
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationCondensedSemiAnnualConsolidatedFinancialStatementsIFRS-03',
1690
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationCondensedQuarterlyFinancialStatementsIFRS-01',
1691
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationCondensedQuarterlyFinancialStatementsIFRS-02',
1692
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationCondensedQuarterlyFinancialStatementsIFRS-03',
1693
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationCondensedQuarterlyConsolidatedFinancialStatementsIFRS-01',
1694
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationCondensedQuarterlyConsolidatedFinancialStatementsIFRS-02',
1695
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_NotesSegmentInformationCondensedQuarterlyConsolidatedFinancialStatementsIFRS-03',
1696
+ )
1697
+ else:
1698
+ return
1699
+
1700
+ reportableSegmentsMemberQn = qname(pluginData.jpcrpNamespace, "ReportableSegmentsMember")
1701
+
1702
+ def _getConceptAndDescendantQNames(
1703
+ modelXbrl: ModelXbrl,
1704
+ concept: ModelConcept,
1705
+ relSet: ModelRelationshipSet,
1706
+ ) -> Iterable[QName]:
1707
+ # This is crude (doesn't handle target roles), but appears to be good enough for EDINET.
1708
+ if concept.qname is None:
1709
+ return
1710
+ yield concept.qname
1711
+ for rel in relSet.fromModelObject(concept):
1712
+ if isinstance(rel.toModelObject, ModelConcept):
1713
+ yield from _getConceptAndDescendantQNames(modelXbrl, rel.toModelObject, relSet)
1714
+
1715
+ for modelXbrl in pluginData.loadedModelXbrls:
1716
+ reportableSegmentsMember = modelXbrl.qnameConcepts.get(reportableSegmentsMemberQn)
1717
+ if reportableSegmentsMember is None:
1718
+ continue
1719
+ for roleUri in roleUris:
1720
+ domainMemberRelSet = modelXbrl.relationshipSet(XbrlConst.domainMember, roleUri)
1721
+ members = set(_getConceptAndDescendantQNames(modelXbrl, reportableSegmentsMember, domainMemberRelSet))
1722
+ if members and hasPresentationalConceptsWithFacts(modelXbrl, [roleUri], members):
1723
+ return
1724
+
1725
+ yield Validation.warning(
1726
+ codes='EDINET.EC8050W',
1727
+ msg=_("Segment information is not tagged in detail. "
1728
+ "Please provide detailed tagging of segment information."),
1729
+ )
1730
+
1731
+
1732
+ @validation(
1733
+ hook=ValidationHook.COMPLETE,
1734
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1735
+ )
1736
+ def rule_EC8061W(
1737
+ pluginData: ControllerPluginData,
1738
+ cntlr: Cntlr,
1739
+ fileSource: FileSource,
1740
+ *args: Any,
1741
+ **kwargs: Any,
1742
+ ) -> Iterable[Validation]:
1743
+ """
1744
+ EDINET.EC8061W: The consolidated statement of financial position has not been tagged in detail.
1745
+ If AccountingStandardsDEI = "IFRS" and WhetherConsolidatedFinancialStatementsArePreparedDEI = "true",
1746
+ then a section must exist using one of the specified roles.
1747
+ """
1748
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1749
+ return
1750
+
1751
+ if pluginData.isConsolidated() != True:
1752
+ return
1753
+
1754
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1755
+ if accountingStandard != AccountingStandard.IFRS.value:
1756
+ return
1757
+
1758
+ roleUris = (
1759
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_ConsolidatedStatementOfFinancialPositionIFRS',
1760
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_std_ConsolidatedStatementOfFinancialPositionIFRS',
1761
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedSemiAnnualConsolidatedStatementOfFinancialPositionIFRS',
1762
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedQuarterlyConsolidatedStatementOfFinancialPositionIFRS',
1763
+ )
1764
+
1765
+ for modelXbrl in pluginData.loadedModelXbrls:
1766
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1767
+ return
1768
+
1769
+ yield Validation.warning(
1770
+ codes='EDINET.EC8061W',
1771
+ msg=_("The consolidated statement of financial position has not been tagged in detail. "
1772
+ "Please provide a detailed tag for the consolidated statement of financial position. "
1773
+ "If you do not provide a consolidated statement of financial position, please confirm that "
1774
+ 'the "Consolidated Financial Statements" field in the DEI information is correct.'),
1775
+ )
1776
+
1777
+
1778
+ @validation(
1779
+ hook=ValidationHook.COMPLETE,
1780
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1781
+ )
1782
+ def rule_EC8063W(
1783
+ pluginData: ControllerPluginData,
1784
+ cntlr: Cntlr,
1785
+ fileSource: FileSource,
1786
+ *args: Any,
1787
+ **kwargs: Any,
1788
+ ) -> Iterable[Validation]:
1789
+ """
1790
+ EDINET.EC8063W: The statement of financial position has not been tagged in detail.
1791
+ If AccountingStandardsDEI = "IFRS" and WhetherConsolidatedFinancialStatementsArePreparedDEI = "false",
1792
+ then a section must exist using one of the specified roles.
1793
+ """
1794
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1795
+ return
1796
+
1797
+ if pluginData.isConsolidated() != False:
1798
+ return
1799
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1800
+ if accountingStandard != AccountingStandard.IFRS.value:
1801
+ return
1802
+
1803
+ roleUris = (
1804
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_StatementOfFinancialPositionIFRS',
1805
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedSemiAnnualStatementOfFinancialPositionIFRS',
1806
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedQuarterlyStatementOfFinancialPositionIFRS',
1807
+ )
1808
+
1809
+ for modelXbrl in pluginData.loadedModelXbrls:
1810
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1811
+ return
1812
+
1813
+ yield Validation.warning(
1814
+ codes='EDINET.EC8063W',
1815
+ msg=_("The statement of financial position has not been tagged in detail. "
1816
+ "Please provide detailed tagging of the statement of financial position."),
1817
+ )
1818
+
1819
+
1820
+ @validation(
1821
+ hook=ValidationHook.COMPLETE,
1822
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1823
+ )
1824
+ def rule_EC8065W(
1825
+ pluginData: ControllerPluginData,
1826
+ cntlr: Cntlr,
1827
+ fileSource: FileSource,
1828
+ *args: Any,
1829
+ **kwargs: Any,
1830
+ ) -> Iterable[Validation]:
1831
+ """
1832
+ EDINET.EC8065W: The consolidated statement of comprehensive income has not been tagged in detail.
1833
+ If AccountingStandardsDEI = "IFRS" and WhetherConsolidatedFinancialStatementsArePreparedDEI = "true",
1834
+ then a section must exist using one of the specified roles.
1835
+ """
1836
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1837
+ return
1838
+
1839
+ if pluginData.isConsolidated() != True:
1840
+ return
1841
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1842
+ if accountingStandard != AccountingStandard.IFRS.value:
1843
+ return
1844
+
1845
+ roleUris = (
1846
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_ConsolidatedStatementOfComprehensiveIncomeSingleStatementIFRS',
1847
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedSemiAnnualConsolidatedStatementOfComprehensiveIncomeSingleStatementIFRS',
1848
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedYearToQuarterEndConsolidatedStatementOfComprehensiveIncomeSingleStatementIFRS',
1849
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedQuarterPeriodConsolidatedStatementOfComprehensiveIncomeSingleStatementIFRS',
1850
+ )
1851
+
1852
+ for modelXbrl in pluginData.loadedModelXbrls:
1853
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1854
+ return
1855
+
1856
+ yield Validation.warning(
1857
+ codes='EDINET.EC8065W',
1858
+ msg=_("The consolidated statement of comprehensive income has not been tagged in detail. "
1859
+ "Please provide detailed tagging for the consolidated statement of comprehensive income. "
1860
+ "If you do not provide a consolidated statement of comprehensive income, please confirm that "
1861
+ 'the "Consolidated Financial Statements" field in the DEI information is correct.'),
1862
+ )
1863
+
1864
+
1865
+ @validation(
1866
+ hook=ValidationHook.COMPLETE,
1867
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1868
+ )
1869
+ def rule_EC8066W(
1870
+ pluginData: ControllerPluginData,
1871
+ cntlr: Cntlr,
1872
+ fileSource: FileSource,
1873
+ *args: Any,
1874
+ **kwargs: Any,
1875
+ ) -> Iterable[Validation]:
1876
+ """
1877
+ EDINET.EC8066W: The statement of comprehensive income has not been tagged in detail.
1878
+ If AccountingStandardsDEI = "IFRS" and WhetherConsolidatedFinancialStatementsArePreparedDEI = "false",
1879
+ then a section must exist using one of the specified roles.
1880
+ """
1881
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1882
+ return
1883
+
1884
+ if pluginData.isConsolidated() != False:
1885
+ return
1886
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1887
+ if accountingStandard != AccountingStandard.IFRS.value:
1888
+ return
1889
+
1890
+ roleUris = (
1891
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_StatementOfComprehensiveIncomeSingleStatementIFRS',
1892
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedSemiAnnualStatementOfComprehensiveIncomeSingleStatementIFRS',
1893
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedYearToQuarterEndStatementOfComprehensiveIncomeSingleStatementIFRS',
1894
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedQuarterPeriodStatementOfComprehensiveIncomeSingleStatementIFRS',
1895
+ )
1896
+
1897
+ for modelXbrl in pluginData.loadedModelXbrls:
1898
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1899
+ return
1900
+
1901
+ yield Validation.warning(
1902
+ codes='EDINET.EC8066W',
1903
+ msg=_("The statement of comprehensive income has not been tagged in detail. "
1904
+ "Please provide detailed tagging for the statement of comprehensive income."),
1905
+ )
1906
+
1907
+
1908
+ @validation(
1909
+ hook=ValidationHook.COMPLETE,
1910
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1911
+ )
1912
+ def rule_EC8067W(
1913
+ pluginData: ControllerPluginData,
1914
+ cntlr: Cntlr,
1915
+ fileSource: FileSource,
1916
+ *args: Any,
1917
+ **kwargs: Any,
1918
+ ) -> Iterable[Validation]:
1919
+ """
1920
+ EDINET.EC8067W: The consolidated statement of changes in equity has not been tagged in detail.
1921
+ If AccountingStandardsDEI = "IFRS" and WhetherConsolidatedFinancialStatementsArePreparedDEI = "true",
1922
+ then a section must exist using one of the specified roles.
1923
+ """
1924
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1925
+ return
1926
+
1927
+ if pluginData.isConsolidated() != True:
1928
+ return
1929
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1930
+ if accountingStandard != AccountingStandard.IFRS.value:
1931
+ return
1932
+
1933
+ roleUris = (
1934
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedQuarterlyConsolidatedStatementOfChangesInEquityIFRS',
1935
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedSemiAnnualConsolidatedStatementOfChangesInEquityIFRS',
1936
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_std_ConsolidatedStatementOfChangesInEquityIFRS',
1937
+ )
1938
+
1939
+ for modelXbrl in pluginData.loadedModelXbrls:
1940
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1941
+ return
1942
+
1943
+ yield Validation.warning(
1944
+ codes='EDINET.EC8067W',
1945
+ msg=_("The consolidated statement of changes in equity has not been tagged in detail. "
1946
+ "Please tag the details of the consolidated statement of changes in equity. "
1947
+ "If you do not include a consolidated statement of changes in equity, please confirm that "
1948
+ 'the "Consolidated" field in the DEI information is correct.'),
1949
+ )
1950
+
1951
+
1952
+ @validation(
1953
+ hook=ValidationHook.COMPLETE,
1954
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
1955
+ )
1956
+ def rule_EC8068W(
1957
+ pluginData: ControllerPluginData,
1958
+ cntlr: Cntlr,
1959
+ fileSource: FileSource,
1960
+ *args: Any,
1961
+ **kwargs: Any,
1962
+ ) -> Iterable[Validation]:
1963
+ """
1964
+ EDINET.EC8068W: The statement of changes in equity is not tagged in detail.
1965
+ If AccountingStandardsDEI = "IFRS" and WhetherConsolidatedFinancialStatementsArePreparedDEI = "false",
1966
+ then a section must exist using one of the specified roles.
1967
+ """
1968
+ if not pluginData.hasDocumentType({DocumentType.ANNUAL_SECURITIES_REPORT, DocumentType.SEMI_ANNUAL_REPORT}):
1969
+ return
1970
+
1971
+ if pluginData.isConsolidated() != False:
1972
+ return
1973
+ accountingStandard = pluginData.getDeiValue('AccountingStandardsDEI')
1974
+ if accountingStandard != AccountingStandard.IFRS.value:
1975
+ return
1976
+
1977
+ roleUris = (
1978
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_StatementOfChangesInEquityIFRS',
1979
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedSemiAnnualStatementOfChangesInEquityIFRS',
1980
+ 'http://disclosure.edinet-fsa.go.jp/role/jpigp/rol_CondensedQuarterlyStatementOfChangesInEquityIFRS',
1981
+ )
1982
+
1983
+ for modelXbrl in pluginData.loadedModelXbrls:
1984
+ if hasPresentationalConceptsWithFacts(modelXbrl, roleUris):
1985
+ return
1986
+
1987
+ yield Validation.warning(
1988
+ codes='EDINET.EC8068W',
1989
+ msg=_("The statement of changes in equity is not tagged in detail. "
1990
+ "Please provide detailed tagging of the statement of changes in equity."),
1991
+ )