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.
- arelle/Aspect.py +6 -3
- arelle/BetaFeatures.py +3 -0
- arelle/Cntlr.py +117 -413
- arelle/CntlrCmdLine.py +364 -227
- arelle/CntlrQuickBooks.py +4 -2
- arelle/CntlrWebMain.py +179 -119
- arelle/CntlrWinMain.py +342 -124
- arelle/DialogAbout.py +1 -1
- arelle/DialogArcroleGroup.py +1 -1
- arelle/DialogFind.py +1 -1
- arelle/DialogFormulaParameters.py +2 -2
- arelle/DialogLanguage.py +45 -36
- arelle/DialogNewFactItem.py +1 -1
- arelle/DialogOpenArchive.py +30 -34
- arelle/DialogPackageManager.py +11 -8
- arelle/DialogPluginManager.py +43 -89
- arelle/DialogRssWatch.py +2 -2
- arelle/DialogURL.py +1 -1
- arelle/DialogUserPassword.py +1 -1
- arelle/DisclosureSystem.py +69 -1
- arelle/ErrorManager.py +321 -0
- arelle/FileSource.py +201 -99
- arelle/FunctionFn.py +44 -5
- arelle/FunctionIxt.py +16 -13
- arelle/FunctionUtil.py +1 -1
- arelle/FunctionXfi.py +68 -24
- arelle/FunctionXs.py +1 -1
- arelle/HtmlUtil.py +5 -4
- arelle/LeiUtil.py +63 -43
- arelle/LinkbaseType.py +94 -0
- arelle/LocalViewer.py +8 -2
- arelle/Locale.py +239 -79
- arelle/ModelDocument.py +180 -48
- arelle/ModelDtsObject.py +32 -27
- arelle/ModelFormulaObject.py +14 -6
- arelle/ModelInstanceObject.py +43 -14
- arelle/ModelManager.py +6 -1
- arelle/ModelObject.py +12 -8
- arelle/ModelObjectFactory.py +18 -2
- arelle/ModelRelationshipSet.py +46 -3
- arelle/ModelRenderingObject.py +899 -951
- arelle/ModelRssItem.py +2 -4
- arelle/ModelTestcaseObject.py +41 -4
- arelle/ModelValue.py +42 -14
- arelle/ModelVersReport.py +1 -1
- arelle/ModelXbrl.py +133 -273
- arelle/PackageManager.py +202 -176
- arelle/PluginManager.py +551 -239
- arelle/PluginUtils.py +54 -0
- arelle/PrototypeInstanceObject.py +53 -12
- arelle/PythonUtil.py +166 -25
- arelle/RuntimeOptions.py +32 -18
- arelle/SocketUtils.py +3 -0
- arelle/SystemInfo.py +1 -1
- arelle/TkTableWrapper.py +33 -5
- arelle/UITkTable.py +27 -21
- arelle/Updater.py +7 -3
- arelle/UrlUtil.py +6 -2
- arelle/Validate.py +596 -402
- arelle/ValidateDuplicateFacts.py +584 -0
- arelle/ValidateFileSource.py +38 -0
- arelle/ValidateFilingText.py +46 -29
- arelle/ValidateInfoset.py +104 -32
- arelle/ValidateUtr.py +31 -4
- arelle/ValidateXbrl.py +144 -120
- arelle/ValidateXbrlCalcs.py +51 -66
- arelle/ValidateXbrlDTS.py +98 -29
- arelle/Version.py +2 -7
- arelle/ViewFile.py +2 -0
- arelle/ViewFileDTS.py +7 -2
- arelle/ViewFileFactList.py +1 -1
- arelle/ViewFileFactTable.py +4 -4
- arelle/ViewFileRelationshipSet.py +36 -19
- arelle/ViewFileRenderedGrid.py +164 -753
- arelle/ViewFileRenderedLayout.py +174 -0
- arelle/ViewFileRenderedStructure.py +108 -0
- arelle/ViewWinDTS.py +4 -1
- arelle/ViewWinFactList.py +1 -1
- arelle/ViewWinFactTable.py +1 -1
- arelle/ViewWinRelationshipSet.py +14 -8
- arelle/ViewWinRenderedGrid.py +397 -287
- arelle/ViewWinRssFeed.py +4 -0
- arelle/ViewWinTree.py +15 -9
- arelle/ViewWinXml.py +1 -1
- arelle/WebCache.py +510 -272
- arelle/XbrlConst.py +202 -196
- arelle/XbrlUtil.py +2 -1
- arelle/XhtmlValidate.py +9 -23
- arelle/XmlUtil.py +24 -19
- arelle/XmlValidate.py +95 -67
- arelle/XmlValidateParticles.py +4 -4
- arelle/_version.py +33 -3
- arelle/api/Session.py +183 -0
- arelle/config/creationSoftwareNames.json +24 -10
- arelle/config/disclosuresystems.xml +1 -1
- arelle/config/disclosuresystems.xsd +3 -0
- arelle/config/sbr-text-formatting.xsd +737 -0
- arelle/conformance/CSVTestcaseLoader.py +102 -0
- arelle/formula/FactAspectsCache.py +10 -4
- arelle/formula/ValidateFormula.py +82 -194
- arelle/formula/XPathContext.py +42 -28
- arelle/formula/XPathParser.py +15 -9
- arelle/locale/ar_EG/LC_MESSAGES/ar_EG.po +3 -4
- arelle/locale/messages.pot +1 -2
- arelle/locale/ru/LC_MESSAGES/ru.po +2 -2
- arelle/logging/formatters/LogFormatter.py +47 -0
- arelle/logging/handlers/LogHandlerWithXml.py +94 -0
- arelle/logging/handlers/LogToBufferHandler.py +20 -0
- arelle/logging/handlers/LogToPrintHandler.py +41 -0
- arelle/logging/handlers/LogToXmlHandler.py +244 -0
- arelle/logging/handlers/StructuredMessageLogHandler.py +74 -0
- arelle/model/CommentBase.py +3 -0
- arelle/model/ElementBase.py +3 -0
- arelle/model/PIBase.py +3 -0
- arelle/model/__init__.py +3 -0
- arelle/oim/Load.py +2869 -0
- arelle/oim/Validate.py +155 -0
- arelle/oim/xml/Save.py +21 -0
- arelle/packages/PackageConst.py +7 -0
- arelle/packages/PackageType.py +13 -0
- arelle/packages/PackageUtils.py +22 -0
- arelle/packages/PackageValidation.py +200 -0
- arelle/packages/report/DetectReportPackage.py +13 -0
- arelle/packages/report/ReportPackage.py +265 -0
- arelle/packages/report/ReportPackageConst.py +79 -0
- arelle/packages/report/ReportPackageValidator.py +207 -0
- arelle/plugin/EdgarRendererAllReports.py +12 -12
- arelle/plugin/OimTaxonomy/ModelValueMore.py +15 -0
- arelle/plugin/OimTaxonomy/ValidateDTS.py +484 -0
- arelle/plugin/OimTaxonomy/ViewXbrlTxmyObj.py +239 -0
- arelle/plugin/OimTaxonomy/XbrlAbstract.py +16 -0
- arelle/plugin/OimTaxonomy/XbrlConcept.py +68 -0
- arelle/plugin/OimTaxonomy/XbrlConst.py +261 -0
- arelle/plugin/OimTaxonomy/XbrlCube.py +91 -0
- arelle/plugin/OimTaxonomy/XbrlDimension.py +38 -0
- arelle/plugin/OimTaxonomy/XbrlDts.py +152 -0
- arelle/plugin/OimTaxonomy/XbrlEntity.py +16 -0
- arelle/plugin/OimTaxonomy/XbrlGroup.py +22 -0
- arelle/plugin/OimTaxonomy/XbrlImportedTaxonomy.py +22 -0
- arelle/plugin/OimTaxonomy/XbrlLabel.py +31 -0
- arelle/plugin/OimTaxonomy/XbrlNetwork.py +100 -0
- arelle/plugin/OimTaxonomy/XbrlProperty.py +28 -0
- arelle/plugin/OimTaxonomy/XbrlReference.py +33 -0
- arelle/plugin/OimTaxonomy/XbrlReport.py +24 -0
- arelle/plugin/OimTaxonomy/XbrlTableTemplate.py +35 -0
- arelle/plugin/OimTaxonomy/XbrlTaxonomy.py +93 -0
- arelle/plugin/OimTaxonomy/XbrlTaxonomyObject.py +154 -0
- arelle/plugin/OimTaxonomy/XbrlTransform.py +17 -0
- arelle/plugin/OimTaxonomy/XbrlTypes.py +23 -0
- arelle/plugin/OimTaxonomy/XbrlUnit.py +17 -0
- arelle/plugin/OimTaxonomy/__init__.py +1037 -0
- arelle/plugin/OimTaxonomy/resources/iso4217.json +4479 -0
- arelle/plugin/OimTaxonomy/resources/oim-taxonomy-schema.json +935 -0
- arelle/plugin/OimTaxonomy/resources/ref.json +333 -0
- arelle/plugin/OimTaxonomy/resources/transform-types.json +2481 -0
- arelle/plugin/OimTaxonomy/resources/types.json +727 -0
- arelle/plugin/OimTaxonomy/resources/utr.json +3046 -0
- arelle/plugin/OimTaxonomy/resources/xbrlSpec.json +1082 -0
- arelle/plugin/formulaLoader.py +3 -3
- arelle/plugin/formulaSaver.py +4 -4
- arelle/plugin/inlineXbrlDocumentSet.py +331 -102
- arelle/plugin/internet/proxyNTLM/HTTPNtlmAuthHandler.py +1 -1
- arelle/plugin/loadFromExcel.py +13 -10
- arelle/plugin/loadFromOIM.py +16 -3096
- arelle/plugin/logging/saveMessages.py +1 -1
- arelle/plugin/saveHtmlEBAtables.py +293 -213
- arelle/plugin/saveLoadableOIM.py +652 -361
- arelle/plugin/saveOIMTaxonomy.py +311 -0
- arelle/plugin/streamingExtensions.py +1 -1
- arelle/plugin/systemInfo.py +46 -0
- arelle/plugin/transforms/tester.py +4 -4
- arelle/plugin/validate/CIPC/Const.py +18 -0
- arelle/plugin/validate/CIPC/__init__.py +34 -13
- arelle/plugin/validate/DBA/DisclosureSystems.py +12 -0
- arelle/plugin/validate/DBA/PluginValidationDataExtension.py +165 -0
- arelle/plugin/validate/DBA/ValidationPluginExtension.py +545 -0
- arelle/plugin/validate/DBA/__init__.py +49 -0
- arelle/plugin/validate/DBA/resources/config.xml +21 -0
- arelle/plugin/validate/DBA/rules/__init__.py +323 -0
- arelle/plugin/validate/DBA/rules/fr.py +1377 -0
- arelle/plugin/validate/DBA/rules/tc.py +45 -0
- arelle/plugin/validate/DBA/rules/th.py +172 -0
- arelle/plugin/validate/DBA/rules/tm.py +351 -0
- arelle/plugin/validate/DBA/rules/tr.py +373 -0
- arelle/plugin/validate/EBA/__init__.py +11 -12
- arelle/plugin/validate/EDINET/Constants.py +208 -0
- arelle/plugin/validate/EDINET/ContextRequirement.py +58 -0
- arelle/plugin/validate/EDINET/ControllerPluginData.py +298 -0
- arelle/plugin/validate/EDINET/CoverItemRequirements.py +42 -0
- arelle/plugin/validate/EDINET/DeiRequirements.py +118 -0
- arelle/plugin/validate/EDINET/DisclosureSystems.py +1 -0
- arelle/plugin/validate/EDINET/FilingFormat.py +275 -0
- arelle/plugin/validate/EDINET/FormType.py +134 -0
- arelle/plugin/validate/EDINET/ManifestInstance.py +236 -0
- arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +640 -0
- arelle/plugin/validate/EDINET/ReportFolderType.py +162 -0
- arelle/plugin/validate/EDINET/Statement.py +139 -0
- arelle/plugin/validate/EDINET/TableOfContentsBuilder.py +493 -0
- arelle/plugin/validate/EDINET/UploadContents.py +48 -0
- arelle/plugin/validate/EDINET/ValidationPluginExtension.py +64 -0
- arelle/plugin/validate/EDINET/__init__.py +109 -0
- arelle/plugin/validate/EDINET/resources/config.xml +22 -0
- arelle/plugin/validate/EDINET/resources/cover-item-requirements.json +793 -0
- arelle/plugin/validate/EDINET/resources/dei-requirements.csv +27 -0
- arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml +62 -0
- arelle/plugin/validate/EDINET/rules/contexts.py +547 -0
- arelle/plugin/validate/EDINET/rules/edinet.py +1991 -0
- arelle/plugin/validate/EDINET/rules/frta.py +301 -0
- arelle/plugin/validate/EDINET/rules/gfm.py +2394 -0
- arelle/plugin/validate/EDINET/rules/manifests.py +88 -0
- arelle/plugin/validate/EDINET/rules/upload.py +1370 -0
- arelle/plugin/validate/ESEF/Const.py +16 -75
- arelle/plugin/validate/ESEF/Dimensions.py +2 -2
- arelle/plugin/validate/ESEF/ESEF_2021/DTS.py +6 -1
- arelle/plugin/validate/ESEF/ESEF_2021/Image.py +7 -4
- arelle/plugin/validate/ESEF/ESEF_2021/ValidateXbrlFinally.py +80 -57
- arelle/plugin/validate/ESEF/ESEF_Current/DTS.py +60 -22
- arelle/plugin/validate/ESEF/ESEF_Current/ValidateXbrlFinally.py +272 -133
- arelle/plugin/validate/ESEF/Util.py +5 -19
- arelle/plugin/validate/ESEF/__init__.py +61 -46
- arelle/plugin/validate/ESEF/resources/authority-validations.json +120 -10
- arelle/plugin/validate/ESEF/resources/config.xml +44 -3
- arelle/plugin/validate/FERC/__init__.py +31 -18
- arelle/plugin/validate/FERC/config.xml +18 -18
- arelle/plugin/validate/NL/DisclosureSystems.py +19 -3
- arelle/plugin/validate/NL/PluginValidationDataExtension.py +710 -7
- arelle/plugin/validate/NL/ValidationPluginExtension.py +117 -12
- arelle/plugin/validate/NL/__init__.py +21 -10
- arelle/plugin/validate/NL/resources/config.xml +27 -6
- arelle/plugin/validate/NL/rules/br_kvk.py +81 -21
- arelle/plugin/validate/NL/rules/fg_nl.py +292 -0
- arelle/plugin/validate/NL/rules/fr_kvk.py +60 -7
- arelle/plugin/validate/NL/rules/fr_nl.py +705 -24
- arelle/plugin/validate/NL/rules/nl_kvk.py +2182 -0
- arelle/plugin/validate/ROS/DisclosureSystems.py +1 -0
- arelle/plugin/validate/ROS/PluginValidationDataExtension.py +109 -0
- arelle/plugin/validate/ROS/ValidationPluginExtension.py +27 -0
- arelle/plugin/validate/ROS/__init__.py +28 -341
- arelle/plugin/validate/ROS/resources/config.xml +20 -0
- arelle/plugin/validate/ROS/rules/__init__.py +56 -0
- arelle/plugin/validate/ROS/rules/ros.py +393 -0
- arelle/plugin/validate/UK/ValidateUK.py +1372 -0
- arelle/plugin/validate/{HMRC → UK}/__init__.py +195 -189
- arelle/plugin/validate/{HMRC → UK}/config.xml +1 -1
- arelle/plugin/xbrlDB/SqlDb.py +1 -1
- arelle/plugin/xbrlDB/XbrlOpenSqlDB.py +5 -5
- arelle/plugin/xbrlDB/XbrlPublicPostgresDB.py +1 -1
- arelle/plugin/xbrlDB/XbrlSemanticJsonDB.py +1 -1
- arelle/plugin/xbrlDB/XbrlSemanticRdfDB.py +1 -1
- arelle/plugin/xbrlDB/__init__.py +4 -1
- arelle/{RenderingEvaluator.py → rendering/RenderingEvaluator.py} +120 -99
- arelle/rendering/RenderingLayout.py +476 -0
- arelle/rendering/RenderingResolution.py +814 -0
- arelle/resources/cache/http/www.eurofiling.info/eu/fr/xbrl/ext/filing-indicators.xsd +20 -0
- arelle/resources/cache/http/www.w3.org/2001/03/xml.xsd +117 -0
- arelle/resources/cache/http/www.w3.org/2001/XMLSchema.xsd +2534 -0
- arelle/resources/cache/http/www.w3.org/2001/xml.xsd +287 -0
- arelle/resources/cache/http/www.xbrl.org/2003/xbrl-instance-2003-12-31.xsd +779 -0
- arelle/resources/cache/http/www.xbrl.org/2003/xbrl-linkbase-2003-12-31.xsd +486 -0
- arelle/resources/cache/http/www.xbrl.org/2003/xl-2003-12-31.xsd +251 -0
- arelle/resources/cache/http/www.xbrl.org/2003/xlink-2003-12-31.xsd +121 -0
- arelle/resources/cache/http/www.xbrl.org/2004/ref-2004-08-10.xsd +129 -0
- arelle/resources/cache/http/www.xbrl.org/2005/xbrldt-2005.xsd +53 -0
- arelle/resources/cache/http/www.xbrl.org/2006/ref-2006-02-27.xsd +120 -0
- arelle/resources/cache/http/www.xbrl.org/2006/xbrldi-2006.xsd +41 -0
- arelle/resources/cache/http/www.xbrl.org/2008/boolean-filter.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2008/concept-filter.xsd +127 -0
- arelle/resources/cache/http/www.xbrl.org/2008/conformance.xsd +116 -0
- arelle/resources/cache/http/www.xbrl.org/2008/conformanceFunction.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2008/consistency-assertion.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2008/dimension-filter.xsd +86 -0
- arelle/resources/cache/http/www.xbrl.org/2008/entity-filter.xsd +92 -0
- arelle/resources/cache/http/www.xbrl.org/2008/existence-assertion.xsd +44 -0
- arelle/resources/cache/http/www.xbrl.org/2008/formula.xsd +261 -0
- arelle/resources/cache/http/www.xbrl.org/2008/function.xsd +90 -0
- arelle/resources/cache/http/www.xbrl.org/2008/general-filter.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2008/generic-label.xsd +80 -0
- arelle/resources/cache/http/www.xbrl.org/2008/generic-link.xsd +81 -0
- arelle/resources/cache/http/www.xbrl.org/2008/generic-reference.xsd +63 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xl-2003-12-31.xsd +248 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xbrl/xlink-2003-12-31.xsd +117 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xframes-1.xsd +166 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-applet-1.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-attribs-1.xsd +72 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-base-1.xsd +36 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-form-1.xsd +195 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic-table-1.xsd +169 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-model-1.xsd +376 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10-modules-1.xsd +259 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-basic10.xsd +98 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-bdo-1.xsd +78 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkphras-1.xsd +161 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkpres-1.xsd +37 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-blkstruct-1.xsd +49 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-charent-1.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-copyright-1.xsd +29 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-csismap-1.xsd +96 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-datatypes-1.xsd +128 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-edit-1.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-events-1.xsd +130 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-form-1.xsd +326 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-frames-1.xsd +113 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-framework-1.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-hypertext-1.xsd +47 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-iframe-1.xsd +68 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-image-1.xsd +45 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlphras-1.xsd +163 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlpres-1.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstruct-1.xsd +50 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-inlstyle-1.xsd +27 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-legacy-1.xsd +97 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-link-1.xsd +45 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-list-1.xsd +99 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-meta-1.xsd +42 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-misc-1.xsd +441 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-nameident-1.xsd +63 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-notations-1.xsd +69 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-object-1.xsd +76 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-param-1.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-pres-1.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-1.xsd +171 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ruby-basic-1.xsd +89 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-script-1.xsd +70 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-ssismap-1.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-struct-1.xsd +112 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-style-1.xsd +52 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-table-1.xsd +272 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-target-1.xsd +53 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml-text-1.xsd +67 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-model-1.xsd +677 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-module-redefines-1.xsd +335 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11-modules-1.xsd +528 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml11.xsd +104 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xhtml2.xsd +21 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-1.xsd +73 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-2.xsd +74 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-1.xsd +73 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-attribs-2.xsd +75 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-1.xsd +34 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-events-copyright-2.xsd +34 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml/xml-handlers-2.xsd +98 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-definitions.xsd +225 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-model.xsd +681 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0-modules.xsd +535 -0
- arelle/resources/cache/http/www.xbrl.org/2008/inlinexbrl/xhtml-inlinexbrl-1_0.xsd +40 -0
- arelle/resources/cache/http/www.xbrl.org/2008/match-filter.xsd +94 -0
- arelle/resources/cache/http/www.xbrl.org/2008/period-filter.xsd +86 -0
- arelle/resources/cache/http/www.xbrl.org/2008/registry.xsd +145 -0
- arelle/resources/cache/http/www.xbrl.org/2008/relative-filter.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2008/segment-scenario-filter.xsd +41 -0
- arelle/resources/cache/http/www.xbrl.org/2008/tuple-filter.xsd +83 -0
- arelle/resources/cache/http/www.xbrl.org/2008/unit-filter.xsd +58 -0
- arelle/resources/cache/http/www.xbrl.org/2008/validation.xsd +78 -0
- arelle/resources/cache/http/www.xbrl.org/2008/value-assertion.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2008/value-filter.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2008/variable.xsd +240 -0
- arelle/resources/cache/http/www.xbrl.org/2010/aspect-cover-filter.xsd +67 -0
- arelle/resources/cache/http/www.xbrl.org/2010/concept-relation-filter.xsd +108 -0
- arelle/resources/cache/http/www.xbrl.org/2010/custom-function-implementation.xsd +71 -0
- arelle/resources/cache/http/www.xbrl.org/2010/generic-message.xsd +68 -0
- arelle/resources/cache/http/www.xbrl.org/2010/validation-message.xsd +50 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-instance-2003-12-31-ixmod.xsd +788 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xbrl-linkbase-2003-12-31-ixmod.xsd +488 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xl-2003-12-31.xsd +248 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xbrl/xlink-2003-12-31.xsd +117 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xframes-1.xsd +166 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-applet-1.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-attribs-1.xsd +72 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-base-1.xsd +36 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-form-1.xsd +195 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic-table-1.xsd +169 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-model-1.xsd +376 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-module-redefines-1.xsd +61 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10-modules-1.xsd +259 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-basic10.xsd +98 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-bdo-1.xsd +78 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkphras-1.xsd +161 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkpres-1.xsd +37 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-blkstruct-1.xsd +49 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-charent-1.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-copyright-1.xsd +29 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-csismap-1.xsd +96 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-datatypes-1.xsd +128 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-edit-1.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-events-1.xsd +130 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-form-1.xsd +326 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-frames-1.xsd +113 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-framework-1.xsd +66 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-hypertext-1.xsd +47 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-iframe-1.xsd +68 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-image-1.xsd +45 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlphras-1.xsd +163 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlpres-1.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstruct-1.xsd +50 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-inlstyle-1.xsd +27 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-legacy-1.xsd +97 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-link-1.xsd +45 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-list-1.xsd +99 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-meta-1.xsd +42 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-misc-1.xsd +441 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-nameident-1.xsd +63 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-notations-1.xsd +69 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-object-1.xsd +76 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-param-1.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-pres-1.xsd +51 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-1.xsd +171 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ruby-basic-1.xsd +89 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-script-1.xsd +70 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-ssismap-1.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-struct-1.xsd +112 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-style-1.xsd +52 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-table-1.xsd +272 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-target-1.xsd +53 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml-text-1.xsd +67 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-model-1.xsd +677 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-module-redefines-1.xsd +335 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11-modules-1.xsd +528 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml11.xsd +104 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xhtml2.xsd +21 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-1.xsd +73 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-2.xsd +74 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-1.xsd +73 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-attribs-2.xsd +75 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-1.xsd +34 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-events-copyright-2.xsd +34 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml/xml-handlers-2.xsd +98 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-definitions.xsd +252 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-model.xsd +681 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1-modules.xsd +535 -0
- arelle/resources/cache/http/www.xbrl.org/2013/inlineXBRL/xhtml-inlinexbrl-1_1.xsd +40 -0
- arelle/resources/cache/http/www.xbrl.org/2013/match-filter.xsd +94 -0
- arelle/resources/cache/http/www.xbrl.org/2013/preferred-label.xsd +12 -0
- arelle/resources/cache/http/www.xbrl.org/2013/versioning-base.xsd +142 -0
- arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-details.xsd +143 -0
- arelle/resources/cache/http/www.xbrl.org/2013/versioning-concept-use.xsd +64 -0
- arelle/resources/cache/http/www.xbrl.org/2013/versioning-dimensions.xsd +162 -0
- arelle/resources/cache/http/www.xbrl.org/2014/extensible-enumerations.xsd +27 -0
- arelle/resources/cache/http/www.xbrl.org/2014/table.xsd +356 -0
- arelle/resources/cache/http/www.xbrl.org/2014/tablemodel.xsd +156 -0
- arelle/resources/cache/http/www.xbrl.org/2016/assertion-severity.xsd +29 -0
- arelle/resources/cache/http/www.xbrl.org/2016/severities.xml +21 -0
- arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package-catalog.xsd +38 -0
- arelle/resources/cache/http/www.xbrl.org/2016/taxonomy-package.xsd +154 -0
- arelle/resources/cache/http/www.xbrl.org/2022/assertion-severity.xsd +43 -0
- arelle/resources/cache/http/www.xbrl.org/2022/severities.xml +21 -0
- arelle/resources/cache/http/www.xbrl.org/dtr/type/nonNumeric-2009-12-16.xsd +76 -0
- arelle/resources/cache/http/www.xbrl.org/dtr/type/numeric-2009-12-16.xsd +78 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/accounting-arcrole-2023-01-04.xsd +39 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/deprecated-2009-12-16.xsd +29 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/esma-arcrole-2018-11-21.xsd +14 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/factExplanatory-2009-12-16.xsd +13 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/jpfr-arcrole-2007-11-07.xsd +27 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/arcrole/parent-child-2013-09-19.xsd +12 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/deprecated-2009-12-16.xsd +17 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/jpfr-role-2007-11-07.xsd +47 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2008-03-31.xsd +30 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/negated-2009-12-16.xsd +33 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/negative-2009-12-16.xsd +25 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/net-2009-12-16.xsd +13 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/positive-2009-12-16.xsd +25 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/property-2022-09-28.xsd +15 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/reference-2009-12-16.xsd +21 -0
- arelle/resources/cache/http/www.xbrl.org/lrr/role/restated-2006-02-21.xsd +19 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2012-01-30/utr.xml +4543 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2012-10-31/utr.xml +4510 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2012-11-30/utr.xml +4567 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2013-02-28/utr.xml +5180 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2013-05-17/utr.xml +5349 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2016-08-10/utr.xml +5363 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2017-07-12/utr.xml +6164 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2021-02-16/utr.xml +6370 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2021-12-08/utr.xml +6493 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2022-02-16/utr.xml +6551 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2022-07-20/utr.xml +6638 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2023-12-20/utr.xml +6680 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2024-01-31/utr.xml +6680 -0
- arelle/resources/cache/http/www.xbrl.org/utr/2024-10-22/utr.xml +6693 -0
- arelle/resources/cache/http/www.xbrl.org/utr/utr.xml +6693 -0
- arelle/resources/cache/https/www.xbrl.org/2005/conformance.xsd +87 -0
- arelle/resources/cache/https/www.xbrl.org/2020/extensible-enumerations-2.0.xsd +51 -0
- arelle/resources/cache/https/www.xbrl.org/2023/calculation-1.1.xsd +27 -0
- arelle/resources/cache/https/www.xbrl.org/dtr/type/2020-01-21/types.xsd +812 -0
- arelle/resources/cache/https/www.xbrl.org/dtr/type/2022-03-31/types.xsd +847 -0
- arelle/resources/cache/https/www.xbrl.org/dtr/type/2024-01-31/types.xsd +897 -0
- arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-def.xml +68 -0
- arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators-label.xml +84 -0
- arelle/resources/cache/https/www.xbrl.org/taxonomy/int/filing-indicators/REC/2021-02-03/filing-indicators.xsd +67 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/README.txt +149 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/html/tkTable.html +2039 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/libTktable2.11.so +0 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/license.txt +51 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/pkgIndex.tcl +3 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/tkTable.tcl +825 -0
- arelle/resources/libs/Tktable2.11/linux-x86_64/tktable.py +674 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/README.txt +149 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/html/tkTable.html +2039 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/libTktable2.11.dylib +0 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/license.txt +51 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/pkgIndex.tcl +2 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/tkTable.tcl +825 -0
- arelle/resources/libs/Tktable2.11/macos-arm64/tktable.py +674 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/README.txt +149 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/html/tkTable.html +2039 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/libTktable2.11.dylib +0 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/license.txt +51 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/pkgIndex.tcl +2 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/tkTable.tcl +825 -0
- arelle/resources/libs/Tktable2.11/macos-x86_64/tktable.py +674 -0
- arelle/resources/libs/Tktable2.11/win-x86_64/Tktable.dll +0 -0
- arelle/resources/libs/Tktable2.11/win-x86_64/pkgIndex.tcl +2 -0
- arelle/resources/libs/Tktable2.11/win-x86_64/tkTable.tcl +825 -0
- arelle/typing.py +9 -4
- arelle/utils/Contexts.py +38 -0
- arelle/utils/EntryPointDetection.py +139 -0
- arelle/utils/Equivalence.py +22 -0
- arelle/utils/{validate/PluginValidationData.py → PluginData.py} +5 -2
- arelle/utils/PluginHooks.py +256 -5
- arelle/utils/Units.py +36 -0
- arelle/utils/validate/Decorator.py +5 -3
- arelle/utils/validate/DetectScriptsInXhtml.py +99 -0
- arelle/utils/validate/ESEFImage.py +283 -0
- arelle/utils/validate/Validation.py +9 -1
- arelle/utils/validate/ValidationPlugin.py +74 -11
- arelle/utils/validate/ValidationUtil.py +55 -0
- arelle/webserver/bottle.py +5 -4424
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/METADATA +51 -42
- arelle_release-2.37.71.dist-info/RECORD +697 -0
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/WHEEL +1 -1
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info/licenses}/LICENSE.md +1 -4
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/top_level.txt +0 -1
- arelle/DialogOpenTaxonomyPackage.py +0 -1
- arelle/RenderingResolver.py +0 -624
- arelle/examples/.pydevproject +0 -5
- arelle/examples/CustomLogger.py +0 -43
- arelle/examples/LoadEFMvalidate.py +0 -32
- arelle/examples/LoadSavePreLbCsv.py +0 -26
- arelle/examples/LoadValidate.cs +0 -31
- arelle/examples/LoadValidate.py +0 -36
- arelle/examples/LoadValidateCmdLine.java +0 -69
- arelle/examples/LoadValidatePostedZip.java +0 -57
- arelle/examples/LoadValidateWebService.java +0 -34
- arelle/examples/SaveTableToExelle.py +0 -140
- arelle/examples/TR3toTR4.py +0 -88
- arelle/examples/plugin/bigInstance.py +0 -394
- arelle/examples/plugin/cmdWebServerExtension.py +0 -42
- arelle/examples/plugin/crashTest.py +0 -38
- arelle/examples/plugin/formulaSuiteConverter.py +0 -212
- arelle/examples/plugin/functionsCustom.py +0 -59
- arelle/examples/plugin/hello_dolly.py +0 -64
- arelle/examples/plugin/hello_i18n.pot +0 -26
- arelle/examples/plugin/hello_i18n.py +0 -32
- arelle/examples/plugin/importTestChild1.py +0 -21
- arelle/examples/plugin/importTestChild2.py +0 -22
- arelle/examples/plugin/importTestGrandchild1.py +0 -21
- arelle/examples/plugin/importTestGrandchild2.py +0 -21
- arelle/examples/plugin/importTestImported1.py +0 -23
- arelle/examples/plugin/importTestImported11.py +0 -22
- arelle/examples/plugin/importTestParent.py +0 -48
- arelle/examples/plugin/locale/fr/LC_MESSAGES/hello_i18n.po +0 -25
- arelle/examples/plugin/packagedImportTest/__init__.py +0 -47
- arelle/examples/plugin/packagedImportTest/importTestChild1.py +0 -21
- arelle/examples/plugin/packagedImportTest/importTestChild2.py +0 -22
- arelle/examples/plugin/packagedImportTest/importTestGrandchild1.py +0 -21
- arelle/examples/plugin/packagedImportTest/importTestGrandchild2.py +0 -21
- arelle/examples/plugin/packagedImportTest/importTestImported1.py +0 -24
- arelle/examples/plugin/packagedImportTest/importTestImported11.py +0 -21
- arelle/examples/plugin/packagedImportTest/subdir/importTestImported111.py +0 -21
- arelle/examples/plugin/packagedImportTest/subdir/subsubdir/importTestImported1111.py +0 -21
- arelle/examples/plugin/sakaCalendar.py +0 -215
- arelle/examples/plugin/saveInstanceInfoset.py +0 -121
- arelle/examples/plugin/streamingExtensions.py +0 -335
- arelle/examples/plugin/testcaseCalc11ValidateSetup.py +0 -32
- arelle/examples/plugin/testcaseIxExpectedHtmlFixup.py +0 -45
- arelle/examples/plugin/updateTableLB.py +0 -242
- arelle/examples/plugin/validate/XYZ/DisclosureSystems.py +0 -2
- arelle/examples/plugin/validate/XYZ/PluginValidationDataExtension.py +0 -10
- arelle/examples/plugin/validate/XYZ/ValidationPluginExtension.py +0 -49
- arelle/examples/plugin/validate/XYZ/__init__.py +0 -75
- arelle/examples/plugin/validate/XYZ/resources/config.xml +0 -16
- arelle/examples/plugin/validate/XYZ/rules/rules01.py +0 -109
- arelle/examples/plugin/validate/XYZ/rules/rules02.py +0 -58
- arelle/examples/plugin/validateSchemaLxml.py +0 -156
- arelle/examples/plugin/validateTableInfoset.py +0 -52
- arelle/examples/us-gaap-dei-docType-extraction-frm.xml +0 -90
- arelle/examples/us-gaap-dei-ratio-cash-frm.xml +0 -150
- arelle/plugin/functionsXmlCreation.py +0 -106
- arelle/plugin/instanceInfo.py +0 -306
- arelle/plugin/loadFromOIM-2018.py +0 -1282
- arelle/plugin/objectmaker.py +0 -285
- arelle/plugin/sphinx/FormulaGenerator.py +0 -823
- arelle/plugin/sphinx/SphinxContext.py +0 -404
- arelle/plugin/sphinx/SphinxEvaluator.py +0 -783
- arelle/plugin/sphinx/SphinxMethods.py +0 -1287
- arelle/plugin/sphinx/SphinxParser.py +0 -1093
- arelle/plugin/sphinx/SphinxValidator.py +0 -163
- arelle/plugin/sphinx/US-GAAP Ratios Example.xsr +0 -52
- arelle/plugin/sphinx/__init__.py +0 -285
- arelle/plugin/transforms/SEC/__init__.py +0 -308
- arelle/plugin/transforms/SEC/conf/README.md +0 -39
- arelle/plugin/transforms/SEC/conf/extractTestcase.sh +0 -2
- arelle/plugin/transforms/SEC/conf/extractTestcase.xsl +0 -109
- arelle/plugin/transforms/SEC/conf/runIxtSecTests.sh +0 -16
- arelle/plugin/transforms/SEC/conf/saxon9.jar +0 -0
- arelle/plugin/transforms/SEC/conf/testcase.xml +0 -7117
- arelle/plugin/transforms/SEC/conf/tests.xml +0 -848
- arelle/plugin/transforms/SEC/text2num.py +0 -110
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-boolballotbox.xml +0 -66
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-countrynameen.xml +0 -65
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-datequarterend.xml +0 -66
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durday.xml +0 -61
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durhour.xml +0 -69
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durmonth.xml +0 -71
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durweek.xml +0 -70
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-durwordsen.xml +0 -56
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-duryear.xml +0 -64
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-edgarprovcountryen.xml +0 -65
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-entityfilercategoryen.xml +0 -63
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-exchnameen.xml +0 -86
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-numwordsen.xml +0 -55
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-stateprovnameen.xml +0 -64
- arelle/plugin/transforms/SEC/transformationRegistry/registry/ixt-sec-yesnoballotbox.xml +0 -66
- arelle/plugin/transforms/SEC/transformationRegistry/registry/transform-registry.xml +0 -314
- arelle/plugin/transforms/SEC/transformationRegistry/schema/inlinexbrl-sec-transformation.xsd +0 -418
- arelle/plugin/validate/EFM/Consts.py +0 -362
- arelle/plugin/validate/EFM/DTS.py +0 -569
- arelle/plugin/validate/EFM/Dimensions.py +0 -264
- arelle/plugin/validate/EFM/Document.py +0 -206
- arelle/plugin/validate/EFM/Filing.py +0 -4383
- arelle/plugin/validate/EFM/IsolateSeparateIXDSes.py +0 -19
- arelle/plugin/validate/EFM/MessageNumericId.py +0 -142
- arelle/plugin/validate/EFM/PreCalAlignment.py +0 -324
- arelle/plugin/validate/EFM/Util.py +0 -688
- arelle/plugin/validate/EFM/__init__.py +0 -843
- arelle/plugin/validate/EFM/config.xml +0 -333
- arelle/plugin/validate/EFM/resources/README.md +0 -57
- arelle/plugin/validate/EFM/resources/axiswarnings.json +0 -27
- arelle/plugin/validate/EFM/resources/cef-deprecated-concepts.json +0 -8
- arelle/plugin/validate/EFM/resources/country-deprecated-concepts.json +0 -19
- arelle/plugin/validate/EFM/resources/currency-deprecated-concepts.json +0 -7
- arelle/plugin/validate/EFM/resources/dei-deprecated-concepts.json +0 -8
- arelle/plugin/validate/EFM/resources/dei-validations.json +0 -2884
- arelle/plugin/validate/EFM/resources/dqc-us-rules.json +0 -1389
- arelle/plugin/validate/EFM/resources/ecd-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-16-4.xml +0 -115
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-0-4.xml +0 -300
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-1.xml +0 -304
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-2.xml +0 -290
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-17-3-1.xml +0 -294
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.1.xml +0 -549
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.2.xml +0 -506
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-18.3.xml +0 -496
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-1.xml +0 -662
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-2.xml +0 -3761
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-19-3.xml +0 -3577
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-1.xml +0 -4020
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-2.xml +0 -3320
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-20-3.xml +0 -2998
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2012.xml +0 -957
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2013.xml +0 -982
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2014.xml +0 -1001
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2015.xml +0 -1076
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-2016.xml +0 -120
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-1.xml +0 -3329
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-2.xml +0 -1230
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-3.xml +0 -1113
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-21-4.xml +0 -1321
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1-preview.xml +0 -1721
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-1.xml +0 -1841
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2-2.xml +0 -1450
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-2.xml +0 -1429
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-22-4.xml +0 -1527
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1-1.xml +0 -2049
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-1.xml +0 -2065
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-2.xml +0 -1674
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-23-3.xml +0 -1715
- arelle/plugin/validate/EFM/resources/edgartaxonomies/edgartaxonomies-all-years.xml +0 -10671
- arelle/plugin/validate/EFM/resources/edgartaxonomies/erxl.xsd +0 -69
- arelle/plugin/validate/EFM/resources/edgartaxonomies/extendedtaxonomies-all-years.xml +0 -18
- arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrs-taxonomies.xml +0 -3126
- arelle/plugin/validate/EFM/resources/edgartaxonomies/ifrstaxonomies-all-years.xml +0 -22
- arelle/plugin/validate/EFM/resources/ex26-validations.json +0 -255
- arelle/plugin/validate/EFM/resources/exch-deprecated-concepts.json +0 -163
- arelle/plugin/validate/EFM/resources/ifrs-full-deprecated-concepts.json +0 -204
- arelle/plugin/validate/EFM/resources/invest-deprecated-concepts.json +0 -99
- arelle/plugin/validate/EFM/resources/ixbrl-transform-registries.json +0 -16
- arelle/plugin/validate/EFM/resources/naics-deprecated-concepts.json +0 -295
- arelle/plugin/validate/EFM/resources/oef-deprecated-concepts.json +0 -59
- arelle/plugin/validate/EFM/resources/other-standard-taxonomies.json +0 -12
- arelle/plugin/validate/EFM/resources/rr-deprecated-concepts.json +0 -14
- arelle/plugin/validate/EFM/resources/rxp-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/shr-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/sic-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/signwarnings.json +0 -112
- arelle/plugin/validate/EFM/resources/srt-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/stpr-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/resources/taxonomy-compatibility.json +0 -79
- arelle/plugin/validate/EFM/resources/us-gaap-deprecated-concepts.json +0 -2886
- arelle/plugin/validate/EFM/resources/us-gaap-rels-2020.json +0 -29068
- arelle/plugin/validate/EFM/resources/us-gaap-rels-2021.json +0 -29598
- arelle/plugin/validate/EFM/resources/us-gaap-rels-2022.json +0 -29141
- arelle/plugin/validate/EFM/resources/us-gaap-rels-2023.json +0 -29400
- arelle/plugin/validate/EFM/resources/vip-deprecated-concepts.json +0 -1
- arelle/plugin/validate/EFM/tools/CheckTxmyRefs.py +0 -180
- arelle/plugin/validate/EFM-htm/Const.py +0 -205
- arelle/plugin/validate/EFM-htm/__init__.py +0 -217
- arelle/plugin/validate/EFM-htm/config.xml +0 -17
- arelle/plugin/validate/EFM-htm/resources/efm-htm.dtd +0 -664
- arelle/plugin/validate/ESEF/ESEF_Current/Image.py +0 -199
- arelle/plugin/validate/ESEF_2022/__init__.py +0 -47
- arelle/plugin/validate/GFM/__init__.py +0 -59
- arelle/plugin/validate/GFM/config.xml +0 -82
- arelle/plugin/validate/SBRnl/CustomLoader.py +0 -19
- arelle/plugin/validate/SBRnl/DTS.py +0 -305
- arelle/plugin/validate/SBRnl/Dimensions.py +0 -357
- arelle/plugin/validate/SBRnl/Document.py +0 -799
- arelle/plugin/validate/SBRnl/Filing.py +0 -467
- arelle/plugin/validate/SBRnl/__init__.py +0 -75
- arelle/plugin/validate/SBRnl/config.xml +0 -26
- arelle/plugin/validate/SBRnl/sbr-nl-taxonomies.xml +0 -754
- arelle/plugin/validate/USBestPractices.py +0 -570
- arelle/plugin/validate/USCorpAction.py +0 -557
- arelle/plugin/validate/USSecTagging.py +0 -337
- arelle/plugin/validate/XDC/__init__.py +0 -77
- arelle/plugin/validate/XDC/config.xml +0 -20
- arelle/plugin/validate/XFsyntax/__init__.py +0 -64
- arelle/plugin/validate/XFsyntax/xf.py +0 -2227
- arelle/plugin/validate/__init__.py +0 -20
- arelle/plugin/validate/calc2.py +0 -536
- arelle/plugin/validateSBRnl.py +0 -530
- arelle/scripts-macOS/startWebServer.command +0 -3
- arelle/scripts-unix/startWebServer.sh +0 -1
- arelle/scripts-windows/startWebServer.bat +0 -5
- arelle_release-2.17.1.dist-info/RECORD +0 -676
- tests/__init__.py +0 -0
- tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/ArelleGUITest.csproj +0 -30
- tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Tests.cs +0 -381
- tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest/Usings.cs +0 -1
- tests/integration_tests/ui_tests/ArelleGUITest/ArelleGUITest.sln +0 -31
- tests/integration_tests/ui_tests/resources/workiva.zip +0 -0
- tests/integration_tests/validation/README.md +0 -50
- tests/integration_tests/validation/conformance_suite_config.py +0 -59
- tests/integration_tests/validation/conformance_suite_configs.py +0 -63
- tests/integration_tests/validation/conformance_suite_configurations/efm_current.py +0 -261
- tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2021.py +0 -85
- tests/integration_tests/validation/conformance_suite_configurations/esef_ixbrl_2022.py +0 -90
- tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2021.py +0 -15
- tests/integration_tests/validation/conformance_suite_configurations/esef_xhtml_2022.py +0 -15
- tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_2_1.py +0 -34
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_calculations_1_1.py +0 -40
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_dimensions_1_0.py +0 -28
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_1_0.py +0 -10
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_extensible_enumerations_2_0.py +0 -10
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0.py +0 -9
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_assertion_severity_2_0.py +0 -9
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_formula_1_0_function_registry.py +0 -14
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_ixbrl_1_1.py +0 -22
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_link_role_registry_1_0.py +0 -11
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_oim_1_0.py +0 -19
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_table_linkbase_1_0.py +0 -296
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_taxonomy_packages_1_0.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_3.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_4.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_transformation_registry_5.py +0 -13
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_malformed_1_0.py +0 -31
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_registry_1_0.py +0 -22
- tests/integration_tests/validation/conformance_suite_configurations/xbrl_utr_structure_1_0.py +0 -18
- tests/integration_tests/validation/conftest.py +0 -24
- tests/integration_tests/validation/discover_tests.py +0 -22
- tests/integration_tests/validation/download_conformance_suites.py +0 -47
- tests/integration_tests/validation/run_conformance_suites.py +0 -175
- tests/integration_tests/validation/test_conformance_suites.py +0 -14
- tests/integration_tests/validation/validation_util.py +0 -271
- tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-invalid-period.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt16/br_kvk/2-04-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-missing.xbrl +0 -53
- tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-multiple.xbrl +0 -60
- tests/resources/conformance_suites/nl_nt16/br_kvk/3-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-invalid.xbrl +0 -57
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-07-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-invalid.xbrl +0 -58
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-10-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-invalid.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-12-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-missing.xbrl +0 -61
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-16-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-invalid-date.xbrl +0 -89
- tests/resources/conformance_suites/nl_nt16/br_kvk/4-20-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-invalid-file-extension.xml +0 -56
- tests/resources/conformance_suites/nl_nt16/fr_kvk/1-01-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-invalid-lang.xbrl +0 -56
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-missing-lang.xbrl +0 -55
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-entrypoint.xsd +0 -6
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt16/fr_kvk/2-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
- tests/resources/conformance_suites/nl_nt16/fr_kvk/5-01-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
- tests/resources/conformance_suites/nl_nt16/fr_kvk/5-02-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-file.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-invalid-doctype.xbrl +0 -4
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-invalid-encoding.xbrl +0 -0
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-06-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-06.invalid.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-file.xbrl +0 -8
- tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt16/fr_nl/2-06-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt16/index.xml +0 -20
- tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-invalid-period.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt17/br_kvk/2-04-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-missing.xbrl +0 -53
- tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-multiple.xbrl +0 -60
- tests/resources/conformance_suites/nl_nt17/br_kvk/3-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-invalid.xbrl +0 -57
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-07-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-invalid.xbrl +0 -58
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-10-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-invalid.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-12-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-missing.xbrl +0 -61
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-16-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-invalid-date.xbrl +0 -89
- tests/resources/conformance_suites/nl_nt17/br_kvk/4-20-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-invalid-file-extension.xml +0 -56
- tests/resources/conformance_suites/nl_nt17/fr_kvk/1-01-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-invalid-lang.xbrl +0 -56
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-missing-lang.xbrl +0 -55
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-entrypoint.xsd +0 -6
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-invalid-entrypoint.xbrl +0 -63
- tests/resources/conformance_suites/nl_nt17/fr_kvk/2-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-invalid-decimals.xbrl +0 -49
- tests/resources/conformance_suites/nl_nt17/fr_kvk/5-01-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-invalid-decimals.xbrl +0 -49
- tests/resources/conformance_suites/nl_nt17/fr_kvk/5-02-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-file.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-invalid-doctype.xbrl +0 -4
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-invalid-encoding.xbrl +0 -0
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-testcases.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-06-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-06.invalid.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-file.xbrl +0 -8
- tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt17/fr_nl/2-06-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt17/index.xml +0 -20
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-invalid-doctype.xbrl +0 -4
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-invalid-encoding.xbrl +0 -0
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-testcases.xml +0 -22
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-06-testcase.xml +0 -22
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-06.invalid.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-file.xbrl +0 -2
- tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt18/fr_nl/1.01-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-file.xbrl +0 -8
- tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-invalid-zip.zip +0 -0
- tests/resources/conformance_suites/nl_nt18/fr_nl/2-06-testcase.xml +0 -33
- tests/resources/conformance_suites/nl_nt18/index.xml +0 -8
- tests/unit_tests/arelle/conftest.py +0 -16
- tests/unit_tests/arelle/formula/test_fact_aspects_cache.py +0 -170
- tests/unit_tests/arelle/plugin/test_loadfromoim.py +0 -40
- tests/unit_tests/arelle/plugin/test_plugin_imports.py +0 -27
- tests/unit_tests/arelle/test_betafeatures.py +0 -81
- tests/unit_tests/arelle/test_cntlr.py +0 -28
- tests/unit_tests/arelle/test_import.py +0 -40
- tests/unit_tests/arelle/test_locale.py +0 -73
- tests/unit_tests/arelle/test_modelmanager.py +0 -15
- tests/unit_tests/arelle/test_packagemanager.py +0 -65
- tests/unit_tests/arelle/test_pluginmanager.py +0 -176
- tests/unit_tests/arelle/test_qname.py +0 -140
- tests/unit_tests/arelle/test_runtimeoptions.py +0 -56
- tests/unit_tests/arelle/test_system_info.py +0 -26
- tests/unit_tests/arelle/test_updater.py +0 -507
- tests/unit_tests/arelle/test_urlutil.py +0 -49
- tests/unit_tests/arelle/test_version.py +0 -46
- tests/unit_tests/arelle/utils/validate/test_decorator.py +0 -59
- /arelle/{examples/plugin/validate/XYZ → plugin/validate/EDINET}/rules/__init__.py +0 -0
- /arelle/plugin/validate/{HMRC → UK}/consistencyChecksByName.json +0 -0
- /arelle/plugin/validate/{HMRC → UK}/hmrc-taxonomies.xml +0 -0
- {arelle_release-2.17.1.dist-info → arelle_release-2.37.71.dist-info}/entry_points.txt +0 -0
|
@@ -1,843 +0,0 @@
|
|
|
1
|
-
'''
|
|
2
|
-
This is a collective work.
|
|
3
|
-
See COPYRIGHT.md for copyright information for original work.
|
|
4
|
-
Subsequent validations and enhancements created by staff of the U.S. Securities and Exchange Commission.
|
|
5
|
-
Data and content created by government employees within the scope of their employment are not subject
|
|
6
|
-
to domestic copyright protection. 17 U.S.C. 105.
|
|
7
|
-
Implementation of DQC rules invokes https://xbrl.us/dqc-license and https://xbrl.us/dqc-patent.
|
|
8
|
-
|
|
9
|
-
Input file parameters may be in JSON (without newlines for pretty printing as below):
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
[ {# current fields in JSON structure from Arelle Wrapper, per instance
|
|
13
|
-
"file": "file path to instance or html"
|
|
14
|
-
or "ixds":[{"file": "file path to first html"},...]
|
|
15
|
-
"cik": "1234567890",
|
|
16
|
-
"cikNameList": { "cik1": "name1", "cik2":"name2", "cik3":"name3"...},
|
|
17
|
-
"submissionType" : "SDR-A",
|
|
18
|
-
"exhibitType": "EX-99.K", # this is a legal term, separate from attachmentDocumentType (below)
|
|
19
|
-
"itemsList": [] # array of items, e.g. ["5.03"] (either array of strings blank-separated items in string)
|
|
20
|
-
"accessionNumber":"0001125840-15-000159" ,
|
|
21
|
-
# new fields
|
|
22
|
-
"periodOfReport": "mm-dd-yyyy",
|
|
23
|
-
"entityRegistration.fyEnd": "mm/dd", # the FY End value from entity (CIK) registration
|
|
24
|
-
"entity.repFileNum": file number from entity (CIK) registration
|
|
25
|
-
"submissionHeader.fyEnd": "mm/dd", # the FY End value from submission header
|
|
26
|
-
"voluntaryFilerFlag": true/false, # JSON Boolean, string Yes/No, yes/no, Y/N, y/n or absent
|
|
27
|
-
"wellKnownSeasonedIssuerFlag": true/false, # JSON Boolean, string Yes/No, yes/no, Y/N, y/n or absent
|
|
28
|
-
"shellCompanyFlag": true/false, true/false, # JSON Boolean, string Yes/No, yes/no, Y/N, y/n or absent
|
|
29
|
-
"acceleratedFilerStatus": true/false, # JSON Boolean, string Yes/No, yes/no, Y/N, y/n or absent
|
|
30
|
-
"smallBusinessFlag": true/false, # JSON Boolean, string Yes/No, yes/no, Y/N, y/n or absent
|
|
31
|
-
"emergingGrowthCompanyFlag": true/false, # JSON Boolean, string Yes/No, yes/no, Y/N, y/n or absent
|
|
32
|
-
"exTransitionPeriodFlag": true/false, # JSON Boolean, string Yes/No, yes/no, Y/N, y/n or absent
|
|
33
|
-
# filer - use "cik" above
|
|
34
|
-
"invCompanyType": "N-1A" # from table of investment company types
|
|
35
|
-
"rptIncludeAllSeriesFlag": true/false, # JSON Boolean, string Yes/No, yes/no, Y/N, y/n or absent
|
|
36
|
-
"rptSeriesClassInfo.seriesIds": ["S0000990666", ...] # list of EDGAR seriesId values
|
|
37
|
-
"newClass2.seriesIds": [] # //seriesId xpath result on submission headers
|
|
38
|
-
"rptIncludeAllClassesFlag": true/false, # JSON Boolean, string Yes/No, yes/no, Y/N, y/n or absent
|
|
39
|
-
"rptSeriesClassInfo.classIds": ["C000000123", ...] # list of EDGAR classId values
|
|
40
|
-
"newClass2.classIds": [] # //classId xpath result on submission headers
|
|
41
|
-
"saveCoverFacts": test environment file into which to save JSON output
|
|
42
|
-
# CEF forms
|
|
43
|
-
"eligibleFundFlag": true/false, # JSON Boolean, string Yes/No, yes/no, Y/N, y/n or absent
|
|
44
|
-
"pursuantGeneralInstructionFlag": true/false, # JSON Boolean, string Yes/No, yes/no, Y/N, y/n or absent
|
|
45
|
-
"filerNewRegistrantFlag": true/false, # JSON Boolean, string Yes/No, yes/no, Y/N, y/n or absent
|
|
46
|
-
# Test/debug fields
|
|
47
|
-
datetimeForTesting: xml-syntax datetime to override clock time for test/debug purposes
|
|
48
|
-
dqcRuleFilter: null or absent for all DQC rules, else regular expression to filter which rules run
|
|
49
|
-
(e.g. "DQC.US.00(04|15)" ), but not including the id suffix (which is not filterable)
|
|
50
|
-
If parameter is absent and config.xml for disclosureSystem options specifies a dqc-rule-filter, it will be in effect
|
|
51
|
-
# fee table instance validations (only):
|
|
52
|
-
"attachmentDocumentType": "EX-FILINGS FEES", # this field is mandatory for fee table instance validations else instance will be validated as a financial report
|
|
53
|
-
# attachmentDocumentType must match an entry in feeTaggingExhibitTypes (Consts.py) for instance to be recognized as a fee table instance
|
|
54
|
-
"submissionType" : "S-1", # this field is mandatory for fee table instance validations
|
|
55
|
-
"feeRate": "0.000130" # decimal number expressed in string - feeRate on the filing date
|
|
56
|
-
"feeValuesFromFacts": true # save fee facts in json
|
|
57
|
-
"saveFeeFacts": test environment file into which to save JSON output
|
|
58
|
-
# EX-26 attachment document types
|
|
59
|
-
"attachmentDocumentType": "EX-26", # this field is mandatory for EX-26 validations else instance will be validated as a financial report
|
|
60
|
-
"fileNumber": "333-12345", # the file number for amending submission
|
|
61
|
-
},
|
|
62
|
-
{"file": "file 2"...
|
|
63
|
-
]
|
|
64
|
-
|
|
65
|
-
For test case operation, the above fields accepted from testcase variation:
|
|
66
|
-
<data>
|
|
67
|
-
<conf:parameter name="cikName" datatype="xs:string" value="cik1:name1" xmlns="" xmlns:conf="http://edgar/2009/conformance" />
|
|
68
|
-
<conf:parameter name="cikName" datatype="xs:string" value="cik2:name2" xmlns="" xmlns:conf="http://edgar/2009/conformance" />
|
|
69
|
-
<conf:parameter name="cikName" datatype="xs:string" value="cik3:name3" xmlns="" xmlns:conf="http://edgar/2009/conformance" />
|
|
70
|
-
<conf:parameter name="submissionType" datatype="xs:string" value="8-K" xmlns="" xmlns:conf="http://edgar/2009/conformance" />
|
|
71
|
-
<conf:parameter name="periodOfReport" datatype="xs:string" value="12-31-2017" xmlns="" xmlns:conf="http://edgar/2009/conformance" />
|
|
72
|
-
<conf:parameter name="voluntaryFilerFlag" datatype="xs:boolean" value="true" xmlns="" xmlns:conf="http://edgar/2009/conformance" />
|
|
73
|
-
<conf:parameter name="coregCikFileNumber" datatype="xs:string" value="cik1:fileNbr1" xmlns="" xmlns:conf="http://edgar/2009/conformance" />
|
|
74
|
-
<conf:parameter name="coregCikFileNumber" datatype="xs:string" value="cik2:fileNbr2" xmlns="" xmlns:conf="http://edgar/2009/conformance" />
|
|
75
|
-
<conf:parameter name="coregCikFileNumber" datatype="xs:string" value="cik3:fileNbr3" xmlns="" xmlns:conf="http://edgar/2009/conformance" />
|
|
76
|
-
<conf:parameter name="sroId" datatype="xs:string" value="NASD" xmlns="" xmlns:conf="http://edgar/2009/conformance" />
|
|
77
|
-
<conf:parameter name="sroId" datatype="xs:string" value="NYSE" xmlns="" xmlns:conf="http://edgar/2009/conformance" />
|
|
78
|
-
...
|
|
79
|
-
<instance readMeFirst="true">e9999999ng-20081231.xml</instance>
|
|
80
|
-
<data>
|
|
81
|
-
|
|
82
|
-
(Accession number is only needed for those EdgarRenderer output transformations of
|
|
83
|
-
FilingSummary.xml which require it as a parameter (such as EDGAR's internal workstations,
|
|
84
|
-
which have a database that requires accession number as part of the query string to retrieve
|
|
85
|
-
a file of a submission.)
|
|
86
|
-
|
|
87
|
-
On Windows, the input file argument must be specially quoted if passed in via Java
|
|
88
|
-
due to a Java bug on Windows shell interface (without the newlines for pretty printing below):
|
|
89
|
-
|
|
90
|
-
"[{\"file\":\"z:\\Documents\\dir\\gpc_gd1-20130930.htm\",
|
|
91
|
-
\"cik\": \"0000350001\",
|
|
92
|
-
\"cikNameList\": {\"0000350001\":\"BIG FUND TRUST CO\"},
|
|
93
|
-
\"submissionType\":\"SDR-A\", \"attachmentDocumentType\":\"EX-99.K SDR.INS\"}]"
|
|
94
|
-
|
|
95
|
-
To build cached deprecated concepts files (requires internet access):
|
|
96
|
-
First delete any resources/*deprecated-concept.json which you want to rebuild
|
|
97
|
-
arelleCmdLine --plugin validate/EFM --build-deprecated-concepts-file
|
|
98
|
-
|
|
99
|
-
In GUI mode please use formula parameters dialog to emulate the above. The parameters are named as above (with no prefix), and
|
|
100
|
-
an additional EdgarRenderer parameters:
|
|
101
|
-
noLogsInSummary or includeLogsInSummary (default) (this parameter does not need a value, just presence)
|
|
102
|
-
The parameters with array values are entered to the GUI as blank-separated strings (no quotes):
|
|
103
|
-
itemsList could be 5.03 6.99
|
|
104
|
-
rptSeriesClassInfo.seriesIds could be S0000990666 S0000990777 S0000990888
|
|
105
|
-
classIDs could be C000000123 C000000124 C000000125
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
For GUI mode there are two ways to set rendering output, (1) by formula parameter and (2) by GUI view menu.
|
|
109
|
-
If both formula parameters summaryXslt and reportXslt are provided they override use of the GUI menu setting
|
|
110
|
-
("view/Workstation Redline Mode"):
|
|
111
|
-
summaryXslt (use EdgarWorkstationSummarize.xslt to emulate EDGAR workstation)
|
|
112
|
-
reportXslt (use EdgarWorkstationInstanceReport.xslt to emulate EDGAR workstation)
|
|
113
|
-
ixRedline (when emulating EDGAR workstation, true specifies showing workstation inline XBRL redlines)
|
|
114
|
-
Otherwise menu entry view/Workstation Redline Mode, when checked, selects Edgar Workstation xslt's and ixRedline as above.
|
|
115
|
-
|
|
116
|
-
'''
|
|
117
|
-
import os, io, json, zipfile, logging
|
|
118
|
-
jsonIndent = 1 # None for most compact, 0 for left aligned
|
|
119
|
-
from decimal import Decimal, InvalidOperation
|
|
120
|
-
from lxml.etree import XML, XMLSyntaxError
|
|
121
|
-
from arelle import ModelDocument, ModelValue, XmlUtil, FileSource
|
|
122
|
-
from arelle.ModelDocument import Type
|
|
123
|
-
from arelle.ModelInstanceObject import ModelFact
|
|
124
|
-
from arelle.ModelValue import qname
|
|
125
|
-
from arelle.PluginManager import pluginClassMethods # , pluginMethodsForClasses, modulePluginInfos
|
|
126
|
-
from arelle.PythonUtil import flattenSequence
|
|
127
|
-
from arelle.UrlUtil import authority, relativeUri
|
|
128
|
-
from arelle.ValidateFilingText import referencedFiles
|
|
129
|
-
from arelle.Version import authorLabel, copyrightLabel
|
|
130
|
-
from arelle.XmlValidateConst import VALID
|
|
131
|
-
from .Document import checkDTSdocument
|
|
132
|
-
from .Consts import (feeTagEltsNotRelevelable, feeTagMessageCodesRelevelable, feeTaggingAttachmentDocumentTypePattern,
|
|
133
|
-
supplementalAttachmentDocumentTypesPattern, exhibitTypesStrippingOnErrorPattern)
|
|
134
|
-
from .Filing import validateFiling
|
|
135
|
-
from .MessageNumericId import messageNumericId
|
|
136
|
-
import regex as re
|
|
137
|
-
from collections import defaultdict
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
def dislosureSystemTypes(disclosureSystem, *args, **kwargs):
|
|
141
|
-
# return ((disclosure system name, variable name), ...)
|
|
142
|
-
return (("EFM", "EFMplugin"),)
|
|
143
|
-
|
|
144
|
-
def disclosureSystemConfigURL(disclosureSystem, *args, **kwargs):
|
|
145
|
-
return os.path.join(os.path.dirname(__file__), "config.xml")
|
|
146
|
-
|
|
147
|
-
def validateXbrlStart(val, parameters=None, *args, **kwargs):
|
|
148
|
-
val.validateEFMplugin = val.validateDisclosureSystem and getattr(val.disclosureSystem, "EFMplugin", False)
|
|
149
|
-
if not (val.validateEFMplugin):
|
|
150
|
-
return
|
|
151
|
-
|
|
152
|
-
val.params = {}
|
|
153
|
-
parameterNames = ("CIK", "cik", "cikList", "cikNameList", "submissionType", "exhibitType", "attachmentDocumentType", # CIK or cik both allowed
|
|
154
|
-
"itemsList", "accessionNumber", "entity.repFileNum",
|
|
155
|
-
"periodOfReport", "entityRegistration.fyEnd", "submissionHeader.fyEnd", "voluntaryFilerFlag",
|
|
156
|
-
"wellKnownSeasonedIssuerFlag", "shellCompanyFlag", "acceleratedFilerStatus", "smallBusinessFlag",
|
|
157
|
-
"emergingGrowthCompanyFlag", "exTransitionPeriodFlag", "invCompanyType",
|
|
158
|
-
"rptIncludeAllSeriesFlag", "rptSeriesClassInfo.seriesIds", "newClass2.seriesIds",
|
|
159
|
-
"rptIncludeAllClassesFlag", "rptSeriesClassInfo.classIds", "newClass2.classIds",
|
|
160
|
-
"eligibleFundFlag", "pursuantGeneralInstructionFlag", "filerNewRegistrantFlag",
|
|
161
|
-
"datetimeForTesting", "dqcRuleFilter", "saveCoverFacts",
|
|
162
|
-
"feeRate", "feeValuesFromFacts", "saveFeeFacts", "fiscalYearEnd", "intrstRate", "issrNm", "fileNumber")
|
|
163
|
-
boolParameterNames = {"voluntaryFilerFlag", "wellKnownSeasonedIssuerFlag", "shellCompanyFlag", "acceleratedFilerStatus",
|
|
164
|
-
"smallBusinessFlag", "emergingGrowthCompanyFlag", "exTransitionPeriodFlag", "rptIncludeAllSeriesFlag",
|
|
165
|
-
"filerNewRegistrantFlag", "pursuantGeneralInstructionFlag", "eligibleFundFlag"}
|
|
166
|
-
parameterEisFileTags = {
|
|
167
|
-
"cik":["depositorId", "cik", "filerId"],
|
|
168
|
-
"submissionType": "submissionType",
|
|
169
|
-
"itemsList": "item",
|
|
170
|
-
"periodOfReport": "periodOfReport",
|
|
171
|
-
#"headerFyEnd": ?,
|
|
172
|
-
#"voluntaryFilerFlag": ?,
|
|
173
|
-
"wellKnownSeasonedIssuerFlag": "wellKnownSeasonedIssuerFlag",
|
|
174
|
-
#"shellCompanyFlag": ?,
|
|
175
|
-
"acceleratedFilerStatus": "acceleratedFilerStatus",
|
|
176
|
-
"smallBusinessFlag": "smallBusinessFlag",
|
|
177
|
-
"emergingGrowthCompanyFlag": "emergingGrowthCompanyFlag",
|
|
178
|
-
"exTransitionPeriodFlag": "exTransitionPeriodFlag",
|
|
179
|
-
"invCompanyType": "invCompany",
|
|
180
|
-
#"rptIncludeAllSeriesFlag": ?,
|
|
181
|
-
#"rptSeriesClassInfo.seriesIds": ?,
|
|
182
|
-
#"newClass2.seriesIds": ?,
|
|
183
|
-
"filerNewRegistrantFlag": "filerNewRegistrantFlag",
|
|
184
|
-
"pursuantGeneralInstructionFlag": "pursuantGeneralInstructionFlag",
|
|
185
|
-
"eligibleFundFlag": "eligibleFundFlag",
|
|
186
|
-
"feeRate": "feeRate",
|
|
187
|
-
}
|
|
188
|
-
# retrieve any EIS file parameters first
|
|
189
|
-
if val.modelXbrl.fileSource and val.modelXbrl.fileSource.isEis and hasattr(val.modelXbrl.fileSource, "eisDocument"):
|
|
190
|
-
eisDoc = val.modelXbrl.fileSource.eisDocument
|
|
191
|
-
for paramName, eisEltNames in parameterEisFileTags.items():
|
|
192
|
-
paramQName = ModelValue.qname(paramName,noPrefixIsNoNamespace=True)
|
|
193
|
-
for eisElt in eisDoc.iter(*("{*}"+e for e in flattenSequence(eisEltNames))):
|
|
194
|
-
if paramName in ("itemsList",):
|
|
195
|
-
parameters.setdefault(paramQName, []).append(eisElt.text)
|
|
196
|
-
else:
|
|
197
|
-
parameters[paramQName] = ("", "".join(eisElt.itertext()).strip())
|
|
198
|
-
if parameters: # parameter-provided CIKs and registrant names
|
|
199
|
-
for paramName in parameterNames:
|
|
200
|
-
p = parameters.get(ModelValue.qname(paramName,noPrefixIsNoNamespace=True))
|
|
201
|
-
if p and len(p) == 2 and p[1] not in ("null", "None", None):
|
|
202
|
-
v = p[1] # formula dialog and cmd line formula parameters may need type conversion
|
|
203
|
-
if isinstance(v, str):
|
|
204
|
-
if paramName in boolParameterNames:
|
|
205
|
-
v = {"true":True, "false":False}.get(v, v)
|
|
206
|
-
elif paramName in {"itemsList", "rptSeriesClassInfo.seriesIds", "newClass2.seriesIds", "rptSeriesClassInfo.classIds", "newClass2.classIds"}:
|
|
207
|
-
v = v.split()
|
|
208
|
-
elif paramName == "feeRate":
|
|
209
|
-
if isinstance(v, float):
|
|
210
|
-
val.modelXbrl.warning("arelle.Parameters",
|
|
211
|
-
_("parameter %(name)s has should not have float value %(value)s"),
|
|
212
|
-
modelXbrl=val.modelXbrl, name=paramName, value=v)
|
|
213
|
-
try:
|
|
214
|
-
v = Decimal(v)
|
|
215
|
-
except (ValueError, InvalidOperation):
|
|
216
|
-
val.modelXbrl.error("arelle.Parameters",
|
|
217
|
-
_("parameter %(name)s has non-decimal value %(value)s"),
|
|
218
|
-
modelXbrl=val.modelXbrl, name=paramName, value=v)
|
|
219
|
-
continue # don't use parameter
|
|
220
|
-
val.params[paramName] = v
|
|
221
|
-
if "CIK" in val.params: # change to lower case key
|
|
222
|
-
val.params["cik"] = val.params["CIK"]
|
|
223
|
-
del val.params["CIK"]
|
|
224
|
-
for paramName, p in parameters.items(): # allow ELOparams to be in any namespace (no xmlns="" required)
|
|
225
|
-
if paramName and paramName.localName == "ELOparams" and len(p) == 2 and p[1] not in ("null", "None", None):
|
|
226
|
-
try:
|
|
227
|
-
for key, value in json.loads(p[1]).items():
|
|
228
|
-
if key == "feeRate":
|
|
229
|
-
try:
|
|
230
|
-
value = Decimal(value)
|
|
231
|
-
except (ValueError, InvalidOperation):
|
|
232
|
-
val.modelXbrl.error("arelle.Parameters",
|
|
233
|
-
_("parameter %(name)s has non-decimal value %(value)s"),
|
|
234
|
-
modelXbrl=val.modelXbrl, name=key, value=value)
|
|
235
|
-
continue # don't use parameter
|
|
236
|
-
val.params[{"CIK":"cik"}.get(key,key)] = value # change upper case CIK to lower case
|
|
237
|
-
except (ValueError, AttributeError, TypeError):
|
|
238
|
-
val.modelXbrl.error("arelle.testcaseVariationParameters",
|
|
239
|
-
_("parameter ELOparams has malformed JSON %(json)s object"),
|
|
240
|
-
modelXbrl=val.modelXbrl, json=p[1][:100])
|
|
241
|
-
break
|
|
242
|
-
# parameters may also come from report entryPoint (such as attachmentDocumentType for SDR)
|
|
243
|
-
if hasattr(val.modelXbrl.modelManager, "efmFiling"):
|
|
244
|
-
efmFiling = val.modelXbrl.modelManager.efmFiling
|
|
245
|
-
if efmFiling.reports: # possible that there are no reports
|
|
246
|
-
entryPoint = efmFiling.reports[-1].entryPoint
|
|
247
|
-
for paramName in parameterNames: # cik is lower case here
|
|
248
|
-
v = entryPoint.get(paramName)
|
|
249
|
-
if paramName in boolParameterNames:
|
|
250
|
-
v = {"true":True, "false":False}.get(v, v)
|
|
251
|
-
elif paramName == "feeRate" and v not in (None, ""):
|
|
252
|
-
if isinstance(v, float):
|
|
253
|
-
val.modelXbrl.warning("arelle.Parameters",
|
|
254
|
-
_("parameter %(name)s should not have float value %(value)s"),
|
|
255
|
-
modelXbrl=val.modelXbrl, name=paramName, value=v)
|
|
256
|
-
try:
|
|
257
|
-
v = Decimal(v)
|
|
258
|
-
except (ValueError, InvalidOperation):
|
|
259
|
-
val.modelXbrl.error("arelle.Parameters",
|
|
260
|
-
_("parameter %(name)s has non-decimal value %(value)s"),
|
|
261
|
-
modelXbrl=val.modelXbrl, name=paramName, value=v)
|
|
262
|
-
v = None
|
|
263
|
-
if v not in (None, ""):
|
|
264
|
-
val.params[paramName] = v # if not set uses prior value
|
|
265
|
-
if "CIK" in val.params: # change to lower case key
|
|
266
|
-
val.params["cik"] = val.params["CIK"]
|
|
267
|
-
del val.params["CIK"]
|
|
268
|
-
|
|
269
|
-
# attachmentType, if xBRL-XML, is suffixed ".INS", remove that
|
|
270
|
-
if val.params.get("attachmentDocumentType", "").endswith(".INS"):
|
|
271
|
-
val.params["attachmentDocumentType"] = val.params["attachmentDocumentType"][:-4]
|
|
272
|
-
|
|
273
|
-
if isinstance(val.params.get("cikNameList", None), str):
|
|
274
|
-
# cik1, cik2, cik3 in cikList and name1|Edgar|name2|Edgar|name3 in cikNameList strings
|
|
275
|
-
_filerIdentifiers = val.params["cikList"].split(",") if "cikList" in val.params else []
|
|
276
|
-
_filerNames = val.params["cikNameList"].split("|Edgar|") if "cikNameList" in val.params else []
|
|
277
|
-
if _filerIdentifiers:
|
|
278
|
-
if len(_filerNames) not in (0, len(_filerIdentifiers)):
|
|
279
|
-
val.modelXbrl.error(("EFM.6.05.24.parameters", "GFM.3.02.02"),
|
|
280
|
-
_("parameters for cikList and cikNameList different list entry counts: %(cikList)s, %(cikNameList)s"),
|
|
281
|
-
modelXbrl=val.modelXbrl, cikList=_filerIdentifiers, cikNameList=_filerNames)
|
|
282
|
-
if _filerNames:
|
|
283
|
-
val.params["cikNameList"]=dict((_cik,_filerNames[i] if i < len(_filerNames) else None)
|
|
284
|
-
for i, _cik in enumerate(_filerIdentifiers))
|
|
285
|
-
else:
|
|
286
|
-
val.params["cikNameList"]=dict((_cik,None) for _cik in _filerIdentifiers)
|
|
287
|
-
del val.params["cikList"]
|
|
288
|
-
elif _filerNames:
|
|
289
|
-
val.modelXbrl.error(("EFM.6.05.24.parameters", "GFM.3.02.02"),
|
|
290
|
-
_("parameters for cikNameList provided but missing corresponding cikList: %(cikNameList)s"),
|
|
291
|
-
modelXbrl=val.modelXbrl, cikNameList=_filerNames)
|
|
292
|
-
del val.params["cikNameList"] # can't process without cik's as keys
|
|
293
|
-
|
|
294
|
-
if val.params.get("attachmentDocumentType", val.params.get("exhibitType", "")).startswith("EX-2.01"): # only applicable for edgar production and parameterized testcases
|
|
295
|
-
val.EFM60303 = "EFM.6.23.01"
|
|
296
|
-
else:
|
|
297
|
-
val.EFM60303 = "EFM.6.03.03"
|
|
298
|
-
|
|
299
|
-
if any((concept.qname.namespaceURI in val.disclosureSystem.standardTaxonomiesDict and concept.modelDocument.inDTS)
|
|
300
|
-
for concept in val.modelXbrl.nameConcepts.get("UTR",())):
|
|
301
|
-
val.validateUTR = True
|
|
302
|
-
|
|
303
|
-
if "dqcRuleFilter" not in val.params and val.disclosureSystem.options and "dqc-rule-filter=" in val.disclosureSystem.options:
|
|
304
|
-
val.params["dqcRuleFilter"] = val.disclosureSystem.options.partition("dqc-rule-filter=")[2]
|
|
305
|
-
|
|
306
|
-
modelManager = val.modelXbrl.modelManager
|
|
307
|
-
if hasattr(modelManager, "efmFiling"):
|
|
308
|
-
efmFiling = modelManager.efmFiling
|
|
309
|
-
efmFiling.submissionType = val.params.get("submissionType")
|
|
310
|
-
efmFiling.attachmentDocumentType = val.params.get("attachmentDocumentType")
|
|
311
|
-
|
|
312
|
-
def severityReleveler(modelXbrl, level, messageCode, args, **kwargs):
|
|
313
|
-
if messageCode and feeTagMessageCodesRelevelable.match(messageCode) and level == "ERROR":
|
|
314
|
-
if not hasattr(modelXbrl, "isFeeTagging"):
|
|
315
|
-
modelXbrl.isFeeTagging = any(ns.startswith("http://xbrl.sec.gov/ffd") for ns in modelXbrl.namespaceDocs)
|
|
316
|
-
if modelXbrl.isFeeTagging:
|
|
317
|
-
modelObject = args.get("modelObject")
|
|
318
|
-
if (isinstance(modelObject, ModelFact) and
|
|
319
|
-
str(modelObject.qname) not in feeTagEltsNotRelevelable):
|
|
320
|
-
level = "WARNING"
|
|
321
|
-
# add message number
|
|
322
|
-
messageCode, msgNum = messageNumericId(modelXbrl, level, messageCode, args)
|
|
323
|
-
if msgNum:
|
|
324
|
-
args["edgarMessageNumericId"] = msgNum
|
|
325
|
-
return level, messageCode
|
|
326
|
-
|
|
327
|
-
def isolateSeparateIXDSes(modelXbrl, *args, **kwargs):
|
|
328
|
-
separateIXDSes = defaultdict(list)
|
|
329
|
-
for htmlElt in modelXbrl.ixdsHtmlElements:
|
|
330
|
-
tp = "" # attachment document type inferred from document type and ffd:SubmissnTp
|
|
331
|
-
for qn in ("dei:DocumentType", "ffd:FeeExhibitTp"):
|
|
332
|
-
for elt in htmlElt.iterfind(f".//{{{htmlElt.modelDocument.ixNS}}}nonNumeric[@name='{qn}']"):
|
|
333
|
-
tp = elt.stringValue.strip()
|
|
334
|
-
if tp:
|
|
335
|
-
break
|
|
336
|
-
separateIXDSes[tp if supplementalAttachmentDocumentTypesPattern.match(tp) else ""].append(htmlElt)
|
|
337
|
-
return [htmlElts for tp,htmlElts in sorted(separateIXDSes.items(), key=lambda i:i[0])]
|
|
338
|
-
|
|
339
|
-
def validateXbrlFinally(val, *args, **kwargs):
|
|
340
|
-
if not (val.validateEFMplugin):
|
|
341
|
-
return
|
|
342
|
-
|
|
343
|
-
modelXbrl = val.modelXbrl
|
|
344
|
-
|
|
345
|
-
_statusMsg = _("validating {0} filing rules").format(val.disclosureSystem.name)
|
|
346
|
-
modelXbrl.profileActivity()
|
|
347
|
-
modelXbrl.modelManager.showStatus(_statusMsg)
|
|
348
|
-
|
|
349
|
-
validateFiling(val, modelXbrl, isEFM=True)
|
|
350
|
-
|
|
351
|
-
modelXbrl.profileActivity(_statusMsg, minTimeToShow=0.0)
|
|
352
|
-
modelXbrl.modelManager.showStatus(None)
|
|
353
|
-
|
|
354
|
-
def validateXbrlDtsDocument(val, modelDocument, isFilingDocument, *args, **kwargs):
|
|
355
|
-
if not (val.validateEFMplugin):
|
|
356
|
-
return
|
|
357
|
-
|
|
358
|
-
checkDTSdocument(val, modelDocument, isFilingDocument)
|
|
359
|
-
|
|
360
|
-
def filingStart(cntlr, options, filesource, entrypointFiles, sourceZipStream=None, responseZipStream=None, *args, **kwargs):
|
|
361
|
-
modelManager = cntlr.modelManager
|
|
362
|
-
# cntlr.addToLog("TRACE EFM filing start val={} plugin={}".format(modelManager.validateDisclosureSystem, getattr(modelManager.disclosureSystem, "EFMplugin", False)))
|
|
363
|
-
if modelManager.validateDisclosureSystem and (getattr(modelManager.disclosureSystem, "EFMplugin", False) or
|
|
364
|
-
getattr(modelManager.disclosureSystem, "ESEFplugin", False)):
|
|
365
|
-
# cntlr.addToLog("TRACE EFM filing start 2 classes={} moduleInfos={}".format(pluginMethodsForClasses, modulePluginInfos))
|
|
366
|
-
modelManager.efmFiling = Filing(cntlr, options, filesource, entrypointFiles, sourceZipStream, responseZipStream)
|
|
367
|
-
# this event is called for filings (of instances) as well as test cases, for test case it just keeps options accessible
|
|
368
|
-
for pluginXbrlMethod in pluginClassMethods("EdgarRenderer.Filing.Start"):
|
|
369
|
-
pluginXbrlMethod(cntlr, options, entrypointFiles, modelManager.efmFiling)
|
|
370
|
-
# check if any entrypointFiles have an encryption is specified
|
|
371
|
-
if isinstance(entrypointFiles, list):
|
|
372
|
-
for pluginXbrlMethod in pluginClassMethods("Security.Crypt.Filing.Start"):
|
|
373
|
-
pluginXbrlMethod(modelManager.efmFiling, options, filesource, entrypointFiles, sourceZipStream)
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
def guiTestcasesStart(cntlr, modelXbrl, *args, **kwargs):
|
|
377
|
-
modelManager = cntlr.modelManager
|
|
378
|
-
if cntlr.hasGui and modelManager.validateDisclosureSystem and getattr(modelManager.disclosureSystem, "EFMplugin", False):
|
|
379
|
-
for pluginXbrlMethod in pluginClassMethods("EdgarRenderer.Gui.Run"):
|
|
380
|
-
pluginXbrlMethod(cntlr, modelXbrl, *args,
|
|
381
|
-
# pass plugin items to GUI mode of EdgarRenderer
|
|
382
|
-
exhibitTypesStrippingOnErrorPattern=exhibitTypesStrippingOnErrorPattern,
|
|
383
|
-
setReportAttrs=setReportAttrs, **kwargs)
|
|
384
|
-
|
|
385
|
-
def testcasesStart(cntlr, options, modelXbrl, *args, **kwargs):
|
|
386
|
-
# a test or RSS cases run is starting, in which case testcaseVariation... events have unique efmFilings
|
|
387
|
-
modelManager = cntlr.modelManager
|
|
388
|
-
if (hasattr(modelManager, "efmFiling") and
|
|
389
|
-
modelXbrl.modelDocument and modelXbrl.modelDocument.type in Type.TESTCASETYPES):
|
|
390
|
-
efmFiling = modelManager.efmFiling
|
|
391
|
-
efmFiling.close() # not needed, dereference
|
|
392
|
-
del modelManager.efmFiling
|
|
393
|
-
if not hasattr(modelXbrl, "efmOptions") and options: # may have already been set by EdgarRenderer in gui startup
|
|
394
|
-
modelXbrl.efmOptions = options # save options in testcase's modelXbrl
|
|
395
|
-
|
|
396
|
-
def xbrlLoad(modelManager, filesource, entrypoint=None, **kwargs):
|
|
397
|
-
# starting to load an instance
|
|
398
|
-
if hasattr(modelManager, "efmFiling"):
|
|
399
|
-
if entrypoint:
|
|
400
|
-
attachmentDocumentType = entrypoint.get("attachmentDocumentType")
|
|
401
|
-
if feeTaggingAttachmentDocumentTypePattern.match(attachmentDocumentType or ""):
|
|
402
|
-
# set html log title
|
|
403
|
-
modelManager.cntlr.logHandler.htmlTitle = "Fee Exhibit Message Log"
|
|
404
|
-
modelManager.cntlr.addToLog(
|
|
405
|
-
f"Attachment Document Type {attachmentDocumentType}",
|
|
406
|
-
level="INFO-RESULT",
|
|
407
|
-
messageCode="EFM.attachmentDocumentType",
|
|
408
|
-
messageArgs={"attachmentDocumentType":attachmentDocumentType},
|
|
409
|
-
file=os.path.basename(entrypoint.get("file"))
|
|
410
|
-
)
|
|
411
|
-
|
|
412
|
-
def xbrlLoaded(cntlr, options, modelXbrl, entryPoint, *args, **kwargs):
|
|
413
|
-
# cntlr.addToLog("TRACE EFM xbrl loaded")
|
|
414
|
-
modelManager = cntlr.modelManager
|
|
415
|
-
if hasattr(modelManager, "efmFiling") and modelXbrl.modelDocument:
|
|
416
|
-
if modelXbrl.modelDocument.type in (Type.INSTANCE, Type.INLINEXBRL, Type.INLINEXBRLDOCUMENTSET):
|
|
417
|
-
efmFiling = modelManager.efmFiling
|
|
418
|
-
efmFiling.addReport(modelXbrl)
|
|
419
|
-
_report = efmFiling.reports[-1]
|
|
420
|
-
_report.entryPoint = entryPoint
|
|
421
|
-
if "accessionNumber" in entryPoint and not hasattr(efmFiling, "accessionNumber"):
|
|
422
|
-
efmFiling.accessionNumber = entryPoint["accessionNumber"]
|
|
423
|
-
efmFiling.arelleUnitTests = modelXbrl.arelleUnitTests.copy() # allow unit tests to be used after instance processing finished
|
|
424
|
-
elif modelXbrl.modelDocument.type == Type.RSSFEED:
|
|
425
|
-
testcasesStart(cntlr, options, modelXbrl)
|
|
426
|
-
|
|
427
|
-
def xbrlRun(cntlr, options, modelXbrl, *args, **kwargs):
|
|
428
|
-
# cntlr.addToLog("TRACE EFM xbrl run")
|
|
429
|
-
modelManager = cntlr.modelManager
|
|
430
|
-
if (hasattr(modelManager, "efmFiling") and modelXbrl.modelDocument and
|
|
431
|
-
modelXbrl.modelDocument.type in (Type.INSTANCE, Type.INLINEXBRL, Type.INLINEXBRLDOCUMENTSET)):
|
|
432
|
-
efmFiling = modelManager.efmFiling
|
|
433
|
-
_report = efmFiling.reports[-1]
|
|
434
|
-
if True: # HF TESTING: not (options.abortOnMajorError and len(modelXbrl.errors) > 0):
|
|
435
|
-
for pluginXbrlMethod in pluginClassMethods("EdgarRenderer.Xbrl.Run"):
|
|
436
|
-
pluginXbrlMethod(cntlr, options, modelXbrl, modelManager.efmFiling, _report)
|
|
437
|
-
|
|
438
|
-
def filingValidate(cntlr, options, filesource, entrypointFiles, sourceZipStream=None, responseZipStream=None, *args, **kwargs):
|
|
439
|
-
# cntlr.addToLog("TRACE EFM xbrl validate")
|
|
440
|
-
modelManager = cntlr.modelManager
|
|
441
|
-
if hasattr(modelManager, "efmFiling"):
|
|
442
|
-
efmFiling = modelManager.efmFiling
|
|
443
|
-
reports = efmFiling.reports
|
|
444
|
-
# check for dup inline and regular instances
|
|
445
|
-
# SDR checks
|
|
446
|
-
if any(report.deiDocumentType and report.deiDocumentType.endswith(" SDR")
|
|
447
|
-
for report in reports):
|
|
448
|
-
_kSdrs = [r for r in reports if r.deiDocumentType == "K SDR"]
|
|
449
|
-
if not _kSdrs and efmFiling.submissionType in ("SDR", "SDR-A"):
|
|
450
|
-
efmFiling.error("EFM.6.03.08.sdrHasNoKreports",
|
|
451
|
-
_("SDR filing has no K SDR reports"))
|
|
452
|
-
elif len(_kSdrs) > 1:
|
|
453
|
-
efmFiling.error("EFM.6.03.08.sdrHasMultipleKreports",
|
|
454
|
-
_("SDR filing has multiple K SDR reports for %(entities)s"),
|
|
455
|
-
{"entities": ", ".join(r.entityRegistrantName for r in _kSdrs),
|
|
456
|
-
"edgarCode": "cp-0308-Sdr-Has-Multiple-K-Reports"},
|
|
457
|
-
(r.url for r in _kSdrs))
|
|
458
|
-
_lSdrEntityReports = defaultdict(list)
|
|
459
|
-
for r in reports:
|
|
460
|
-
if r.deiDocumentType == "L SDR":
|
|
461
|
-
_lSdrEntityReports[r.entityCentralIndexKey if r.entityCentralIndexKey != "0000000000"
|
|
462
|
-
else r.entityRegistrantName].append(r)
|
|
463
|
-
for lSdrEntity, lSdrEntityReports in _lSdrEntityReports.items():
|
|
464
|
-
if len(lSdrEntityReports) > 1:
|
|
465
|
-
efmFiling.error("EFM.6.05.24.multipleLSdrReportsForEntity",
|
|
466
|
-
_("Filing entity has multiple L SDR reports: %(entity)s"),
|
|
467
|
-
{"entity": lSdrEntity},
|
|
468
|
-
(r.url for r in lSdrEntityReports))
|
|
469
|
-
# check for required extension files (schema, pre, lbl)
|
|
470
|
-
for r in reports:
|
|
471
|
-
hasSch = hasPre = hasCal = hasLbl = False
|
|
472
|
-
for f in r.reportedFiles:
|
|
473
|
-
if f.endswith(".xsd"): hasSch = True
|
|
474
|
-
elif f.endswith("_pre.xml"): hasPre = True
|
|
475
|
-
elif f.endswith("_cal.xml"): hasCal = True
|
|
476
|
-
elif f.endswith("_lab.xml"): hasLbl = True
|
|
477
|
-
missingFiles = ""
|
|
478
|
-
if not hasSch: missingFiles += ", schema"
|
|
479
|
-
if not hasPre: missingFiles += ", presentation linkbase"
|
|
480
|
-
if not hasLbl: missingFiles += ", label linkbase"
|
|
481
|
-
if missingFiles:
|
|
482
|
-
efmFiling.error("EFM.6.03.02.sdrMissingFiles",
|
|
483
|
-
_("%(deiDocumentType)s report missing files: %(missingFiles)s"),
|
|
484
|
-
{"deiDocumentType": r.deiDocumentType, "missingFiles": missingFiles[2:],
|
|
485
|
-
"edgarCode": "cp-0302-Sdr-Missing-Files"},
|
|
486
|
-
r.url)
|
|
487
|
-
if not r.hasUsGaapTaxonomy:
|
|
488
|
-
efmFiling.error("EFM.6.03.02.sdrMissingStandardSchema",
|
|
489
|
-
_("%(deiDocumentType)s submission must use a US GAAP standard schema"),
|
|
490
|
-
{"deiDocumentType": r.deiDocumentType,
|
|
491
|
-
"edgarCode": "cp-0302-Sdr-Missing-Standard-Schema"},
|
|
492
|
-
r.url)
|
|
493
|
-
if hasattr(r, "attachmentDocumentType") and r.attachmentDocumentType not in ("EX-99.K SDR", "EX-99.L SDR", "EX-99.K SDR.INS", "EX-99.L SDR.INS"):
|
|
494
|
-
efmFiling.error("EFM.6.03.02.sdrHasNonSdrAttachment",
|
|
495
|
-
_("An SDR filing contains non-SDR attachment document type %(attachmentDocumentType)s dei document type %(deiDocumentType)s"),
|
|
496
|
-
{"deiDocumentType": r.deiDocumentType, "attachmentDocumentType": r.attachmentDocumentType,
|
|
497
|
-
"edgarCode": "cp-0302-Sdr-Has-Non-Sdr-Attachment"},
|
|
498
|
-
r.url)
|
|
499
|
-
_attachmentDocumentTypeReports = defaultdict(list)
|
|
500
|
-
for r in reports:
|
|
501
|
-
if hasattr(r, "attachmentDocumentType") and r.attachmentDocumentType and not supplementalAttachmentDocumentTypesPattern.match(r.attachmentDocumentType):
|
|
502
|
-
_attachmentDocumentTypeReports[r.attachmentDocumentType.partition(".")[0]].append(r)
|
|
503
|
-
if len(_attachmentDocumentTypeReports) > 1:
|
|
504
|
-
efmFiling.error("EFM.6.03.08",
|
|
505
|
-
_("A filling contains multiple attachment document types %(attachmentDocumentType)s."),
|
|
506
|
-
{"attachmentDocumentTypes": ", ".join(_attachmentDocumentTypeReports.keys())},
|
|
507
|
-
[r.url for r in reports])
|
|
508
|
-
for _attachmentDocumentType, _exhibitReports in _attachmentDocumentTypeReports.items():
|
|
509
|
-
if _attachmentDocumentType not in ("EX-99",) and len(_attachmentDocumentTypeReports) > 1:
|
|
510
|
-
efmFiling.error("EFM.6.03.08.moreThanOneIns",
|
|
511
|
-
_("A filing contains more than one instance for attachment document type %(attachmentDocumentType)s."),
|
|
512
|
-
{"attachmentDocumentType": _attachmentDocumentType},
|
|
513
|
-
[r.url for r in _attachmentDocumentTypeReports])
|
|
514
|
-
|
|
515
|
-
def roleTypeName(modelXbrl, roleURI, *args, **kwargs):
|
|
516
|
-
modelManager = modelXbrl.modelManager
|
|
517
|
-
if hasattr(modelManager, "efmFiling"):
|
|
518
|
-
modelRoles = modelXbrl.roleTypes.get(roleURI, ())
|
|
519
|
-
if modelRoles and modelRoles[0].definition:
|
|
520
|
-
return re.sub(r"\{\s*(transposed|unlabeled|elements)\s*\}","", modelRoles[0].definition.rpartition('-')[2], flags=re.I).strip()
|
|
521
|
-
return roleURI
|
|
522
|
-
return None
|
|
523
|
-
|
|
524
|
-
def filingEnd(cntlr, options, filesource, entrypointFiles, sourceZipStream=None, responseZipStream=None, *args, **kwargs):
|
|
525
|
-
#cntlr.addToLog("TRACE EFM filing end")
|
|
526
|
-
modelManager = cntlr.modelManager
|
|
527
|
-
if hasattr(modelManager, "efmFiling"):
|
|
528
|
-
for pluginXbrlMethod in pluginClassMethods("EdgarRenderer.Filing.End"):
|
|
529
|
-
pluginXbrlMethod(cntlr, options, filesource, modelManager.efmFiling, sourceZipStream=sourceZipStream)
|
|
530
|
-
#cntlr.addToLog("TRACE EdgarRenderer end")
|
|
531
|
-
# save JSON file of instances and referenced documents
|
|
532
|
-
filingReferences = dict((report.url, report)
|
|
533
|
-
for report in modelManager.efmFiling.reports)
|
|
534
|
-
|
|
535
|
-
modelManager.efmFiling.close()
|
|
536
|
-
del modelManager.efmFiling
|
|
537
|
-
#cntlr.addToLog("TRACE EFN filing end complete")
|
|
538
|
-
|
|
539
|
-
def rssItemXbrlLoaded(modelXbrl, rssWatchOptions, rssItem, *args, **kwargs):
|
|
540
|
-
# Validate of RSS feed item (simulates filing & cmd line load events
|
|
541
|
-
if hasattr(rssItem.modelXbrl, "efmOptions"):
|
|
542
|
-
testcaseVariationXbrlLoaded(rssItem.modelXbrl, modelXbrl)
|
|
543
|
-
|
|
544
|
-
def rssItemValidated(val, modelXbrl, rssItem, *args, **kwargs):
|
|
545
|
-
# After validate of RSS feed item (simulates report and end of filing events)
|
|
546
|
-
if hasattr(rssItem.modelXbrl, "efmOptions"):
|
|
547
|
-
testcaseVariationValidated(rssItem.modelXbrl, modelXbrl)
|
|
548
|
-
|
|
549
|
-
def testcaseVariationXbrlLoaded(testcaseModelXbrl, instanceModelXbrl, modelTestcaseVariation, *args, **kwargs):
|
|
550
|
-
# Validate of RSS feed item or testcase variation (simulates filing & cmd line load events
|
|
551
|
-
modelManager = instanceModelXbrl.modelManager
|
|
552
|
-
if (hasattr(testcaseModelXbrl, "efmOptions") and
|
|
553
|
-
modelManager.validateDisclosureSystem and getattr(modelManager.disclosureSystem, "EFMplugin", False) and
|
|
554
|
-
instanceModelXbrl.modelDocument.type in (Type.INSTANCE, Type.INLINEXBRL, Type.INLINEXBRLDOCUMENTSET)):
|
|
555
|
-
cntlr = modelManager.cntlr
|
|
556
|
-
options = testcaseModelXbrl.efmOptions
|
|
557
|
-
entrypointFiles = [{"file":instanceModelXbrl.modelDocument.uri}]
|
|
558
|
-
if not hasattr(modelManager, "efmFiling"): # first instance of filing
|
|
559
|
-
modelManager.efmFiling = Filing(cntlr, options, instanceModelXbrl.fileSource, entrypointFiles, None, None, instanceModelXbrl.errorCaptureLevel)
|
|
560
|
-
# this event is called for filings (of instances) as well as test cases, for test case it just keeps options accessible
|
|
561
|
-
for pluginXbrlMethod in pluginClassMethods("EdgarRenderer.Filing.Start"):
|
|
562
|
-
pluginXbrlMethod(cntlr, options, entrypointFiles, modelManager.efmFiling)
|
|
563
|
-
modelManager.efmFiling.addReport(instanceModelXbrl)
|
|
564
|
-
_report = modelManager.efmFiling.reports[-1]
|
|
565
|
-
_report.entryPoint = entrypointFiles[0]
|
|
566
|
-
modelManager.efmFiling.arelleUnitTests = instanceModelXbrl.arelleUnitTests.copy() # allow unit tests to be used after instance processing finished
|
|
567
|
-
# check for parameters on instance
|
|
568
|
-
for _instanceElt in XmlUtil.descendants(modelTestcaseVariation, "*", "instance", "readMeFirst", "true", False):
|
|
569
|
-
if instanceModelXbrl.modelDocument.uri.endswith(_instanceElt.text):
|
|
570
|
-
if _instanceElt.get("attachmentDocumentType"):
|
|
571
|
-
_report.entryPoint["attachmentDocumentType"] = _report.attachmentDocumentType = _instanceElt.get("attachmentDocumentType")
|
|
572
|
-
break
|
|
573
|
-
|
|
574
|
-
def testcaseVariationXbrlValidated(testcaseModelXbrl, instanceModelXbrl, *args, **kwargs):
|
|
575
|
-
modelManager = instanceModelXbrl.modelManager
|
|
576
|
-
if (hasattr(modelManager, "efmFiling") and
|
|
577
|
-
instanceModelXbrl.modelDocument.type in (Type.INSTANCE, Type.INLINEXBRL, Type.INLINEXBRLDOCUMENTSET)):
|
|
578
|
-
efmFiling = modelManager.efmFiling
|
|
579
|
-
_report = modelManager.efmFiling.reports[-1]
|
|
580
|
-
for pluginXbrlMethod in pluginClassMethods("EdgarRenderer.Xbrl.Run"):
|
|
581
|
-
pluginXbrlMethod(modelManager.cntlr, efmFiling.options, instanceModelXbrl, efmFiling, _report)
|
|
582
|
-
|
|
583
|
-
def testcaseVariationValidated(testcaseModelXbrl, instanceModelXbrl, errors=None, *args, **kwargs):
|
|
584
|
-
modelManager = instanceModelXbrl.modelManager
|
|
585
|
-
if (hasattr(modelManager, "efmFiling") and
|
|
586
|
-
instanceModelXbrl.modelDocument.type in (Type.INSTANCE, Type.INLINEXBRL, Type.INLINEXBRLDOCUMENTSET)):
|
|
587
|
-
efmFiling = modelManager.efmFiling
|
|
588
|
-
if isinstance(errors, list):
|
|
589
|
-
del efmFiling.errors[:]
|
|
590
|
-
# validate report types
|
|
591
|
-
filingValidate(efmFiling.cntlr, efmFiling.options, efmFiling.filesource, efmFiling.entrypointfiles, efmFiling.sourceZipStream, efmFiling.responseZipStream) # validate each report
|
|
592
|
-
if isinstance(errors, list):
|
|
593
|
-
errors.extend(efmFiling.errors)
|
|
594
|
-
# simulate filingEnd
|
|
595
|
-
filingEnd(modelManager.cntlr, efmFiling.options, modelManager.filesource, [])
|
|
596
|
-
# flush logfile (assumed to be buffered, empty the buffer for next filing)
|
|
597
|
-
testcaseModelXbrl.modelManager.cntlr.logHandler.flush()
|
|
598
|
-
|
|
599
|
-
def fileSourceFile(cntlr, filepath, binary, stripDeclaration):
|
|
600
|
-
modelManager = cntlr.modelManager
|
|
601
|
-
if hasattr(modelManager, "efmFiling"):
|
|
602
|
-
for pluginXbrlMethod in pluginClassMethods("Security.Crypt.FileSource.File"):
|
|
603
|
-
_file = pluginXbrlMethod(cntlr, modelManager.efmFiling, filepath, binary, stripDeclaration)
|
|
604
|
-
if _file is not None:
|
|
605
|
-
return _file
|
|
606
|
-
return None
|
|
607
|
-
|
|
608
|
-
def fileSourceExists(cntlr, filepath):
|
|
609
|
-
modelManager = cntlr.modelManager
|
|
610
|
-
if hasattr(modelManager, "efmFiling"):
|
|
611
|
-
for pluginXbrlMethod in pluginClassMethods("Security.Crypt.FileSource.Exists"):
|
|
612
|
-
_existence = pluginXbrlMethod(modelManager.efmFiling, filepath)
|
|
613
|
-
if _existence is not None:
|
|
614
|
-
return _existence
|
|
615
|
-
return None
|
|
616
|
-
|
|
617
|
-
def commandLineOptionExtender(parser, *args, **kwargs):
|
|
618
|
-
# extend command line options to store to database
|
|
619
|
-
parser.add_option("--build-deprecated-concepts-file",
|
|
620
|
-
action="store_true",
|
|
621
|
-
dest="buildDeprecatedConceptsFile",
|
|
622
|
-
help=_("Build EFM Validation deprecated concepts file (pre-cache before use)"))
|
|
623
|
-
|
|
624
|
-
def utilityRun(self, options, *args, **kwargs):
|
|
625
|
-
if options.buildDeprecatedConceptsFile:
|
|
626
|
-
from .Util import buildDeprecatedConceptDatesFiles
|
|
627
|
-
buildDeprecatedConceptDatesFiles(self)
|
|
628
|
-
|
|
629
|
-
class Filing:
|
|
630
|
-
def __init__(self, cntlr, options=None, filesource=None, entrypointfiles=None, sourceZipStream=None, responseZipStream=None, errorCaptureLevel=None):
|
|
631
|
-
self.cntlr = cntlr
|
|
632
|
-
self.options = options
|
|
633
|
-
self.filesource = filesource
|
|
634
|
-
self.entrypointfiles = entrypointfiles
|
|
635
|
-
self.sourceZipStream = sourceZipStream
|
|
636
|
-
self.responseZipStream = responseZipStream
|
|
637
|
-
self.submissionType = None
|
|
638
|
-
self.reports = []
|
|
639
|
-
self.renderedFiles = set() # filing-level rendered files
|
|
640
|
-
self.reportZip = None
|
|
641
|
-
if responseZipStream:
|
|
642
|
-
self.setReportZipStreamMode('w')
|
|
643
|
-
else:
|
|
644
|
-
try: #zipOutputFile only present with EdgarRenderer plugin options
|
|
645
|
-
if options and options.zipOutputFile:
|
|
646
|
-
if not os.path.isabs(options.zipOutputFile):
|
|
647
|
-
zipOutDir = os.path.dirname(filesource.basefile)
|
|
648
|
-
zipOutFile = os.path.join(zipOutDir,options.zipOutputFile)
|
|
649
|
-
else:
|
|
650
|
-
zipOutFile = options.zipOutputFile
|
|
651
|
-
self.reportZip = zipfile.ZipFile(zipOutFile, 'w', zipfile.ZIP_DEFLATED, True)
|
|
652
|
-
except AttributeError:
|
|
653
|
-
self.reportZip = None
|
|
654
|
-
self.errorCaptureLevel = errorCaptureLevel or logging._checkLevel("INCONSISTENCY")
|
|
655
|
-
self.errors = []
|
|
656
|
-
self.arelleUnitTests = {} # copied from each instance loaded
|
|
657
|
-
for pluginXbrlMethod in pluginClassMethods("Security.Crypt.Init"):
|
|
658
|
-
pluginXbrlMethod(self, options, filesource, entrypointfiles, sourceZipStream)
|
|
659
|
-
self.exhibitTypesStrippingOnErrorPattern = exhibitTypesStrippingOnErrorPattern
|
|
660
|
-
|
|
661
|
-
def setReportZipStreamMode(self, mode): # mode is 'w', 'r', 'a'
|
|
662
|
-
# required to switch in-memory zip stream between write, read, and append modes
|
|
663
|
-
if self.responseZipStream:
|
|
664
|
-
if self.reportZip: # already open, close and reseek underlying stream
|
|
665
|
-
self.reportZip.close()
|
|
666
|
-
self.responseZipStream.seek(0)
|
|
667
|
-
self.reportZip = zipfile.ZipFile(self.responseZipStream, mode, zipfile.ZIP_DEFLATED, True)
|
|
668
|
-
|
|
669
|
-
def close(self):
|
|
670
|
-
''' MetaFiling.json (not needed?) list of all files written out
|
|
671
|
-
_reports = dict((report.basename, report.json) for report in self.reports)
|
|
672
|
-
_reports["filing"] = {"renderedFiles": sorted(self.renderedFiles)}
|
|
673
|
-
if self.options.logFile:
|
|
674
|
-
_reports["filing"]["logFile"] = self.options.logFile
|
|
675
|
-
if self.reportZip:
|
|
676
|
-
self.reportZip.writestr("MetaFiling.json", json.dumps(_reports, sort_keys=True, indent=jsonIndent))
|
|
677
|
-
else:
|
|
678
|
-
try:
|
|
679
|
-
if self.options.reportsFolder:
|
|
680
|
-
with open(os.path.join(self.options.reportsFolder, "MetaFiling.json"), mode='w') as f:
|
|
681
|
-
json.dump(_reports, f, sort_keys=True, indent=jsonIndent)
|
|
682
|
-
except AttributeError: # no reportsFolder attribute
|
|
683
|
-
pass
|
|
684
|
-
'''
|
|
685
|
-
if self.options and self.options.logFile:
|
|
686
|
-
if self.reportZip and self.reportZip.fp is not None: # open zipfile
|
|
687
|
-
_logFile = self.options.logFile
|
|
688
|
-
_logFileExt = os.path.splitext(_logFile)[1]
|
|
689
|
-
if _logFileExt == ".xml":
|
|
690
|
-
_logStr = self.cntlr.logHandler.getXml(clearLogBuffer=False) # may be saved to file later or flushed in web interface
|
|
691
|
-
elif _logFileExt == ".json":
|
|
692
|
-
_logStr = self.cntlr.logHandler.getJson(clearLogBuffer=False)
|
|
693
|
-
else: # no ext or _logFileExt == ".txt":
|
|
694
|
-
_logStr = self.cntlr.logHandler.getText(clearLogBuffer=False)
|
|
695
|
-
self.reportZip.writestr(_logFile, _logStr)
|
|
696
|
-
#else:
|
|
697
|
-
# with open(_logFile, "wt", encoding="utf-8") as fh:
|
|
698
|
-
# fh.write(_logStr)
|
|
699
|
-
if self.reportZip: # ok to close if already closed
|
|
700
|
-
self.reportZip.close()
|
|
701
|
-
self.__dict__.clear() # dereference all contents
|
|
702
|
-
|
|
703
|
-
def addReport(self, modelXbrl):
|
|
704
|
-
if modelXbrl.modelDocument:
|
|
705
|
-
_report = Report(modelXbrl)
|
|
706
|
-
self.reports.append(_report)
|
|
707
|
-
|
|
708
|
-
def error(self, messageCode, message, messageArgs=None, file=None):
|
|
709
|
-
if file and len(self.entrypointfiles) > 0:
|
|
710
|
-
# relativize file(s)
|
|
711
|
-
if isinstance(file, str):
|
|
712
|
-
file = (file,)
|
|
713
|
-
if isinstance(self.entrypointfiles[0], dict):
|
|
714
|
-
_baseFile = self.entrypointfiles[0].get("file", ".")
|
|
715
|
-
else:
|
|
716
|
-
_baseFile = self.entrypointfiles[0]
|
|
717
|
-
relFiles = [relativeUri(_baseFile, f) for f in file]
|
|
718
|
-
else:
|
|
719
|
-
relFiles = None
|
|
720
|
-
self.cntlr.addToLog(message, messageCode=messageCode, messageArgs=messageArgs, file=relFiles, level=logging.ERROR)
|
|
721
|
-
self.errors.append(messageCode)
|
|
722
|
-
|
|
723
|
-
@property
|
|
724
|
-
def hasInlineReport(self):
|
|
725
|
-
return any(getattr(report, "isInline", False) for report in self.reports)
|
|
726
|
-
|
|
727
|
-
def writeFile(self, filepath, data):
|
|
728
|
-
# write the data (string or binary)
|
|
729
|
-
for pluginXbrlMethod in pluginClassMethods("Security.Crypt.Write"):
|
|
730
|
-
if pluginXbrlMethod(self, filepath, data):
|
|
731
|
-
return
|
|
732
|
-
with io.open(filepath, "wt" if isinstance(data, str) else "wb") as fh:
|
|
733
|
-
fh.write(data)
|
|
734
|
-
|
|
735
|
-
REPORT_ATTRS = {"DocumentType", "DocumentPeriodEndDate", "EntityRegistrantName",
|
|
736
|
-
"EntityCentralIndexKey", "CurrentFiscalYearEndDate", "DocumentFiscalYearFocus",
|
|
737
|
-
"FeeExhibitTp"}
|
|
738
|
-
def lc(name):
|
|
739
|
-
if name == "DocumentType":
|
|
740
|
-
return "deiDocumentType" # special case to disambiguate from attachmentDocumentType
|
|
741
|
-
return name[0].lower() + name[1:]
|
|
742
|
-
|
|
743
|
-
def setReportAttrs(report, modelXbrl):
|
|
744
|
-
for attrName in REPORT_ATTRS:
|
|
745
|
-
setattr(report, lc(attrName), None)
|
|
746
|
-
for f in modelXbrl.facts:
|
|
747
|
-
cntx = f.context
|
|
748
|
-
if cntx is not None and cntx.isStartEndPeriod and not cntx.hasSegment:
|
|
749
|
-
if f.qname is not None and f.qname.localName in REPORT_ATTRS and f.xValid >= VALID and f.xValue:
|
|
750
|
-
setattr(report, lc(f.qname.localName), f.xValue)
|
|
751
|
-
|
|
752
|
-
class Report:
|
|
753
|
-
|
|
754
|
-
def __init__(self, modelXbrl):
|
|
755
|
-
self.isInline = modelXbrl.modelDocument.type in (Type.INLINEXBRL, Type.INLINEXBRLDOCUMENTSET)
|
|
756
|
-
self.url = modelXbrl.modelDocument.uri
|
|
757
|
-
self.reportedFiles = set()
|
|
758
|
-
if modelXbrl.modelDocument.type == Type.INLINEXBRLDOCUMENTSET:
|
|
759
|
-
self.basenames = []
|
|
760
|
-
self.filepaths = []
|
|
761
|
-
for ixDoc in sorted(modelXbrl.modelDocument.referencesDocument.keys(), key=lambda d: d.objectIndex): # preserve order
|
|
762
|
-
if ixDoc.type == Type.INLINEXBRL:
|
|
763
|
-
self.basenames.append(ixDoc.basename)
|
|
764
|
-
self.filepaths.append(ixDoc.filepath)
|
|
765
|
-
self.reportedFiles.add(ixDoc.basename)
|
|
766
|
-
else:
|
|
767
|
-
self.basenames = [modelXbrl.modelDocument.basename]
|
|
768
|
-
self.filepaths = [modelXbrl.modelDocument.filepath]
|
|
769
|
-
self.reportedFiles.add(modelXbrl.modelDocument.basename)
|
|
770
|
-
self.instanceName = self.basenames[0]
|
|
771
|
-
setReportAttrs(self, modelXbrl)
|
|
772
|
-
self.reportedFiles |= referencedFiles(modelXbrl)
|
|
773
|
-
self.renderedFiles = set()
|
|
774
|
-
self.hasUsGaapTaxonomy = False
|
|
775
|
-
sourceDir = os.path.dirname(modelXbrl.modelDocument.filepath)
|
|
776
|
-
# add referenced files that are xbrl-referenced local documents
|
|
777
|
-
refDocUris = set()
|
|
778
|
-
def addRefDocs(doc):
|
|
779
|
-
if doc.type == Type.INLINEXBRLDOCUMENTSET:
|
|
780
|
-
for ixDoc in doc.referencesDocument.keys():
|
|
781
|
-
if ixDoc.type == Type.INLINEXBRL:
|
|
782
|
-
addRefDocs(ixDoc)
|
|
783
|
-
for refDoc in doc.referencesDocument.keys():
|
|
784
|
-
_file = refDoc.filepath
|
|
785
|
-
if refDoc.uri not in refDocUris:
|
|
786
|
-
refDocUris.add(refDoc.uri)
|
|
787
|
-
if refDoc.filepath and refDoc.filepath.startswith(sourceDir):
|
|
788
|
-
self.reportedFiles.add(refDoc.filepath[len(sourceDir)+1:]) # add file name within source directory
|
|
789
|
-
addRefDocs(refDoc)
|
|
790
|
-
if refDoc.type == Type.SCHEMA and refDoc.targetNamespace:
|
|
791
|
-
nsAuthority = authority(refDoc.targetNamespace, includeScheme=False)
|
|
792
|
-
nsPath = refDoc.targetNamespace.split('/')
|
|
793
|
-
if len(nsPath) > 2:
|
|
794
|
-
if nsAuthority in ("fasb.org", "xbrl.us") and nsPath[-2] == "us-gaap":
|
|
795
|
-
self.hasUsGaapTaxonomy = True
|
|
796
|
-
addRefDocs(modelXbrl.modelDocument)
|
|
797
|
-
|
|
798
|
-
def close(self):
|
|
799
|
-
self.__dict__.clear() # dereference all contents
|
|
800
|
-
|
|
801
|
-
@property
|
|
802
|
-
def json(self): # stringify un-jsonable attributes
|
|
803
|
-
return dict((name, value if isinstance(value,(str,int,float,Decimal,list,dict))
|
|
804
|
-
else sorted(value) if isinstance(value, set)
|
|
805
|
-
else str(value))
|
|
806
|
-
for name, value in self.__dict__.items())
|
|
807
|
-
|
|
808
|
-
__pluginInfo__ = {
|
|
809
|
-
# Do not use _( ) in pluginInfo itself (it is applied later, after loading
|
|
810
|
-
'name': 'Validate EFM',
|
|
811
|
-
'version': '1.23.3', # SEC EDGAR release 23.3
|
|
812
|
-
'description': '''EFM Validation.''',
|
|
813
|
-
'license': 'Apache-2',
|
|
814
|
-
'import': ('transforms/SEC',), # SEC inline can use SEC transformations
|
|
815
|
-
'author': authorLabel,
|
|
816
|
-
'copyright': copyrightLabel,
|
|
817
|
-
# classes of mount points (required)
|
|
818
|
-
'DisclosureSystem.Types': dislosureSystemTypes,
|
|
819
|
-
'DisclosureSystem.ConfigURL': disclosureSystemConfigURL,
|
|
820
|
-
'Validate.XBRL.Start': validateXbrlStart,
|
|
821
|
-
'Validate.XBRL.Finally': validateXbrlFinally,
|
|
822
|
-
'Validate.XBRL.DTS.document': validateXbrlDtsDocument,
|
|
823
|
-
'ModelXbrl.RoleTypeName': roleTypeName,
|
|
824
|
-
'CntlrCmdLine.Filing.Start': filingStart,
|
|
825
|
-
'CntlrWinMain.Xbrl.Loaded': guiTestcasesStart,
|
|
826
|
-
'Testcases.Start': testcasesStart,
|
|
827
|
-
'CntlrCmdLine.Options': commandLineOptionExtender,
|
|
828
|
-
'CntlrCmdLine.Utility.Run': utilityRun,
|
|
829
|
-
'CntlrCmdLine.Xbrl.Loaded': xbrlLoaded,
|
|
830
|
-
'CntlrCmdLine.Xbrl.Run': xbrlRun,
|
|
831
|
-
'CntlrCmdLine.Filing.Validate': filingValidate,
|
|
832
|
-
'CntlrCmdLine.Filing.End': filingEnd,
|
|
833
|
-
'ModelManager.Load': xbrlLoad,
|
|
834
|
-
'RssItem.Xbrl.Loaded': rssItemXbrlLoaded,
|
|
835
|
-
'Validate.RssItem': rssItemValidated,
|
|
836
|
-
'TestcaseVariation.Xbrl.Loaded': testcaseVariationXbrlLoaded,
|
|
837
|
-
'TestcaseVariation.Xbrl.Validated': testcaseVariationXbrlValidated,
|
|
838
|
-
'TestcaseVariation.Validated': testcaseVariationValidated,
|
|
839
|
-
'FileSource.File': fileSourceFile,
|
|
840
|
-
'FileSource.Exists': fileSourceExists,
|
|
841
|
-
'Logging.Severity.Releveler': severityReleveler,
|
|
842
|
-
'InlineDocumentSet.IsolateSeparateIXDSes': isolateSeparateIXDSes
|
|
843
|
-
}
|