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
|
@@ -0,0 +1,1372 @@
|
|
|
1
|
+
"""
|
|
2
|
+
See COPYRIGHT.md for copyright information.
|
|
3
|
+
"""
|
|
4
|
+
from __future__ import annotations
|
|
5
|
+
|
|
6
|
+
from dataclasses import dataclass
|
|
7
|
+
from dataclasses import field
|
|
8
|
+
from enum import Enum
|
|
9
|
+
from functools import cached_property
|
|
10
|
+
from typing import Any, cast, Iterable
|
|
11
|
+
|
|
12
|
+
import regex as re
|
|
13
|
+
|
|
14
|
+
from arelle.ModelInstanceObject import ModelFact
|
|
15
|
+
from arelle.ModelXbrl import ModelXbrl
|
|
16
|
+
from arelle.XmlValidateConst import VALID
|
|
17
|
+
|
|
18
|
+
# Error codes
|
|
19
|
+
CH_AUDIT = 'Char.Audit'
|
|
20
|
+
CH_CHAR_FUND = 'Char.CharFund'
|
|
21
|
+
CH_DIR_REP = 'Char.DirReport'
|
|
22
|
+
CH_DIR_RESP = 'Char.DirResp'
|
|
23
|
+
CO_ABRID = 'Co.Abrid'
|
|
24
|
+
CO_AUDIT = 'Co.Audit'
|
|
25
|
+
CO_AUDIT_NR = 'Co.AuditNR'
|
|
26
|
+
CO_DIR_REP = 'Co.DirReport'
|
|
27
|
+
CO_DIR_RESP = 'Co.DirResp'
|
|
28
|
+
CO_GROUP = 'Co.Group'
|
|
29
|
+
CO_MED_CO = 'Co.MedCo'
|
|
30
|
+
CO_MICRO = 'Co.Micro'
|
|
31
|
+
CO_MISSING_ELEMENT = 'Co.MissingElement'
|
|
32
|
+
CO_PROF_LOSS = 'Co.ProfLoss'
|
|
33
|
+
CO_QUAL_AUDIT = 'Co.QualAudit'
|
|
34
|
+
CO_SM_CO = 'Co.SmCo'
|
|
35
|
+
CO_SEC_477 = 'Co.Sec477'
|
|
36
|
+
CO_SEC_480 = 'Co.Sec480'
|
|
37
|
+
LP_ABRID = 'Lp.Abrid'
|
|
38
|
+
LP_AUDIT = 'Lp.Audit'
|
|
39
|
+
LP_GROUP = 'Lp.Group'
|
|
40
|
+
LP_MED_LP = 'Lp.MedLp'
|
|
41
|
+
LP_MEM_RESP = 'Lp.MemResp'
|
|
42
|
+
LP_MICRO = 'Lp.Micro'
|
|
43
|
+
LP_PROF_LOSS = 'Lp.ProfLoss'
|
|
44
|
+
LP_QUAL_AUDIT = 'Lp.QualAudit'
|
|
45
|
+
LP_SEC_477 = 'Lp.Sec477'
|
|
46
|
+
LP_SEC_480 = 'Lp.Sec480'
|
|
47
|
+
LP_SM_LP = 'Lp.SmLp'
|
|
48
|
+
|
|
49
|
+
# Concept local names
|
|
50
|
+
CONCEPT_ABRIDGED_ACCOUNTS = 'AbridgedAccounts'
|
|
51
|
+
CONCEPT_ABBREVIATED_ACCOUNTS = 'AbbreviatedAccounts'
|
|
52
|
+
CONCEPT_AUDITED = 'Audited'
|
|
53
|
+
CONCEPT_APPLICABLE_LEGISLATION = 'ApplicableLegislation'
|
|
54
|
+
CONCEPT_APPLICABLE_LEGISLATION_DIMENSION = 'ApplicableLegislationDimension'
|
|
55
|
+
CONCEPT_ACCOUNTING_STANDARDS_APPLIED = 'AccountingStandardsApplied'
|
|
56
|
+
CONCEPT_ACCOUNTING_STANDARDS_DIMENSION = 'AccountingStandardsDimension'
|
|
57
|
+
CONCEPT_ACCOUNTS_STATUS = 'AccountsStatusAuditedOrUnaudited'
|
|
58
|
+
CONCEPT_ACCOUNTS_STATUS_DIMENSION = 'AccountsStatusDimension'
|
|
59
|
+
CONCEPT_ACCOUNTS_TYPE_FULL_OR_ABBREVIATED = 'AccountsTypeFullOrAbbreviated' # DEPRECATED IN 2022+ taxonomies. No replacement yet.
|
|
60
|
+
CONCEPT_ACCOUNTS_TYPE_DIMENSION = 'AccountsTypeDimension'
|
|
61
|
+
CONCEPT_ADVERSE_OPINION = 'AdverseOpinion'
|
|
62
|
+
CONCEPT_BALANCE_SHEET_DATE = 'BalanceSheetDate'
|
|
63
|
+
CONCEPT_CHARITY_FUNDS = 'CharityFunds'
|
|
64
|
+
CONCEPT_CHARITY_REGISTRATION_NUMBER_ENGLAND_WALES = 'CharityRegistrationNumberEnglandWales'
|
|
65
|
+
CONCEPT_CHARITY_REGISTRATION_NUMBER_NORTH_IRELAND = 'CharityRegistrationNumberNorthernIreland'
|
|
66
|
+
CONCEPT_CHARITY_REGISTRATION_NUMBER_SCOTLAND = 'CharityRegistrationNumberScotland'
|
|
67
|
+
CONCEPT_CONSOLIDATED = 'Consolidated'
|
|
68
|
+
CONCEPT_DATE_AUDITOR_REPORT = 'DateAuditorsReport'
|
|
69
|
+
CONCEPT_DATE_CHARITY_AUDITORS_REPORT = 'DateCharityAuditorsReport'
|
|
70
|
+
CONCEPT_DATE_SIGNING_DIRECTOR_REPORT = 'DateSigningDirectorsReport'
|
|
71
|
+
CONCEPT_DATE_SIGNING_TRUSTEES_REPORT = 'DateSigningTrusteesAnnualReport'
|
|
72
|
+
CONCEPT_DIRECTOR_SIGNING_DIRECTORS_REPORT = 'DirectorSigningDirectorsReport'
|
|
73
|
+
CONCEPT_DISCLAIMER_OPINION = 'DisclaimerOpinion'
|
|
74
|
+
CONCEPT_END_DATE_FOR_PERIOD_COVERED_BY_REPORT = 'EndDateForPeriodCoveredByReport'
|
|
75
|
+
CONCEPT_ENTITY_DORMANT = 'EntityDormantTruefalse'
|
|
76
|
+
CONCEPT_ENTITY_TRADING_STATUS = 'EntityTradingStatus'
|
|
77
|
+
CONCEPT_ENTITY_TRADING_STATUS_DIMENSION = 'EntityTradingStatusDimension'
|
|
78
|
+
CONCEPT_GROUP_COMPANY_DATA_DIMENSION = 'GroupCompanyDataDimension'
|
|
79
|
+
CONCEPT_LANGUAGES_DIMENSION = 'LanguagesDimension'
|
|
80
|
+
CONCEPT_MEDIUM_COMPANY = 'StatementThatCompanyHasPreparedAccountsUnderProvisionsRelatingToMedium-sizedCompanies'
|
|
81
|
+
CONCEPT_MEDIUM_COMPANIES_REGIME_FOR_ACCOUNTS = 'Medium-sizedCompaniesRegimeForAccounts'
|
|
82
|
+
CONCEPT_MICRO_ENTITIES = 'Micro-entities'
|
|
83
|
+
CONCEPT_NAME_INDIVIDUAL_AUDITOR = 'NameIndividualAuditor'
|
|
84
|
+
CONCEPT_NAME_INDIVIDUAL_CHARITY_AUDITOR = 'NameIndividualCharityAuditor'
|
|
85
|
+
CONCEPT_NAME_ENTITY_AUDITORS = 'NameEntityAuditors'
|
|
86
|
+
CONCEPT_NAME_ENTITY_CHARITY_AUDITORS = 'NameEntityCharityAuditors'
|
|
87
|
+
CONCEPT_NAME_SENIOR_STATUTORY_AUDITOR = 'NameSeniorStatutoryAuditor'
|
|
88
|
+
CONCEPT_NAME_SENIOR_STATUTORY_CHARITY_AUDITOR = 'NameSeniorStatutoryCharityAuditor'
|
|
89
|
+
CONCEPT_OPINION_AUDITORS_ON_ENTITY = 'OpinionAuditorsOnEntity'
|
|
90
|
+
CONCEPT_QUALIFIED_OPINION = 'QualifiedOpinion'
|
|
91
|
+
CONCEPT_UNQUALIFIED_OPINION = 'UnqualifiedOpinion'
|
|
92
|
+
CONCEPT_LEGAL_FORM_ENTIY = 'LegalFormEntity'
|
|
93
|
+
CONCEPT_LEGAL_FORM_ENTIY_DIMENSION = 'LegalFormEntityDimension'
|
|
94
|
+
CONCEPT_LLP = 'LimitedLiabilityPartnershipLLP'
|
|
95
|
+
CONCEPT_PROFIT_LOSS = 'ProfitLoss'
|
|
96
|
+
CONCEPT_REPORT_PRINCIPAL_LANGUAGE = 'ReportPrincipalLanguage'
|
|
97
|
+
CONCEPT_SCOPE_ACCOUNTS = 'ScopeAccounts'
|
|
98
|
+
CONCEPT_SCOPE_ACCOUNTS_DIMENSION = 'ScopeAccountsDimension'
|
|
99
|
+
CONCEPT_STATEMENT_PROVIDED = 'StatementOnQualityCompletenessInformationProvidedToAuditors'
|
|
100
|
+
CONCEPT_SMALL_COMPANY_REGIME_FOR_ACCOUNTS = 'SmallCompaniesRegimeForAccounts'
|
|
101
|
+
CONCEPT_TRUSTEE_SIGNING_ANNUAL_REPORT = 'TrusteeSigningTrusteesAnnualReport'
|
|
102
|
+
CONCEPT_GROUP_ACCOUNTS_ONLY = 'GroupAccountsOnly'
|
|
103
|
+
CONCEPT_CONSOLIDATED_GROUP_COMPANY_ACCOUNTS = 'ConsolidatedGroupCompanyAccounts'
|
|
104
|
+
CONCEPT_WELSH = 'Welsh'
|
|
105
|
+
|
|
106
|
+
CHARITY_REGISTRATION_NUMBERS = [CONCEPT_CHARITY_REGISTRATION_NUMBER_ENGLAND_WALES, CONCEPT_CHARITY_REGISTRATION_NUMBER_NORTH_IRELAND, CONCEPT_CHARITY_REGISTRATION_NUMBER_SCOTLAND]
|
|
107
|
+
|
|
108
|
+
# Map of error code > concept local name > tuple of pairings of descriptions and regex patterns
|
|
109
|
+
TEXT_VALIDATION_PATTERNS: dict[str, dict[str, tuple[tuple[str, list[list[str]]], ...]]] = {
|
|
110
|
+
CH_DIR_RESP: {
|
|
111
|
+
'StatementThatDirectorsAcknowledgeTheirResponsibilitiesUnderCompaniesAct': (
|
|
112
|
+
(
|
|
113
|
+
'"Directors acknowledge" or "Director acknowledges" or "Trustees acknowledge" or "Trustee acknowledges", and "responsibilities", and "Companies Act 2006" OR "the Act"',
|
|
114
|
+
[
|
|
115
|
+
["Director acknowledges", "Directors acknowledge", "Trustees acknowledge", "Trustee acknowledges"],
|
|
116
|
+
["responsibilities"],
|
|
117
|
+
["Companies Act 2006", "the Act"]
|
|
118
|
+
],
|
|
119
|
+
),
|
|
120
|
+
(
|
|
121
|
+
'"Cyfarwyddwyr yn cydnabod" or "Cyfarwyddwr yn cydnabod" or "ymddiriedolwyr yn cydnabod" or "ymddiriedolwr yn cydnabod", and "cyfrifoldebau", and "Ddeddf Cwmnïau 2006" or "y ddeddf"',
|
|
122
|
+
[
|
|
123
|
+
["Cyfarwyddwyr yn cydnabod", "Cyfarwyddwr yn cydnabod", "ymddiriedolwyr yn cydnabod", "ymddiriedolwr yn cydnabod"],
|
|
124
|
+
["cyfrifoldebau"],
|
|
125
|
+
["Ddeddf Cwmnïau 2006", "y ddeddf"]
|
|
126
|
+
],
|
|
127
|
+
),
|
|
128
|
+
),
|
|
129
|
+
},
|
|
130
|
+
CO_ABRID: {
|
|
131
|
+
'StatementThatMembersHaveAgreedToPreparationAbridgedAccountsUnderSection444CompaniesAct2006': (
|
|
132
|
+
(
|
|
133
|
+
'Members" or "Member", and "agreed" or "consented", and "preparation", and "abridged")',
|
|
134
|
+
[
|
|
135
|
+
["Members", "Member"],
|
|
136
|
+
["agreed", "consented"],
|
|
137
|
+
["preparation"],
|
|
138
|
+
["abridged"]
|
|
139
|
+
],
|
|
140
|
+
),
|
|
141
|
+
(
|
|
142
|
+
'"Aelodau" or "Aelod", and "wedi cytuno" or "cydsynio", and "paratoi", and "talfyredig")',
|
|
143
|
+
[
|
|
144
|
+
["Aelodau", "Aelod"],
|
|
145
|
+
["wedi cytuno", "cydsynio"],
|
|
146
|
+
["paratoi"],
|
|
147
|
+
["talfyredig"]
|
|
148
|
+
],
|
|
149
|
+
),
|
|
150
|
+
),
|
|
151
|
+
},
|
|
152
|
+
CO_AUDIT_NR: {
|
|
153
|
+
'StatementThatMembersHaveNotRequiredCompanyToObtainAnAudit': (
|
|
154
|
+
(
|
|
155
|
+
'"member has" or "members have", and "not required the company to obtain an audit"',
|
|
156
|
+
[
|
|
157
|
+
["Member has", "Members have"],
|
|
158
|
+
["not required the company to obtain an audit"]
|
|
159
|
+
],
|
|
160
|
+
),
|
|
161
|
+
(
|
|
162
|
+
'"aelodau heb ei gwneud yn ofynnol i\'r cwmni gael archwiliad" OR "aelod heb ei gwneud yn ofynnol i\'r cwmni gael archwiliad"',
|
|
163
|
+
[
|
|
164
|
+
["aelodau heb ei gwneud yn ofynnol i'r cwmni gael archwiliad", "aelod heb ei gwneud yn ofynnol i'r cwmni gael archwiliad"]
|
|
165
|
+
],
|
|
166
|
+
),
|
|
167
|
+
),
|
|
168
|
+
},
|
|
169
|
+
CO_DIR_RESP: {
|
|
170
|
+
'StatementThatDirectorsAcknowledgeTheirResponsibilitiesUnderCompaniesAct': (
|
|
171
|
+
(
|
|
172
|
+
'"Directors acknowledge" or "Director acknowledges", and "responsibilities", and "Companies Act 2006" OR "the Act"',
|
|
173
|
+
[
|
|
174
|
+
["Director acknowledges", "Directors acknowledge"],
|
|
175
|
+
["responsibilities"],
|
|
176
|
+
["Companies Act 2006", "the Act"]
|
|
177
|
+
],
|
|
178
|
+
),
|
|
179
|
+
(
|
|
180
|
+
'"Cyfarwyddwyr yn cydnabod" or "Cyfarwyddwr yn cydnabod", and "cyfrifoldebau", and "Ddeddf Cwmnïau 2006" or "y ddeddf"',
|
|
181
|
+
[
|
|
182
|
+
["Cyfarwyddwyr yn cydnabod", "Cyfarwyddwr yn cydnabod"],
|
|
183
|
+
["cyfrifoldebau"],
|
|
184
|
+
["Ddeddf Cwmnïau 2006", "y ddeddf"]
|
|
185
|
+
],
|
|
186
|
+
),
|
|
187
|
+
),
|
|
188
|
+
},
|
|
189
|
+
CO_MICRO: {
|
|
190
|
+
'StatementThatAccountsHaveBeenPreparedInAccordanceWithProvisionsSmallCompaniesRegime': (
|
|
191
|
+
(
|
|
192
|
+
'"Prepared", and "in accordance with", and "provisions", and "micro"',
|
|
193
|
+
[
|
|
194
|
+
["Prepared"],
|
|
195
|
+
["in accordance with"],
|
|
196
|
+
["provisions"],
|
|
197
|
+
["micro"]
|
|
198
|
+
],
|
|
199
|
+
),
|
|
200
|
+
(
|
|
201
|
+
'"wedi eu paratoi", and "yn unol â", and "darpariaethau", and "micro"',
|
|
202
|
+
[
|
|
203
|
+
["wedi eu paratoi"],
|
|
204
|
+
["yn unol â"],
|
|
205
|
+
["darpariaethau"],
|
|
206
|
+
["micro"]
|
|
207
|
+
],
|
|
208
|
+
),
|
|
209
|
+
),
|
|
210
|
+
},
|
|
211
|
+
CO_SEC_477: {
|
|
212
|
+
'StatementThatCompanyEntitledToExemptionFromAuditUnderSection477CompaniesAct2006RelatingToSmallCompanies': (
|
|
213
|
+
(
|
|
214
|
+
'"Exempt" or "Exemption", and later "section 477 of the Companies Act 2006"',
|
|
215
|
+
[
|
|
216
|
+
["Exempt", "Exemption"],
|
|
217
|
+
["section 477 of the Companies Act 2006"]
|
|
218
|
+
]
|
|
219
|
+
),
|
|
220
|
+
(
|
|
221
|
+
'"Wedi\'i eithrio" or "Eithriad", and "adran 477 o Ddeddf Cwmnïau 2006"',
|
|
222
|
+
[
|
|
223
|
+
["Wedi'i eithrio", "Eithriad"],
|
|
224
|
+
["adran 477 o Ddeddf Cwmnïau 2006"]
|
|
225
|
+
],
|
|
226
|
+
),
|
|
227
|
+
),
|
|
228
|
+
},
|
|
229
|
+
CO_SEC_480: {
|
|
230
|
+
'StatementThatCompanyEntitledToExemptionFromAuditUnderSection480CompaniesAct2006RelatingToDormantCompanies': (
|
|
231
|
+
(
|
|
232
|
+
'"Exempt" or "Exemption", and later "section 480 of the Companies Act 2006"',
|
|
233
|
+
[
|
|
234
|
+
["Exempt", "Exemption"],
|
|
235
|
+
["section 480 of the Companies Act 2006"]
|
|
236
|
+
],
|
|
237
|
+
),
|
|
238
|
+
(
|
|
239
|
+
'"Wedi\'i eithrio" or "Eithriad", and "adran 480 o Ddeddf Cwmnïau 2006"',
|
|
240
|
+
[
|
|
241
|
+
["Wedi'i eithrio", "Eithriad"],
|
|
242
|
+
["adran 480 o Ddeddf Cwmnïau 2006"]
|
|
243
|
+
],
|
|
244
|
+
),
|
|
245
|
+
),
|
|
246
|
+
},
|
|
247
|
+
CO_SM_CO: {
|
|
248
|
+
'StatementThatAccountsHaveBeenPreparedInAccordanceWithProvisionsSmallCompaniesRegime': (
|
|
249
|
+
(
|
|
250
|
+
'"Prepared in accordance with", and "provisions", and "small companies"',
|
|
251
|
+
[
|
|
252
|
+
["Prepared in accordance with"],
|
|
253
|
+
["provisions"],
|
|
254
|
+
["small companies"]
|
|
255
|
+
],
|
|
256
|
+
),
|
|
257
|
+
(
|
|
258
|
+
'"Paratowyd yn unol â", and "darpariaethau", and "cwmnïau bach"',
|
|
259
|
+
[
|
|
260
|
+
["Paratowyd yn unol â"],
|
|
261
|
+
["darpariaethau"],
|
|
262
|
+
["cwmnïau bach"]
|
|
263
|
+
],
|
|
264
|
+
),
|
|
265
|
+
),
|
|
266
|
+
},
|
|
267
|
+
LP_ABRID: {
|
|
268
|
+
'StatementThatMembersHaveAgreedToPreparationAbridgedAccountsUnderSection444CompaniesAct2006': (
|
|
269
|
+
(
|
|
270
|
+
'"Members" or "Member", and "agreed" or "consented", and "preparation", and "abridged")',
|
|
271
|
+
[
|
|
272
|
+
["Members", "Member"],
|
|
273
|
+
["agreed", "consented"],
|
|
274
|
+
["preparation"],
|
|
275
|
+
["abridged"]
|
|
276
|
+
],
|
|
277
|
+
),
|
|
278
|
+
(
|
|
279
|
+
'"Aelodau" or "Aelod", and "wedi cytuno" or "cydsynio", and "paratoi", and "talfyredig")',
|
|
280
|
+
[
|
|
281
|
+
["Aelodau", "Aelod"],
|
|
282
|
+
["wedi cytuno", "cydsynio"],
|
|
283
|
+
["paratoi"],
|
|
284
|
+
["talfyredig"]
|
|
285
|
+
],
|
|
286
|
+
),
|
|
287
|
+
),
|
|
288
|
+
},
|
|
289
|
+
LP_MEM_RESP: {
|
|
290
|
+
'StatementThatDirectorsAcknowledgeTheirResponsibilitiesUnderCompaniesAct': (
|
|
291
|
+
(
|
|
292
|
+
'"Members acknowledge" or "Member acknowledges", and "responsibilities", and "Companies Act 2006" or "the Act", and "Limited Liability Partnership" or "LLP"',
|
|
293
|
+
[
|
|
294
|
+
["Members acknowledge", "Member acknowledges"],
|
|
295
|
+
["responsibilities"],
|
|
296
|
+
["Companies Act 2006", "the Act"],
|
|
297
|
+
["Limited Liability Partnership", "LLP"]
|
|
298
|
+
],
|
|
299
|
+
),
|
|
300
|
+
(
|
|
301
|
+
'"Aelodau\'n cydnabod" or "Aelod yn cydnabod", and "cyfrifoldebau", and "Ddeddf Cwmnïau 2006" or "y Ddeddf", and "Partneriaeth Atebolrwydd Cyfyngedig" or "PAC"',
|
|
302
|
+
[
|
|
303
|
+
["Aelodau'n cydnabod", "Aelod yn cydnabod"],
|
|
304
|
+
["cyfrifoldebau"],
|
|
305
|
+
["Ddeddf Cwmnïau 2006", "y Ddeddf"],
|
|
306
|
+
["Partneriaeth Atebolrwydd Cyfyngedig", "PAC"]
|
|
307
|
+
],
|
|
308
|
+
),
|
|
309
|
+
),
|
|
310
|
+
},
|
|
311
|
+
LP_MICRO: {
|
|
312
|
+
'StatementThatAccountsHaveBeenPreparedInAccordanceWithProvisionsSmallCompaniesRegime': (
|
|
313
|
+
(
|
|
314
|
+
'"Prepared", and "in accordance with", and "provisions", and "micro"',
|
|
315
|
+
[
|
|
316
|
+
["Prepared"],
|
|
317
|
+
["in accordance with"],
|
|
318
|
+
["provisions"],
|
|
319
|
+
["micro"]
|
|
320
|
+
],
|
|
321
|
+
),
|
|
322
|
+
(
|
|
323
|
+
'"wedi eu paratoi", and "yn unol â", and "darpariaethau", and "micro"',
|
|
324
|
+
[
|
|
325
|
+
["wedi eu paratoi"],
|
|
326
|
+
["yn unol â"],
|
|
327
|
+
["darpariaethau"],
|
|
328
|
+
["micro"]
|
|
329
|
+
],
|
|
330
|
+
),
|
|
331
|
+
),
|
|
332
|
+
},
|
|
333
|
+
LP_SEC_477: {
|
|
334
|
+
'StatementThatCompanyEntitledToExemptionFromAuditUnderSection477CompaniesAct2006RelatingToSmallCompanies': (
|
|
335
|
+
(
|
|
336
|
+
'"Exempt" OR "Exemption", and "section 477 of the Companies Act 2006", and "Limited Liability Partnership" OR "LLP")',
|
|
337
|
+
[
|
|
338
|
+
["Exempt", "Exemption"],
|
|
339
|
+
["section 477 of the Companies Act 2006"],
|
|
340
|
+
["Limited Liability Partnership", "LLP"]
|
|
341
|
+
],
|
|
342
|
+
),
|
|
343
|
+
(
|
|
344
|
+
'"Wedi\'i eithrio" or "Eithriad", and "adran 477 o Ddeddf Cwmnïau 2006", and "Partneriaeth Atebolrwydd Cyfyngedig" OR "PAC"',
|
|
345
|
+
[
|
|
346
|
+
["Wedi'i eithrio", "Eithriad"],
|
|
347
|
+
["adran 477 o Ddeddf Cwmnïau 2006"],
|
|
348
|
+
["Partneriaeth Atebolrwydd Cyfyngedig", "PAC"]
|
|
349
|
+
],
|
|
350
|
+
),
|
|
351
|
+
),
|
|
352
|
+
},
|
|
353
|
+
LP_SEC_480: {
|
|
354
|
+
'StatementThatCompanyEntitledToExemptionFromAuditUnderSection480CompaniesAct2006RelatingToDormantCompanies': (
|
|
355
|
+
(
|
|
356
|
+
'"Exempt" or "Exemption", and "section 480 of the Companies Act 2006", and "Limited Liability Partnership" OR "LLP"',
|
|
357
|
+
[
|
|
358
|
+
["Exempt", "Exemption"],
|
|
359
|
+
["section 480 of the Companies Act 2006"],
|
|
360
|
+
["Limited Liability Partnership", "LLP"]
|
|
361
|
+
],
|
|
362
|
+
),
|
|
363
|
+
(
|
|
364
|
+
'"Wedi\'i eithrio" or "Eithriad", and "adran 480 o Ddeddf Cwmnïau 2006", and "Partneriaeth Atebolrwydd Cyfyngedig" or "PAC"',
|
|
365
|
+
[
|
|
366
|
+
["Wedi'i eithrio", "Eithriad"],
|
|
367
|
+
["adran 480 o Ddeddf Cwmnïau 2006"],
|
|
368
|
+
["Partneriaeth Atebolrwydd Cyfyngedig", "PAC"]
|
|
369
|
+
],
|
|
370
|
+
),
|
|
371
|
+
),
|
|
372
|
+
},
|
|
373
|
+
LP_SM_LP: {
|
|
374
|
+
'StatementThatAccountsHaveBeenPreparedInAccordanceWithProvisionsSmallCompaniesRegime': (
|
|
375
|
+
(
|
|
376
|
+
'"Prepared in accordance with", and "provisions", and "small Limited Liability Partnership" OR "small LLP',
|
|
377
|
+
[
|
|
378
|
+
["Prepared in accordance with"],
|
|
379
|
+
["provisions"],
|
|
380
|
+
["small Limited Liability Partnership", "small LLP"]
|
|
381
|
+
],
|
|
382
|
+
),
|
|
383
|
+
(
|
|
384
|
+
'"Paratowyd yn unol â", and "y darpariaethau", and "Partneriaeth Atebolrwydd Cyfyngedig bach" or "PAC bach")',
|
|
385
|
+
[
|
|
386
|
+
["Paratowyd yn unol â"],
|
|
387
|
+
["y darpariaethau"],
|
|
388
|
+
["Partneriaeth Atebolrwydd Cyfyngedig bach", "PAC bach"]
|
|
389
|
+
],
|
|
390
|
+
),
|
|
391
|
+
),
|
|
392
|
+
},
|
|
393
|
+
}
|
|
394
|
+
|
|
395
|
+
# Map of codes > dict of local name and warning level boolean
|
|
396
|
+
SINGLE_CONCEPT_EVALUATIONS: dict[str, dict[str, bool]] = {
|
|
397
|
+
CO_MED_CO: {CONCEPT_MEDIUM_COMPANY: True},
|
|
398
|
+
LP_MED_LP: {CONCEPT_MEDIUM_COMPANY: True},
|
|
399
|
+
CO_QUAL_AUDIT: {CONCEPT_STATEMENT_PROVIDED: False},
|
|
400
|
+
LP_QUAL_AUDIT: {CONCEPT_STATEMENT_PROVIDED: False},
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
class AccountStatus(Enum):
|
|
405
|
+
AUDIT_EXEMPT_NO_REPORT = 'AuditExempt-NoAccountantsReport'
|
|
406
|
+
AUDIT_EXEMPT_WITH_REPORT = 'AuditExemptWithAccountantsReport'
|
|
407
|
+
|
|
408
|
+
|
|
409
|
+
class NotTrading(Enum):
|
|
410
|
+
CONCEPT_ENTITY_HAS_NEVER_TRADED = 'EntityHasNeverTraded'
|
|
411
|
+
CONCEPT_ENTITY_NO_LONGER_TRADING = 'EntityNoLongerTradingButTradedInPast'
|
|
412
|
+
|
|
413
|
+
|
|
414
|
+
class ScopeAccounts(Enum):
|
|
415
|
+
GROUP_ONLY = 'GroupAccountsOnly'
|
|
416
|
+
CONSOLIDATED_GROUP = 'ConsolidatedGroupCompanyAccounts'
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
@dataclass
|
|
420
|
+
class CodeResult:
|
|
421
|
+
success: bool = field(default=True)
|
|
422
|
+
conceptLocalName: str | None = field(default=None)
|
|
423
|
+
conceptList: list[str] | None = field(default=None)
|
|
424
|
+
fact: ModelFact | None = field(default=None)
|
|
425
|
+
message: str | None = field(default=None)
|
|
426
|
+
warning: bool = field(default=False)
|
|
427
|
+
|
|
428
|
+
|
|
429
|
+
class HmrcLang(Enum):
|
|
430
|
+
ENGLISH = 0
|
|
431
|
+
WELSH = 1
|
|
432
|
+
|
|
433
|
+
|
|
434
|
+
@dataclass
|
|
435
|
+
class ValidateUK:
|
|
436
|
+
modelXbrl: ModelXbrl
|
|
437
|
+
_codeResultMap: dict[str, CodeResult] = field(default_factory=dict)
|
|
438
|
+
|
|
439
|
+
def _checkValidFact(self, fact: ModelFact ) -> bool:
|
|
440
|
+
return (
|
|
441
|
+
fact is not None and
|
|
442
|
+
not fact.isNil and
|
|
443
|
+
fact.context is not None
|
|
444
|
+
)
|
|
445
|
+
|
|
446
|
+
def _errorOnMissingFact(self, conceptLocalName: str) -> None:
|
|
447
|
+
"""
|
|
448
|
+
Logs an error explaining that a fact of the given concept was missing.
|
|
449
|
+
:param conceptLocalName:
|
|
450
|
+
"""
|
|
451
|
+
self.modelXbrl.error(
|
|
452
|
+
CO_MISSING_ELEMENT,
|
|
453
|
+
"Based on facts regarding Entity and Report Information provided, "
|
|
454
|
+
"your document is expected to have a fact tagged with the following concept: %(conceptLocalName)s.",
|
|
455
|
+
conceptLocalName=conceptLocalName
|
|
456
|
+
)
|
|
457
|
+
|
|
458
|
+
def _errorOnMissingFactText(self, code: str, result: CodeResult) -> None:
|
|
459
|
+
"""
|
|
460
|
+
Logs an error on the `ModelXbrl` explaining the actual fact value did not match expected patterns.
|
|
461
|
+
If a fact of the expected type did not exist, an additional error will be logged.
|
|
462
|
+
:param code:
|
|
463
|
+
:param result:
|
|
464
|
+
"""
|
|
465
|
+
if result.fact is None and result.conceptLocalName is not None:
|
|
466
|
+
self._errorOnMissingFact(result.conceptLocalName)
|
|
467
|
+
self.modelXbrl.error(
|
|
468
|
+
code,
|
|
469
|
+
"The value for the the fact tagged with the concept %(conceptLocalName)s "
|
|
470
|
+
"is missing the text for language '%(lang)s': %(message)s",
|
|
471
|
+
conceptLocalName=result.conceptLocalName,
|
|
472
|
+
lang=self._lang.name.title(),
|
|
473
|
+
message=result.message,
|
|
474
|
+
modelObject=result.fact,
|
|
475
|
+
)
|
|
476
|
+
|
|
477
|
+
def _setCode(self, code: str, result: CodeResult) -> CodeResult:
|
|
478
|
+
"""
|
|
479
|
+
Caches the given result for the given code.
|
|
480
|
+
:param code:
|
|
481
|
+
:param result:
|
|
482
|
+
:return: The given result.
|
|
483
|
+
"""
|
|
484
|
+
self._codeResultMap[code] = result
|
|
485
|
+
return result
|
|
486
|
+
|
|
487
|
+
def _evaluateTextPattern(self, code: str) -> CodeResult:
|
|
488
|
+
pattern: dict[str, tuple[tuple[str, list[list[str]]], ...]] | Any = TEXT_VALIDATION_PATTERNS.get(code, {})
|
|
489
|
+
for conceptLocalName, textMatchers in pattern.items():
|
|
490
|
+
facts = self._getFacts(conceptLocalName)
|
|
491
|
+
if not facts:
|
|
492
|
+
return CodeResult(
|
|
493
|
+
success=False,
|
|
494
|
+
conceptLocalName=conceptLocalName
|
|
495
|
+
)
|
|
496
|
+
for fact in facts:
|
|
497
|
+
message, phrase_lists = textMatchers[self._lang.value]
|
|
498
|
+
match = all(
|
|
499
|
+
re.compile(
|
|
500
|
+
"|".join(r"\b{}\b".format(phrase) for phrase in phrase_list),
|
|
501
|
+
re.MULTILINE | re.IGNORECASE
|
|
502
|
+
).search(fact.value) for phrase_list in phrase_lists
|
|
503
|
+
)
|
|
504
|
+
|
|
505
|
+
if not match:
|
|
506
|
+
return CodeResult(
|
|
507
|
+
success=False,
|
|
508
|
+
conceptLocalName=conceptLocalName,
|
|
509
|
+
fact=fact,
|
|
510
|
+
message=message
|
|
511
|
+
)
|
|
512
|
+
return CodeResult()
|
|
513
|
+
|
|
514
|
+
def _evaluateDirectorFacts(self, code: str) -> CodeResult:
|
|
515
|
+
"""
|
|
516
|
+
Logs an error when an audited report does not facts tagged with the concepts of "DateSigningDirectorsReport" and "DirectorSigningDirectorsReport,
|
|
517
|
+
or DateSigningTrusteesAnnualReport and TrusteeSigningTrusteesAnnualReport (for charities)."
|
|
518
|
+
:return:
|
|
519
|
+
"""
|
|
520
|
+
missingConcepts = []
|
|
521
|
+
if not self._getAndCheckValidFacts([CONCEPT_DATE_SIGNING_DIRECTOR_REPORT]):
|
|
522
|
+
missingConcepts.append(CONCEPT_DATE_SIGNING_DIRECTOR_REPORT)
|
|
523
|
+
if not self._getAndCheckValidFacts([CONCEPT_DIRECTOR_SIGNING_DIRECTORS_REPORT]):
|
|
524
|
+
missingConcepts.append(CONCEPT_DIRECTOR_SIGNING_DIRECTORS_REPORT)
|
|
525
|
+
if len(missingConcepts) > 0:
|
|
526
|
+
if code == CO_DIR_REP:
|
|
527
|
+
return CodeResult(
|
|
528
|
+
success=False,
|
|
529
|
+
conceptList=missingConcepts,
|
|
530
|
+
message="Facts tagged with the DateSigningDirectorsReport and DirectorSigningDirectorsReport must exist with non-nil values. "
|
|
531
|
+
"There are no facts tagged with the concepts: %(conceptList)s.",
|
|
532
|
+
)
|
|
533
|
+
elif code == CH_DIR_REP:
|
|
534
|
+
missingCharConcepts = []
|
|
535
|
+
if not self._getAndCheckValidFacts([CONCEPT_DATE_SIGNING_TRUSTEES_REPORT]):
|
|
536
|
+
missingCharConcepts.append(CONCEPT_DATE_SIGNING_TRUSTEES_REPORT)
|
|
537
|
+
if not self._getAndCheckValidFacts([CONCEPT_TRUSTEE_SIGNING_ANNUAL_REPORT]):
|
|
538
|
+
missingCharConcepts.append(CONCEPT_TRUSTEE_SIGNING_ANNUAL_REPORT)
|
|
539
|
+
if len(missingCharConcepts) > 0:
|
|
540
|
+
missingConcepts.extend(missingCharConcepts)
|
|
541
|
+
return CodeResult(
|
|
542
|
+
success=False,
|
|
543
|
+
conceptList=missingConcepts,
|
|
544
|
+
message="A set of facts must exist with non-nil values with the concepts of DateSigningDirectorsReport and DirectorSigningDirectorsReport "
|
|
545
|
+
"or DateSigningTrusteesAnnualReport and TrusteeSigningTrusteesAnnualReport. "
|
|
546
|
+
"There are no facts tagged with the concepts: %(conceptList)s.",
|
|
547
|
+
)
|
|
548
|
+
return CodeResult()
|
|
549
|
+
|
|
550
|
+
def _evaluateAuditFacts(self) -> CodeResult:
|
|
551
|
+
"""
|
|
552
|
+
Logs an error when an audited report does not facts tagged with the concepts of "DateAuditorsReport" and "OpinionAuditorsOnEntity"
|
|
553
|
+
as well as either "NameIndividualAuditor" or the combination of "NameSeniorStatutoryAuditor" and "NameEntityAuditors".
|
|
554
|
+
:return:
|
|
555
|
+
"""
|
|
556
|
+
missingConcepts = []
|
|
557
|
+
if not self._getAndCheckValidFacts([CONCEPT_DATE_AUDITOR_REPORT]):
|
|
558
|
+
missingConcepts.append(CONCEPT_DATE_AUDITOR_REPORT)
|
|
559
|
+
if not self._getAndCheckValidFacts([CONCEPT_OPINION_AUDITORS_ON_ENTITY]):
|
|
560
|
+
missingConcepts.append(CONCEPT_OPINION_AUDITORS_ON_ENTITY)
|
|
561
|
+
if (not (self._getAndCheckValidFacts([CONCEPT_NAME_ENTITY_AUDITORS]) and self._getAndCheckValidFacts([CONCEPT_NAME_SENIOR_STATUTORY_AUDITOR]))
|
|
562
|
+
and not self._getAndCheckValidFacts([CONCEPT_NAME_INDIVIDUAL_AUDITOR])):
|
|
563
|
+
missingConcepts.append(CONCEPT_NAME_INDIVIDUAL_AUDITOR)
|
|
564
|
+
missingConcepts.append(CONCEPT_NAME_SENIOR_STATUTORY_AUDITOR)
|
|
565
|
+
missingConcepts.append(CONCEPT_NAME_ENTITY_AUDITORS)
|
|
566
|
+
if len(missingConcepts) > 0:
|
|
567
|
+
return CodeResult(
|
|
568
|
+
success=False,
|
|
569
|
+
conceptList=missingConcepts,
|
|
570
|
+
message="An audited report must contain facts tagged with the concepts of DateAuditorsReport, OpinionAuditorsOnEntity "
|
|
571
|
+
"as well as either NameIndividualAuditor or the combination of NameSeniorStatutoryAuditor and NameEntityAuditors. "
|
|
572
|
+
"There are no facts tagged with the concepts: %(conceptList)s."
|
|
573
|
+
)
|
|
574
|
+
return CodeResult()
|
|
575
|
+
|
|
576
|
+
def _evaluateCharAuditFacts(self) -> CodeResult:
|
|
577
|
+
"""
|
|
578
|
+
Logs an error when a charity report does not facts tagged with the concepts of "DateAuditorsReport" or "DateCharityAuditorsReport"
|
|
579
|
+
and "OpinionAuditorsOnEntity" or "QualifiedOpinion" or "UnqualifiedOpinion" or "AdverseOpinion" or "DisclaimerOpinion"
|
|
580
|
+
and "NameIndividualAuditor" or "NameIndividualCharityAuditor" or ("NameSeniorStatutoryAuditor" and "NameEntityAuditors") or ("NameSeniorStatutoryCharityAuditor" and "NameEntityCharityAuditors")
|
|
581
|
+
:return:
|
|
582
|
+
"""
|
|
583
|
+
missingConcepts = []
|
|
584
|
+
if not self._getAndCheckValidFacts([CONCEPT_DATE_AUDITOR_REPORT, CONCEPT_DATE_CHARITY_AUDITORS_REPORT]):
|
|
585
|
+
missingConcepts.extend([CONCEPT_DATE_AUDITOR_REPORT, CONCEPT_DATE_CHARITY_AUDITORS_REPORT])
|
|
586
|
+
if not self._getAndCheckValidFacts(
|
|
587
|
+
[CONCEPT_OPINION_AUDITORS_ON_ENTITY, CONCEPT_QUALIFIED_OPINION, CONCEPT_UNQUALIFIED_OPINION, CONCEPT_ADVERSE_OPINION, CONCEPT_DISCLAIMER_OPINION]
|
|
588
|
+
):
|
|
589
|
+
missingConcepts.extend(
|
|
590
|
+
[CONCEPT_OPINION_AUDITORS_ON_ENTITY, CONCEPT_QUALIFIED_OPINION, CONCEPT_UNQUALIFIED_OPINION, CONCEPT_ADVERSE_OPINION, CONCEPT_DISCLAIMER_OPINION]
|
|
591
|
+
)
|
|
592
|
+
if not self._getAndCheckValidFacts([CONCEPT_NAME_INDIVIDUAL_AUDITOR, CONCEPT_NAME_INDIVIDUAL_CHARITY_AUDITOR]):
|
|
593
|
+
if not (self._getAndCheckValidFacts([CONCEPT_NAME_SENIOR_STATUTORY_AUDITOR]) and self._getAndCheckValidFacts([CONCEPT_NAME_ENTITY_AUDITORS])):
|
|
594
|
+
if not (self._getAndCheckValidFacts([CONCEPT_NAME_SENIOR_STATUTORY_CHARITY_AUDITOR]) and self._getAndCheckValidFacts([CONCEPT_NAME_ENTITY_CHARITY_AUDITORS])):
|
|
595
|
+
missingConcepts.extend(
|
|
596
|
+
[
|
|
597
|
+
CONCEPT_NAME_INDIVIDUAL_AUDITOR, CONCEPT_NAME_INDIVIDUAL_CHARITY_AUDITOR, CONCEPT_NAME_SENIOR_STATUTORY_AUDITOR, CONCEPT_NAME_ENTITY_AUDITORS,
|
|
598
|
+
CONCEPT_NAME_SENIOR_STATUTORY_CHARITY_AUDITOR, CONCEPT_NAME_ENTITY_CHARITY_AUDITORS
|
|
599
|
+
]
|
|
600
|
+
)
|
|
601
|
+
if len(missingConcepts) > 0:
|
|
602
|
+
return CodeResult(
|
|
603
|
+
success=False,
|
|
604
|
+
conceptList=missingConcepts,
|
|
605
|
+
message="Audited charities accounts submission missing required audit-related information. Audited charity accounts submissions are required to include facts for: "
|
|
606
|
+
"i) DateAuditorsReport or DateCharityAuditorsReport "
|
|
607
|
+
"ii) OpinionAuditorsOnEntity, QualifiedOpinion, UnqualifiedOpinion, AdverseOpinion, or DisclaimerOpinion "
|
|
608
|
+
"iii) NameIndividualAuditor, NameIndividualCharityAuditor, OR either (NameSeniorStatutoryAuditor and NameEntityAuditors) or (NameSeniorStatutoryCharityAuditor and NameEntityCharityAuditors) "
|
|
609
|
+
"There are no facts tagged with the concepts: %(conceptList)s"
|
|
610
|
+
)
|
|
611
|
+
return CodeResult()
|
|
612
|
+
|
|
613
|
+
def _evaluateRequiredSingleFact(self, code: str) -> CodeResult:
|
|
614
|
+
"""
|
|
615
|
+
Logs a warning or error if the fact tied to the code is not found.
|
|
616
|
+
"""
|
|
617
|
+
conceptAndLevel = SINGLE_CONCEPT_EVALUATIONS.get(code, {})
|
|
618
|
+
for conceptLocalName, warning in conceptAndLevel.items():
|
|
619
|
+
if not self._getAndCheckValidFacts([conceptLocalName]):
|
|
620
|
+
return CodeResult(
|
|
621
|
+
success=False,
|
|
622
|
+
warning=warning,
|
|
623
|
+
message="The concept of %(conceptLocalName)s must exist and have a non-nil value.",
|
|
624
|
+
conceptLocalName=conceptLocalName,
|
|
625
|
+
)
|
|
626
|
+
return CodeResult()
|
|
627
|
+
|
|
628
|
+
def _evaluateProfLossOrCharityFundsFact(self, code: str) -> CodeResult:
|
|
629
|
+
"""
|
|
630
|
+
Logs an error if EntityTradingStatus with the dimension of EntityTradingStatusDimension/(EntityHasNeverTraded OR EntityNoLongerTradingButTradedInPast)
|
|
631
|
+
or (ProfitLoss for a company/LLP of CharityFunds for a charity)
|
|
632
|
+
"""
|
|
633
|
+
concept = ''
|
|
634
|
+
if code in (CO_PROF_LOSS, LP_PROF_LOSS):
|
|
635
|
+
concept = CONCEPT_PROFIT_LOSS
|
|
636
|
+
elif code == CH_CHAR_FUND:
|
|
637
|
+
concept = CONCEPT_CHARITY_FUNDS
|
|
638
|
+
trading = False
|
|
639
|
+
for value in self._getDimensionValues(CONCEPT_ENTITY_TRADING_STATUS, CONCEPT_ENTITY_TRADING_STATUS_DIMENSION):
|
|
640
|
+
if value in {
|
|
641
|
+
NotTrading.CONCEPT_ENTITY_NO_LONGER_TRADING.value,
|
|
642
|
+
NotTrading.CONCEPT_ENTITY_HAS_NEVER_TRADED.value,
|
|
643
|
+
}:
|
|
644
|
+
trading = True
|
|
645
|
+
if not self._getAndCheckValidFacts([concept]) and not trading:
|
|
646
|
+
return CodeResult(
|
|
647
|
+
conceptLocalName=concept,
|
|
648
|
+
success=False,
|
|
649
|
+
message="A fact tagged with %(conceptLocalName)s must exist if a fact tagged with EntityTradingStatus "
|
|
650
|
+
"with the dimension of EntityTradingStatusDimension/(EntityHasNeverTraded OR EntityNoLongerTradingButTradedInPast) "
|
|
651
|
+
"does not exist or has a nil value"
|
|
652
|
+
)
|
|
653
|
+
return CodeResult()
|
|
654
|
+
|
|
655
|
+
def _evaluateGroupFacts(self) -> CodeResult:
|
|
656
|
+
"""
|
|
657
|
+
BalanceSheetDate with GroupCompanyDataDimension and Consolidated must equal BalanceSheetDate with default
|
|
658
|
+
dimensions. Both facts must be non-nil.
|
|
659
|
+
"""
|
|
660
|
+
consolidatedFact = None
|
|
661
|
+
defaultFact = None
|
|
662
|
+
endDateFact = None
|
|
663
|
+
for fact in self._getFacts(CONCEPT_END_DATE_FOR_PERIOD_COVERED_BY_REPORT):
|
|
664
|
+
if not fact.context.qnameDims:
|
|
665
|
+
endDateFact = fact
|
|
666
|
+
break
|
|
667
|
+
if endDateFact is None:
|
|
668
|
+
return CodeResult()
|
|
669
|
+
for balanceSheetDateFact in self._getFacts(CONCEPT_BALANCE_SHEET_DATE):
|
|
670
|
+
if self._checkValidFact(balanceSheetDateFact):
|
|
671
|
+
if not balanceSheetDateFact.context.qnameDims and balanceSheetDateFact.context.instantDate == endDateFact.context.instantDate:
|
|
672
|
+
defaultFact = balanceSheetDateFact
|
|
673
|
+
for qname, value in balanceSheetDateFact.context.qnameDims.items():
|
|
674
|
+
if value.xValid < VALID:
|
|
675
|
+
continue
|
|
676
|
+
if qname.localName == CONCEPT_GROUP_COMPANY_DATA_DIMENSION and cast(str, value.xValue.localName) == CONCEPT_CONSOLIDATED:
|
|
677
|
+
consolidatedFact = balanceSheetDateFact
|
|
678
|
+
break
|
|
679
|
+
if consolidatedFact is None or defaultFact is None or consolidatedFact.xValue != defaultFact.xValue:
|
|
680
|
+
return CodeResult(
|
|
681
|
+
conceptLocalName=CONCEPT_BALANCE_SHEET_DATE,
|
|
682
|
+
success=False,
|
|
683
|
+
message="A fact tagged with BalanceSheetDate with the dimension of GroupCompanyDataDimension/Consolidated "
|
|
684
|
+
"must equal a fact tagged with BalanceSheetDate with the default dimension."
|
|
685
|
+
)
|
|
686
|
+
return CodeResult()
|
|
687
|
+
|
|
688
|
+
def _evaluateCode(self, code: str) -> CodeResult:
|
|
689
|
+
"""
|
|
690
|
+
Evaluates whether the conditions associated with the given code pass.
|
|
691
|
+
Result is cached.
|
|
692
|
+
:param code:
|
|
693
|
+
:return: Result object that can be used for additional logic or to trigger an error.
|
|
694
|
+
"""
|
|
695
|
+
if code in self._codeResultMap:
|
|
696
|
+
return self._codeResultMap[code]
|
|
697
|
+
if code in TEXT_VALIDATION_PATTERNS:
|
|
698
|
+
result = self._evaluateTextPattern(code)
|
|
699
|
+
elif code in (CO_AUDIT, LP_AUDIT):
|
|
700
|
+
result = self._evaluateAuditFacts()
|
|
701
|
+
elif code in (CH_DIR_REP, CO_DIR_REP):
|
|
702
|
+
result = self._evaluateDirectorFacts(code)
|
|
703
|
+
elif code in SINGLE_CONCEPT_EVALUATIONS:
|
|
704
|
+
result = self._evaluateRequiredSingleFact(code)
|
|
705
|
+
elif code in (CH_CHAR_FUND, CO_PROF_LOSS, LP_PROF_LOSS):
|
|
706
|
+
result = self._evaluateProfLossOrCharityFundsFact(code)
|
|
707
|
+
elif code == CH_AUDIT:
|
|
708
|
+
result = self._evaluateCharAuditFacts()
|
|
709
|
+
elif code in (CO_GROUP, LP_GROUP):
|
|
710
|
+
result = self._evaluateGroupFacts()
|
|
711
|
+
return self._setCode(code, result)
|
|
712
|
+
|
|
713
|
+
def _getFacts(self, conceptLocalName: str) -> list[ModelFact]:
|
|
714
|
+
return [f for f in self.modelXbrl.factsByLocalName.get(conceptLocalName, set()) if f is not None]
|
|
715
|
+
|
|
716
|
+
def _getAndCheckValidFacts(self, conceptLocalNames: list[str]) -> bool:
|
|
717
|
+
for concept in conceptLocalNames:
|
|
718
|
+
facts = self._getFacts(concept)
|
|
719
|
+
if any(self._checkValidFact(x) for x in facts):
|
|
720
|
+
return True
|
|
721
|
+
return False
|
|
722
|
+
|
|
723
|
+
@cached_property
|
|
724
|
+
def _lang(self) -> HmrcLang:
|
|
725
|
+
"""
|
|
726
|
+
Determines if the language is set to Welsh, otherwise defaults to English.
|
|
727
|
+
"""
|
|
728
|
+
if any(
|
|
729
|
+
lang == CONCEPT_WELSH
|
|
730
|
+
for lang in self._getDimensionValues(CONCEPT_REPORT_PRINCIPAL_LANGUAGE, CONCEPT_LANGUAGES_DIMENSION)
|
|
731
|
+
):
|
|
732
|
+
return HmrcLang.WELSH
|
|
733
|
+
return HmrcLang.ENGLISH
|
|
734
|
+
|
|
735
|
+
def _yieldErrorOrWarning(self, code: str, result: CodeResult) -> None:
|
|
736
|
+
"""
|
|
737
|
+
Logs an error on the `ModelXbrl` explaining the actual fact value did not match expected patterns.
|
|
738
|
+
If a fact of the expected type did not exist, an additional error will be logged.
|
|
739
|
+
:param code:
|
|
740
|
+
:param result:
|
|
741
|
+
"""
|
|
742
|
+
if result.message is None:
|
|
743
|
+
result.message = ''
|
|
744
|
+
if not result.warning:
|
|
745
|
+
self.modelXbrl.error(
|
|
746
|
+
code,
|
|
747
|
+
msg=result.message,
|
|
748
|
+
conceptList=result.conceptList,
|
|
749
|
+
conceptLocalName=result.conceptLocalName,
|
|
750
|
+
message=result.message,
|
|
751
|
+
modelObject=result.fact,
|
|
752
|
+
)
|
|
753
|
+
else:
|
|
754
|
+
self.modelXbrl.warning(
|
|
755
|
+
code,
|
|
756
|
+
msg=result.message,
|
|
757
|
+
conceptList=result.conceptList,
|
|
758
|
+
conceptLocalName=result.conceptLocalName,
|
|
759
|
+
message=result.message,
|
|
760
|
+
modelObject=result.fact,
|
|
761
|
+
)
|
|
762
|
+
|
|
763
|
+
@cached_property
|
|
764
|
+
def accountStatus(self) -> str | None:
|
|
765
|
+
return next(iter(self._getDimensionValues(CONCEPT_ACCOUNTS_STATUS, CONCEPT_ACCOUNTS_STATUS_DIMENSION)), None)
|
|
766
|
+
|
|
767
|
+
@cached_property
|
|
768
|
+
def accountsType(self) -> str | None:
|
|
769
|
+
return next(iter(self._getDimensionValues(CONCEPT_ACCOUNTS_TYPE_FULL_OR_ABBREVIATED, CONCEPT_ACCOUNTS_TYPE_DIMENSION)), None)
|
|
770
|
+
|
|
771
|
+
@cached_property
|
|
772
|
+
def accountingStandardsApplied(self) -> str | None:
|
|
773
|
+
return next(iter(self._getDimensionValues(CONCEPT_ACCOUNTING_STANDARDS_APPLIED, CONCEPT_ACCOUNTING_STANDARDS_DIMENSION)), None)
|
|
774
|
+
|
|
775
|
+
@cached_property
|
|
776
|
+
def applicableLegislation(self) -> str | None:
|
|
777
|
+
return next(iter(self._getDimensionValues(CONCEPT_APPLICABLE_LEGISLATION, CONCEPT_APPLICABLE_LEGISLATION_DIMENSION)), None)
|
|
778
|
+
|
|
779
|
+
@cached_property
|
|
780
|
+
def isEntityDormant(self) -> bool:
|
|
781
|
+
facts = self._getFacts(CONCEPT_ENTITY_DORMANT)
|
|
782
|
+
if not facts:
|
|
783
|
+
return False
|
|
784
|
+
return all(not f.isNil and isinstance(f.xValue, bool) and f.xValue for f in facts)
|
|
785
|
+
|
|
786
|
+
@cached_property
|
|
787
|
+
def legalFormEntity(self) -> str | None:
|
|
788
|
+
return next(iter(self._getDimensionValues(CONCEPT_LEGAL_FORM_ENTIY, CONCEPT_LEGAL_FORM_ENTIY_DIMENSION)), None)
|
|
789
|
+
|
|
790
|
+
@cached_property
|
|
791
|
+
def scopeAccounts(self) -> str | None:
|
|
792
|
+
return next(iter(self._getDimensionValues(CONCEPT_SCOPE_ACCOUNTS, CONCEPT_SCOPE_ACCOUNTS_DIMENSION)), None)
|
|
793
|
+
|
|
794
|
+
def _getDimensionValues(self, conceptLocalName: str, dimensionLocalName: str) -> Iterable[str]:
|
|
795
|
+
facts = self._getFacts(conceptLocalName)
|
|
796
|
+
for fact in facts:
|
|
797
|
+
if not self._checkValidFact(fact):
|
|
798
|
+
continue
|
|
799
|
+
for qname, value in fact.context.qnameDims.items():
|
|
800
|
+
if value.xValid < VALID:
|
|
801
|
+
continue
|
|
802
|
+
if qname.localName == dimensionLocalName:
|
|
803
|
+
yield cast(str, value.xValue.localName)
|
|
804
|
+
|
|
805
|
+
def validate(self) -> None:
|
|
806
|
+
"""
|
|
807
|
+
Find the appropriate set of validations to run on this document and runs them.
|
|
808
|
+
"""
|
|
809
|
+
if self.accountStatus in {
|
|
810
|
+
AccountStatus.AUDIT_EXEMPT_NO_REPORT.value,
|
|
811
|
+
AccountStatus.AUDIT_EXEMPT_WITH_REPORT.value,
|
|
812
|
+
}:
|
|
813
|
+
if self.isEntityDormant:
|
|
814
|
+
if self.legalFormEntity == CONCEPT_LLP:
|
|
815
|
+
self.validateUnauditedDormantLLP()
|
|
816
|
+
else:
|
|
817
|
+
self.validateUnauditedDormantCompany()
|
|
818
|
+
elif self.accountingStandardsApplied == CONCEPT_MICRO_ENTITIES:
|
|
819
|
+
if self.legalFormEntity == CONCEPT_LLP:
|
|
820
|
+
self.validateUnauditedMicroLLP()
|
|
821
|
+
else:
|
|
822
|
+
self.validateUnauditedMicroCompany()
|
|
823
|
+
elif self.accountsType == CONCEPT_ABRIDGED_ACCOUNTS:
|
|
824
|
+
if self.legalFormEntity == CONCEPT_LLP:
|
|
825
|
+
self.validateUnauditedLLPAbridgedAccounts()
|
|
826
|
+
else:
|
|
827
|
+
self.validateUnauditedCompanyAbridgedAccounts()
|
|
828
|
+
elif self.accountsType == CONCEPT_ABBREVIATED_ACCOUNTS:
|
|
829
|
+
if self.legalFormEntity == CONCEPT_LLP:
|
|
830
|
+
self.validateUnauditedLLPAbbreviatedAccounts()
|
|
831
|
+
else:
|
|
832
|
+
self.validateUnauditedCompanyAbbreviatedAccounts()
|
|
833
|
+
elif self.scopeAccounts in {
|
|
834
|
+
ScopeAccounts.GROUP_ONLY.value,
|
|
835
|
+
ScopeAccounts.CONSOLIDATED_GROUP.value,
|
|
836
|
+
}:
|
|
837
|
+
if self.legalFormEntity == CONCEPT_LLP:
|
|
838
|
+
self.validateUnauditedLLPGroupAccounts()
|
|
839
|
+
else:
|
|
840
|
+
self.validateUnauditedCompanyGroupAccounts()
|
|
841
|
+
else:
|
|
842
|
+
if self.legalFormEntity == CONCEPT_LLP and self.applicableLegislation == CONCEPT_SMALL_COMPANY_REGIME_FOR_ACCOUNTS :
|
|
843
|
+
self.validateUnauditedLLPFullAccounts()
|
|
844
|
+
else:
|
|
845
|
+
self.validateUnauditedSmallCompanyFullAccounts()
|
|
846
|
+
elif self.accountStatus == CONCEPT_AUDITED:
|
|
847
|
+
if self.accountsType == CONCEPT_ABRIDGED_ACCOUNTS:
|
|
848
|
+
if self.legalFormEntity == CONCEPT_LLP:
|
|
849
|
+
self.validateAuditedAbridgedLLPAccounts()
|
|
850
|
+
else:
|
|
851
|
+
self.validateAuditedCompanyAbridgedAccounts()
|
|
852
|
+
elif self.applicableLegislation == CONCEPT_SMALL_COMPANY_REGIME_FOR_ACCOUNTS:
|
|
853
|
+
if self.legalFormEntity == CONCEPT_LLP:
|
|
854
|
+
self.validateAuditedSmallLLP()
|
|
855
|
+
else:
|
|
856
|
+
self.validateAuditedSmallCompany()
|
|
857
|
+
elif self.applicableLegislation == CONCEPT_MEDIUM_COMPANIES_REGIME_FOR_ACCOUNTS:
|
|
858
|
+
if self.legalFormEntity == CONCEPT_LLP:
|
|
859
|
+
self.validateAuditedMediumLLP()
|
|
860
|
+
else:
|
|
861
|
+
self.validateAuditedMediumCompany()
|
|
862
|
+
elif self.accountingStandardsApplied == CONCEPT_MICRO_ENTITIES:
|
|
863
|
+
if self.legalFormEntity == CONCEPT_LLP:
|
|
864
|
+
self.validateAuditedMicroLLP()
|
|
865
|
+
else:
|
|
866
|
+
self.validateAuditedMicroCompany()
|
|
867
|
+
elif not (self.scopeAccounts in {
|
|
868
|
+
ScopeAccounts.GROUP_ONLY.value,
|
|
869
|
+
ScopeAccounts.CONSOLIDATED_GROUP.value,
|
|
870
|
+
} or self.accountsType == CONCEPT_ABRIDGED_ACCOUNTS or self.applicableLegislation == CONCEPT_SMALL_COMPANY_REGIME_FOR_ACCOUNTS):
|
|
871
|
+
if self.legalFormEntity == CONCEPT_LLP:
|
|
872
|
+
self.validateAuditedOtherLLP()
|
|
873
|
+
else:
|
|
874
|
+
self.validateAuditedOtherCompany()
|
|
875
|
+
elif self.scopeAccounts in {
|
|
876
|
+
ScopeAccounts.GROUP_ONLY.value,
|
|
877
|
+
ScopeAccounts.CONSOLIDATED_GROUP.value,
|
|
878
|
+
}:
|
|
879
|
+
if self.legalFormEntity == CONCEPT_LLP:
|
|
880
|
+
self.validateAuditedGroupLLP()
|
|
881
|
+
else:
|
|
882
|
+
self.validateAuditedGroupCompany()
|
|
883
|
+
|
|
884
|
+
def validateCharities(self) -> None:
|
|
885
|
+
"""
|
|
886
|
+
Find the appropriate set of validations to run on this document and runs them.
|
|
887
|
+
"""
|
|
888
|
+
if self._getAndCheckValidFacts(CHARITY_REGISTRATION_NUMBERS):
|
|
889
|
+
if self.accountStatus == CONCEPT_AUDITED:
|
|
890
|
+
if self.applicableLegislation == CONCEPT_SMALL_COMPANY_REGIME_FOR_ACCOUNTS:
|
|
891
|
+
if self.legalFormEntity != CONCEPT_LLP:
|
|
892
|
+
self.validateAuditedSmallCharity()
|
|
893
|
+
|
|
894
|
+
elif not (self.scopeAccounts in {
|
|
895
|
+
ScopeAccounts.GROUP_ONLY.value,
|
|
896
|
+
ScopeAccounts.CONSOLIDATED_GROUP.value,
|
|
897
|
+
} or self.accountsType == CONCEPT_ABRIDGED_ACCOUNTS):
|
|
898
|
+
self.validateAuditedOtherCharity()
|
|
899
|
+
elif self.accountStatus in {
|
|
900
|
+
AccountStatus.AUDIT_EXEMPT_NO_REPORT.value,
|
|
901
|
+
AccountStatus.AUDIT_EXEMPT_WITH_REPORT.value,
|
|
902
|
+
}:
|
|
903
|
+
if self.isEntityDormant:
|
|
904
|
+
self.validateUnauditedDormantCharity()
|
|
905
|
+
else:
|
|
906
|
+
self.validateUnauditedCharitySmallAndGroupAccounts()
|
|
907
|
+
|
|
908
|
+
def validateAuditedAbridgedLLPAccounts(self) -> None:
|
|
909
|
+
"""
|
|
910
|
+
Checks conditions applicable to audited abridged LLP accounts:
|
|
911
|
+
Lp.Abrid, lp.Audit, and Lp.Smlp
|
|
912
|
+
"""
|
|
913
|
+
result = self._evaluateCode(LP_ABRID)
|
|
914
|
+
if not result.success:
|
|
915
|
+
self._errorOnMissingFactText(LP_ABRID, result)
|
|
916
|
+
result = self._evaluateCode(LP_SM_LP)
|
|
917
|
+
if not result.success:
|
|
918
|
+
self._errorOnMissingFactText(LP_SM_LP, result)
|
|
919
|
+
result = self._evaluateCode(LP_AUDIT)
|
|
920
|
+
if not result.success:
|
|
921
|
+
self._yieldErrorOrWarning(LP_AUDIT, result)
|
|
922
|
+
|
|
923
|
+
def validateAuditedCompanyAbridgedAccounts(self) -> None:
|
|
924
|
+
"""
|
|
925
|
+
Checks conditions applicable to audited company abridged accounts:
|
|
926
|
+
Co.Abrid, Co.Audit, and Co.SmCo
|
|
927
|
+
"""
|
|
928
|
+
result = self._evaluateCode(CO_ABRID)
|
|
929
|
+
if not result.success:
|
|
930
|
+
self._errorOnMissingFactText(CO_ABRID, result)
|
|
931
|
+
result = self._evaluateCode(CO_SM_CO)
|
|
932
|
+
if not result.success:
|
|
933
|
+
self._errorOnMissingFactText(CO_SM_CO, result)
|
|
934
|
+
result = self._evaluateCode(CO_AUDIT)
|
|
935
|
+
if not result.success:
|
|
936
|
+
self._yieldErrorOrWarning(CO_AUDIT, result)
|
|
937
|
+
|
|
938
|
+
def validateAuditedMediumCompany(self) -> None:
|
|
939
|
+
"""
|
|
940
|
+
Checks conditions applicable to audited medium company filings:
|
|
941
|
+
Co.Audit, and Co.MedCo
|
|
942
|
+
"""
|
|
943
|
+
result = self._evaluateCode(CO_MED_CO)
|
|
944
|
+
if not result.success:
|
|
945
|
+
self._yieldErrorOrWarning(CO_MED_CO, result)
|
|
946
|
+
result = self._evaluateCode(CO_AUDIT)
|
|
947
|
+
if not result.success:
|
|
948
|
+
self._yieldErrorOrWarning(CO_AUDIT, result)
|
|
949
|
+
|
|
950
|
+
def validateAuditedMediumLLP(self) -> None:
|
|
951
|
+
"""
|
|
952
|
+
Checks conditions applicable to audited medium llp filings:
|
|
953
|
+
Lp.Audit, and Lp.MedLp
|
|
954
|
+
"""
|
|
955
|
+
result = self._evaluateCode(LP_MED_LP)
|
|
956
|
+
if not result.success:
|
|
957
|
+
self._yieldErrorOrWarning(LP_MED_LP, result)
|
|
958
|
+
result = self._evaluateCode(LP_AUDIT)
|
|
959
|
+
if not result.success:
|
|
960
|
+
self._yieldErrorOrWarning(LP_AUDIT, result)
|
|
961
|
+
|
|
962
|
+
def validateAuditedMicroCompany(self) -> None:
|
|
963
|
+
"""
|
|
964
|
+
Checks conditions applicable to audited micro company filings:
|
|
965
|
+
Co.Micro and (Co.SmCo or Co.ProfLoss)
|
|
966
|
+
"""
|
|
967
|
+
result = self._evaluateCode(CO_MICRO)
|
|
968
|
+
if not result.success:
|
|
969
|
+
self._errorOnMissingFactText(CO_MICRO, result)
|
|
970
|
+
result = self._evaluateCode(CO_SM_CO)
|
|
971
|
+
if not result.success:
|
|
972
|
+
pLResult = self._evaluateCode(CO_PROF_LOSS)
|
|
973
|
+
if not pLResult.success:
|
|
974
|
+
self._errorOnMissingFactText(CO_SM_CO, result)
|
|
975
|
+
self._yieldErrorOrWarning(CO_PROF_LOSS, pLResult)
|
|
976
|
+
|
|
977
|
+
def validateAuditedMicroLLP(self) -> None:
|
|
978
|
+
"""
|
|
979
|
+
Checks conditions applicable to audited micro LLP filings:
|
|
980
|
+
LP.Micro and (Lp.SmLp or Lp.ProfLoss)
|
|
981
|
+
"""
|
|
982
|
+
result = self._evaluateCode(LP_MICRO)
|
|
983
|
+
if not result.success:
|
|
984
|
+
self._errorOnMissingFactText(LP_MICRO, result)
|
|
985
|
+
result = self._evaluateCode(LP_SM_LP)
|
|
986
|
+
if not result.success:
|
|
987
|
+
pLResult = self._evaluateCode(LP_PROF_LOSS)
|
|
988
|
+
if not pLResult.success:
|
|
989
|
+
self._errorOnMissingFactText(LP_SM_LP, result)
|
|
990
|
+
self._yieldErrorOrWarning(LP_PROF_LOSS, pLResult)
|
|
991
|
+
|
|
992
|
+
def validateAuditedOtherCharity(self) -> None:
|
|
993
|
+
"""
|
|
994
|
+
Checks conditions applicable to audited other charity filings:
|
|
995
|
+
Char.DirReport, Char.Audit, and Char.CharFunds
|
|
996
|
+
"""
|
|
997
|
+
result = self._evaluateCode(CH_DIR_REP)
|
|
998
|
+
if not result.success:
|
|
999
|
+
self._yieldErrorOrWarning(CH_DIR_REP, result)
|
|
1000
|
+
result = self._evaluateCode(CH_AUDIT)
|
|
1001
|
+
if not result.success:
|
|
1002
|
+
self._yieldErrorOrWarning(CH_AUDIT, result)
|
|
1003
|
+
result = self._evaluateCode(CH_CHAR_FUND)
|
|
1004
|
+
if not result.success:
|
|
1005
|
+
self._yieldErrorOrWarning(CH_CHAR_FUND, result)
|
|
1006
|
+
|
|
1007
|
+
def validateAuditedOtherCompany(self) -> None:
|
|
1008
|
+
"""
|
|
1009
|
+
Checks conditions applicable to audited other company filings:
|
|
1010
|
+
Co.Audit, Co.DirReport, Co.QualAudit, and Co.ProfLoss
|
|
1011
|
+
"""
|
|
1012
|
+
result = self._evaluateCode(CO_AUDIT)
|
|
1013
|
+
if not result.success:
|
|
1014
|
+
self._errorOnMissingFactText(CO_AUDIT, result)
|
|
1015
|
+
result = self._evaluateCode(CO_DIR_REP)
|
|
1016
|
+
if not result.success:
|
|
1017
|
+
self._yieldErrorOrWarning(CO_DIR_REP, result)
|
|
1018
|
+
result = self._evaluateCode(CO_QUAL_AUDIT)
|
|
1019
|
+
if not result.success:
|
|
1020
|
+
self._yieldErrorOrWarning(CO_QUAL_AUDIT, result)
|
|
1021
|
+
result = self._evaluateCode(CO_PROF_LOSS)
|
|
1022
|
+
if not result.success:
|
|
1023
|
+
self._yieldErrorOrWarning(CO_PROF_LOSS, result)
|
|
1024
|
+
|
|
1025
|
+
def validateAuditedOtherLLP(self) -> None:
|
|
1026
|
+
"""
|
|
1027
|
+
Checks conditions applicable to audited other LLP filings:
|
|
1028
|
+
Lp.Audit, Lp.QualAudit and Lp.ProfLoss
|
|
1029
|
+
"""
|
|
1030
|
+
result = self._evaluateCode(LP_AUDIT)
|
|
1031
|
+
if not result.success:
|
|
1032
|
+
self._errorOnMissingFactText(LP_AUDIT, result)
|
|
1033
|
+
result = self._evaluateCode(LP_QUAL_AUDIT)
|
|
1034
|
+
if not result.success:
|
|
1035
|
+
self._yieldErrorOrWarning(LP_QUAL_AUDIT, result)
|
|
1036
|
+
result = self._evaluateCode(LP_PROF_LOSS)
|
|
1037
|
+
if not result.success:
|
|
1038
|
+
self._yieldErrorOrWarning(LP_PROF_LOSS, result)
|
|
1039
|
+
|
|
1040
|
+
def validateAuditedSmallCharity(self) -> None:
|
|
1041
|
+
"""
|
|
1042
|
+
Checks conditions applicable to audited small company filings:
|
|
1043
|
+
Char.Audit and Co.SmCo
|
|
1044
|
+
"""
|
|
1045
|
+
result = self._evaluateCode(CO_SM_CO)
|
|
1046
|
+
if not result.success:
|
|
1047
|
+
self._errorOnMissingFactText(CO_SM_CO, result)
|
|
1048
|
+
result = self._evaluateCode(CH_AUDIT)
|
|
1049
|
+
if not result.success:
|
|
1050
|
+
self._yieldErrorOrWarning(CH_AUDIT, result)
|
|
1051
|
+
|
|
1052
|
+
def validateAuditedSmallCompany(self) -> None:
|
|
1053
|
+
"""
|
|
1054
|
+
Checks conditions applicable to audited small company filings:
|
|
1055
|
+
Co.Audit and Co.SmCo
|
|
1056
|
+
"""
|
|
1057
|
+
result = self._evaluateCode(CO_SM_CO)
|
|
1058
|
+
if not result.success:
|
|
1059
|
+
self._errorOnMissingFactText(CO_SM_CO, result)
|
|
1060
|
+
result = self._evaluateCode(CO_AUDIT)
|
|
1061
|
+
if not result.success:
|
|
1062
|
+
self._yieldErrorOrWarning(CO_AUDIT, result)
|
|
1063
|
+
|
|
1064
|
+
def validateAuditedSmallLLP(self) -> None:
|
|
1065
|
+
"""
|
|
1066
|
+
Checks conditions applicable to audited small LLP filings:
|
|
1067
|
+
Lp.Audit and Lp.Smlp
|
|
1068
|
+
"""
|
|
1069
|
+
result = self._evaluateCode(LP_SM_LP)
|
|
1070
|
+
if not result.success:
|
|
1071
|
+
self._errorOnMissingFactText(LP_SM_LP, result)
|
|
1072
|
+
result = self._evaluateCode(LP_AUDIT)
|
|
1073
|
+
if not result.success:
|
|
1074
|
+
self._yieldErrorOrWarning(LP_AUDIT, result)
|
|
1075
|
+
|
|
1076
|
+
def validateUnauditedCharitySmallAndGroupAccounts(self) -> None:
|
|
1077
|
+
"""
|
|
1078
|
+
Checks conditions applicable to unaudited small charities or unaudited charity group accounts:
|
|
1079
|
+
Co.Sec777, Co.AuditNR, Char.DirResp, and Co.SmCo
|
|
1080
|
+
"""
|
|
1081
|
+
result = self._evaluateCode(CO_SEC_477)
|
|
1082
|
+
if not result.success:
|
|
1083
|
+
self._errorOnMissingFactText(CO_SEC_477, result)
|
|
1084
|
+
result = self._evaluateCode(CO_AUDIT_NR)
|
|
1085
|
+
if not result.success:
|
|
1086
|
+
self._errorOnMissingFactText(CO_AUDIT_NR, result)
|
|
1087
|
+
result = self._evaluateCode(CH_DIR_RESP)
|
|
1088
|
+
if not result.success:
|
|
1089
|
+
self._yieldErrorOrWarning(CH_DIR_RESP, result)
|
|
1090
|
+
result = self._evaluateCode(CO_SM_CO)
|
|
1091
|
+
if not result.success:
|
|
1092
|
+
self._errorOnMissingFactText(CO_SM_CO, result)
|
|
1093
|
+
|
|
1094
|
+
def validateUnauditedCompanyAbbreviatedAccounts(self) -> None:
|
|
1095
|
+
"""
|
|
1096
|
+
Checks conditions applicable to unaudited company abbreviated accounts:
|
|
1097
|
+
Co.Sec777, Co.AuditNR, Co.DirResp, and Co.SmCo
|
|
1098
|
+
"""
|
|
1099
|
+
result = self._evaluateCode(CO_SEC_477)
|
|
1100
|
+
if not result.success:
|
|
1101
|
+
self._errorOnMissingFactText(CO_SEC_477, result)
|
|
1102
|
+
result = self._evaluateCode(CO_AUDIT_NR)
|
|
1103
|
+
if not result.success:
|
|
1104
|
+
self._errorOnMissingFactText(CO_AUDIT_NR, result)
|
|
1105
|
+
result = self._evaluateCode(CO_DIR_RESP)
|
|
1106
|
+
if not result.success:
|
|
1107
|
+
self._errorOnMissingFactText(CO_DIR_RESP, result)
|
|
1108
|
+
result = self._evaluateCode(CO_SM_CO)
|
|
1109
|
+
if not result.success:
|
|
1110
|
+
self._errorOnMissingFactText(CO_SM_CO, result)
|
|
1111
|
+
|
|
1112
|
+
def validateUnauditedCompanyAbridgedAccounts(self) -> None:
|
|
1113
|
+
"""
|
|
1114
|
+
Checks conditions applicable to unaudited company abridged accounts:
|
|
1115
|
+
Co.Sec777, Co.AuditNR, Co.DirResp, Co.SmCo, Co.Abrid
|
|
1116
|
+
"""
|
|
1117
|
+
result = self._evaluateCode(CO_SEC_477)
|
|
1118
|
+
if not result.success:
|
|
1119
|
+
self._errorOnMissingFactText(CO_SEC_477, result)
|
|
1120
|
+
result = self._evaluateCode(CO_AUDIT_NR)
|
|
1121
|
+
if not result.success:
|
|
1122
|
+
self._errorOnMissingFactText(CO_AUDIT_NR, result)
|
|
1123
|
+
result = self._evaluateCode(CO_DIR_RESP)
|
|
1124
|
+
if not result.success:
|
|
1125
|
+
self._errorOnMissingFactText(CO_DIR_RESP, result)
|
|
1126
|
+
result = self._evaluateCode(CO_SM_CO)
|
|
1127
|
+
if not result.success:
|
|
1128
|
+
self._errorOnMissingFactText(CO_SM_CO, result)
|
|
1129
|
+
result = self._evaluateCode(CO_ABRID)
|
|
1130
|
+
if not result.success:
|
|
1131
|
+
self._errorOnMissingFactText(CO_ABRID, result)
|
|
1132
|
+
|
|
1133
|
+
def validateUnauditedCompanyGroupAccounts(self) -> None:
|
|
1134
|
+
"""
|
|
1135
|
+
Checks conditions applicable to unaudited company abridged accounts:
|
|
1136
|
+
Co.Sec477, Co.AuditNR, Co.DirResp, and Co.SmCo
|
|
1137
|
+
"""
|
|
1138
|
+
result = self._evaluateCode(CO_SEC_477)
|
|
1139
|
+
if not result.success:
|
|
1140
|
+
self._errorOnMissingFactText(CO_SEC_477, result)
|
|
1141
|
+
result = self._evaluateCode(CO_AUDIT_NR)
|
|
1142
|
+
if not result.success:
|
|
1143
|
+
self._errorOnMissingFactText(CO_AUDIT_NR, result)
|
|
1144
|
+
result = self._evaluateCode(CO_DIR_RESP)
|
|
1145
|
+
if not result.success:
|
|
1146
|
+
self._errorOnMissingFactText(CO_DIR_RESP, result)
|
|
1147
|
+
result = self._evaluateCode(CO_SM_CO)
|
|
1148
|
+
if not result.success:
|
|
1149
|
+
self._errorOnMissingFactText(CO_SM_CO, result)
|
|
1150
|
+
|
|
1151
|
+
def validateUnauditedDormantCharity(self) -> None:
|
|
1152
|
+
"""
|
|
1153
|
+
Checks conditions applicable to unaudited dormant charities:
|
|
1154
|
+
Co.Sec480 and Co.AuditNR and Char.DirResp and (Char.DirReport or Co.SmCo).
|
|
1155
|
+
"""
|
|
1156
|
+
result = self._evaluateCode(CO_SEC_480)
|
|
1157
|
+
if not result.success:
|
|
1158
|
+
self._errorOnMissingFactText(CO_SEC_480, result)
|
|
1159
|
+
result = self._evaluateCode(CO_AUDIT_NR)
|
|
1160
|
+
if not result.success:
|
|
1161
|
+
self._errorOnMissingFactText(CO_AUDIT_NR, result)
|
|
1162
|
+
result = self._evaluateCode(CH_DIR_RESP)
|
|
1163
|
+
if not result.success:
|
|
1164
|
+
self._errorOnMissingFactText(CH_DIR_RESP, result)
|
|
1165
|
+
|
|
1166
|
+
result = self._evaluateCode(CH_DIR_REP)
|
|
1167
|
+
if not result.success:
|
|
1168
|
+
smCoResult = self._evaluateCode(CO_SM_CO)
|
|
1169
|
+
if not smCoResult.success:
|
|
1170
|
+
self._yieldErrorOrWarning(CH_DIR_REP, result)
|
|
1171
|
+
self._errorOnMissingFactText(CO_SM_CO, smCoResult)
|
|
1172
|
+
|
|
1173
|
+
def validateUnauditedDormantCompany(self) -> None:
|
|
1174
|
+
"""
|
|
1175
|
+
Checks conditions applicable to unaudited dormant companies:
|
|
1176
|
+
Co.Sec480 and Co.AuditNR and Co.DirResp and (Co.Micro or Co.SmCo).
|
|
1177
|
+
"""
|
|
1178
|
+
result = self._evaluateCode(CO_SEC_480)
|
|
1179
|
+
if not result.success:
|
|
1180
|
+
self._errorOnMissingFactText(CO_SEC_480, result)
|
|
1181
|
+
result = self._evaluateCode(CO_AUDIT_NR)
|
|
1182
|
+
if not result.success:
|
|
1183
|
+
self._errorOnMissingFactText(CO_AUDIT_NR, result)
|
|
1184
|
+
result = self._evaluateCode(CO_DIR_RESP)
|
|
1185
|
+
if not result.success:
|
|
1186
|
+
self._errorOnMissingFactText(CO_DIR_RESP, result)
|
|
1187
|
+
|
|
1188
|
+
result = self._evaluateCode(CO_MICRO)
|
|
1189
|
+
if not result.success:
|
|
1190
|
+
smCoResult = self._evaluateCode(CO_SM_CO)
|
|
1191
|
+
if not smCoResult.success:
|
|
1192
|
+
self._errorOnMissingFactText(CO_MICRO, result)
|
|
1193
|
+
self._errorOnMissingFactText(CO_SM_CO, smCoResult)
|
|
1194
|
+
|
|
1195
|
+
def validateUnauditedDormantLLP(self) -> None:
|
|
1196
|
+
"""
|
|
1197
|
+
Checks conditions applicable to unaudited dormant LLPs:
|
|
1198
|
+
LP.MemResp and LP.Sec480 and LP.SmLP).
|
|
1199
|
+
"""
|
|
1200
|
+
result = self._evaluateCode(LP_MEM_RESP)
|
|
1201
|
+
if not result.success:
|
|
1202
|
+
self._errorOnMissingFactText(LP_MEM_RESP, result)
|
|
1203
|
+
result = self._evaluateCode(LP_SEC_480)
|
|
1204
|
+
if not result.success:
|
|
1205
|
+
self._errorOnMissingFactText(LP_SEC_480, result)
|
|
1206
|
+
result = self._evaluateCode(LP_SM_LP)
|
|
1207
|
+
if not result.success:
|
|
1208
|
+
self._errorOnMissingFactText(LP_SM_LP, result)
|
|
1209
|
+
|
|
1210
|
+
def validateUnauditedLLPAbbreviatedAccounts(self) -> None:
|
|
1211
|
+
"""
|
|
1212
|
+
Checks conditions applicable to unaudited LLP abbreviated accounts:
|
|
1213
|
+
Lp.Sec777, LP.MemResp, and Lp.SmLp
|
|
1214
|
+
"""
|
|
1215
|
+
result = self._evaluateCode(LP_SEC_477)
|
|
1216
|
+
if not result.success:
|
|
1217
|
+
self._errorOnMissingFactText(LP_SEC_477, result)
|
|
1218
|
+
result = self._evaluateCode(LP_MEM_RESP)
|
|
1219
|
+
if not result.success:
|
|
1220
|
+
self._errorOnMissingFactText(LP_MEM_RESP, result)
|
|
1221
|
+
result = self._evaluateCode(LP_SM_LP)
|
|
1222
|
+
if not result.success:
|
|
1223
|
+
self._errorOnMissingFactText(LP_SM_LP, result)
|
|
1224
|
+
|
|
1225
|
+
def validateUnauditedLLPAbridgedAccounts(self) -> None:
|
|
1226
|
+
"""
|
|
1227
|
+
Checks conditions applicable to unaudited LLP abridged accounts:
|
|
1228
|
+
Lp.Sec777, LP.MemResp, Lp.SmLp, and Lp.Abrid
|
|
1229
|
+
"""
|
|
1230
|
+
result = self._evaluateCode(LP_SEC_477)
|
|
1231
|
+
if not result.success:
|
|
1232
|
+
self._errorOnMissingFactText(LP_SEC_477, result)
|
|
1233
|
+
result = self._evaluateCode(LP_MEM_RESP)
|
|
1234
|
+
if not result.success:
|
|
1235
|
+
self._errorOnMissingFactText(LP_MEM_RESP, result)
|
|
1236
|
+
result = self._evaluateCode(LP_SM_LP)
|
|
1237
|
+
if not result.success:
|
|
1238
|
+
self._errorOnMissingFactText(LP_SM_LP, result)
|
|
1239
|
+
result = self._evaluateCode(LP_ABRID)
|
|
1240
|
+
if not result.success:
|
|
1241
|
+
self._errorOnMissingFactText(LP_ABRID, result)
|
|
1242
|
+
|
|
1243
|
+
def validateUnauditedLLPFullAccounts(self) -> None:
|
|
1244
|
+
"""
|
|
1245
|
+
Checks conditions applicable to unaudited LLP full accounts:
|
|
1246
|
+
Lp.Sec777, LP.MemResp, and Lp.SmLp
|
|
1247
|
+
"""
|
|
1248
|
+
result = self._evaluateCode(LP_SEC_477)
|
|
1249
|
+
if not result.success:
|
|
1250
|
+
self._errorOnMissingFactText(LP_SEC_477, result)
|
|
1251
|
+
result = self._evaluateCode(LP_MEM_RESP)
|
|
1252
|
+
if not result.success:
|
|
1253
|
+
self._errorOnMissingFactText(LP_MEM_RESP, result)
|
|
1254
|
+
result = self._evaluateCode(LP_SM_LP)
|
|
1255
|
+
if not result.success:
|
|
1256
|
+
self._errorOnMissingFactText(LP_SM_LP, result)
|
|
1257
|
+
|
|
1258
|
+
def validateUnauditedLLPGroupAccounts(self) -> None:
|
|
1259
|
+
"""
|
|
1260
|
+
Checks conditions applicable to unaudited LLP group accounts:
|
|
1261
|
+
Lp.Sec777, LP.MemResp, and Lp.SmLp
|
|
1262
|
+
"""
|
|
1263
|
+
result = self._evaluateCode(LP_SEC_477)
|
|
1264
|
+
if not result.success:
|
|
1265
|
+
self._errorOnMissingFactText(LP_SEC_477, result)
|
|
1266
|
+
result = self._evaluateCode(LP_MEM_RESP)
|
|
1267
|
+
if not result.success:
|
|
1268
|
+
self._errorOnMissingFactText(LP_MEM_RESP, result)
|
|
1269
|
+
result = self._evaluateCode(LP_SM_LP)
|
|
1270
|
+
if not result.success:
|
|
1271
|
+
self._errorOnMissingFactText(LP_SM_LP, result)
|
|
1272
|
+
|
|
1273
|
+
def validateUnauditedMicroCompany(self) -> None:
|
|
1274
|
+
"""
|
|
1275
|
+
Checks conditions applicable to unaudited micro companies:
|
|
1276
|
+
Co.Sec477 and Co.AuditNR and Co.DirResp and Co.Micro.
|
|
1277
|
+
"""
|
|
1278
|
+
result = self._evaluateCode(CO_SEC_477)
|
|
1279
|
+
if not result.success:
|
|
1280
|
+
self._errorOnMissingFactText(CO_SEC_477, result)
|
|
1281
|
+
result = self._evaluateCode(CO_AUDIT_NR)
|
|
1282
|
+
if not result.success:
|
|
1283
|
+
self._errorOnMissingFactText(CO_AUDIT_NR, result)
|
|
1284
|
+
result = self._evaluateCode(CO_DIR_RESP)
|
|
1285
|
+
if not result.success:
|
|
1286
|
+
self._errorOnMissingFactText(CO_DIR_RESP, result)
|
|
1287
|
+
result = self._evaluateCode(CO_MICRO)
|
|
1288
|
+
if not result.success:
|
|
1289
|
+
self._errorOnMissingFactText(CO_MICRO, result)
|
|
1290
|
+
|
|
1291
|
+
def validateUnauditedMicroLLP(self) -> None:
|
|
1292
|
+
"""
|
|
1293
|
+
Checks conditions applicable to unaudited micro companies:
|
|
1294
|
+
Lp.Sec477 and Lp.MemResp and Lp.Micro.
|
|
1295
|
+
"""
|
|
1296
|
+
result = self._evaluateCode(LP_SEC_477)
|
|
1297
|
+
if not result.success:
|
|
1298
|
+
self._errorOnMissingFactText(LP_SEC_477, result)
|
|
1299
|
+
result = self._evaluateCode(LP_MEM_RESP)
|
|
1300
|
+
if not result.success:
|
|
1301
|
+
self._errorOnMissingFactText(LP_MEM_RESP, result)
|
|
1302
|
+
result = self._evaluateCode(LP_MICRO)
|
|
1303
|
+
if not result.success:
|
|
1304
|
+
self._errorOnMissingFactText(LP_MICRO, result)
|
|
1305
|
+
|
|
1306
|
+
def validateUnauditedSmallCompanyFullAccounts(self) -> None:
|
|
1307
|
+
"""
|
|
1308
|
+
Checks conditions applicable to unaudited small company full accounts:
|
|
1309
|
+
Co.Sec477, Co.AuditNR, Co.DirResp, and Co.SmCo
|
|
1310
|
+
"""
|
|
1311
|
+
result = self._evaluateCode(CO_SEC_477)
|
|
1312
|
+
if not result.success:
|
|
1313
|
+
self._errorOnMissingFactText(CO_SEC_477, result)
|
|
1314
|
+
result = self._evaluateCode(CO_AUDIT_NR)
|
|
1315
|
+
if not result.success:
|
|
1316
|
+
self._errorOnMissingFactText(CO_AUDIT_NR, result)
|
|
1317
|
+
result = self._evaluateCode(CO_DIR_RESP)
|
|
1318
|
+
if not result.success:
|
|
1319
|
+
self._errorOnMissingFactText(CO_DIR_RESP, result)
|
|
1320
|
+
result = self._evaluateCode(CO_SM_CO)
|
|
1321
|
+
if not result.success:
|
|
1322
|
+
self._errorOnMissingFactText(CO_SM_CO, result)
|
|
1323
|
+
|
|
1324
|
+
def validateAuditedGroupCompany(self) -> None:
|
|
1325
|
+
"""
|
|
1326
|
+
Checks conditions applicable to audited group companies:
|
|
1327
|
+
Co.Audit AND ((Co.DirReport AND Co.ProfLoss AND Co.Group) OR Co.SmCo).
|
|
1328
|
+
"""
|
|
1329
|
+
result = self._evaluateCode(CO_AUDIT)
|
|
1330
|
+
if not result.success:
|
|
1331
|
+
self._yieldErrorOrWarning(CO_AUDIT, result)
|
|
1332
|
+
|
|
1333
|
+
result = self._evaluateCode(CO_SM_CO)
|
|
1334
|
+
if not result.success:
|
|
1335
|
+
failedOr = False
|
|
1336
|
+
dirRepResult = self._evaluateCode(CO_DIR_REP)
|
|
1337
|
+
if not dirRepResult.success:
|
|
1338
|
+
self._yieldErrorOrWarning(CO_DIR_REP, dirRepResult)
|
|
1339
|
+
failedOr = True
|
|
1340
|
+
profLossResult = self._evaluateCode(CO_PROF_LOSS)
|
|
1341
|
+
if not profLossResult.success:
|
|
1342
|
+
self._yieldErrorOrWarning(CO_PROF_LOSS, profLossResult)
|
|
1343
|
+
failedOr = True
|
|
1344
|
+
groupResult = self._evaluateCode(CO_GROUP)
|
|
1345
|
+
if not groupResult.success:
|
|
1346
|
+
self._yieldErrorOrWarning(CO_GROUP, groupResult)
|
|
1347
|
+
failedOr = True
|
|
1348
|
+
if failedOr:
|
|
1349
|
+
self._errorOnMissingFactText(CO_SM_CO, result)
|
|
1350
|
+
|
|
1351
|
+
def validateAuditedGroupLLP(self) -> None:
|
|
1352
|
+
"""
|
|
1353
|
+
Checks conditions applicable to audited group companies:
|
|
1354
|
+
LP.Audit AND ((LP.ProfLoss+LP.Group) OR LP.SmLp)
|
|
1355
|
+
"""
|
|
1356
|
+
result = self._evaluateCode(LP_AUDIT)
|
|
1357
|
+
if not result.success:
|
|
1358
|
+
self._yieldErrorOrWarning(LP_AUDIT, result)
|
|
1359
|
+
|
|
1360
|
+
result = self._evaluateCode(LP_SM_LP)
|
|
1361
|
+
if not result.success:
|
|
1362
|
+
failedOr = False
|
|
1363
|
+
profLossResult = self._evaluateCode(LP_PROF_LOSS)
|
|
1364
|
+
if not profLossResult.success:
|
|
1365
|
+
self._yieldErrorOrWarning(LP_PROF_LOSS, profLossResult)
|
|
1366
|
+
failedOr = True
|
|
1367
|
+
groupResult = self._evaluateCode(LP_GROUP)
|
|
1368
|
+
if not groupResult.success:
|
|
1369
|
+
self._yieldErrorOrWarning(LP_GROUP, groupResult)
|
|
1370
|
+
failedOr = True
|
|
1371
|
+
if failedOr:
|
|
1372
|
+
self._errorOnMissingFactText(LP_SM_LP, result)
|