arelle-release 2.37.56__py3-none-any.whl → 2.37.57__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of arelle-release might be problematic. Click here for more details.
- arelle/CntlrCmdLine.py +1 -0
- arelle/ErrorManager.py +3 -0
- arelle/ValidateDuplicateFacts.py +1 -1
- arelle/XbrlConst.py +1 -0
- arelle/_version.py +2 -2
- arelle/plugin/validate/EDINET/Constants.py +0 -18
- arelle/plugin/validate/EDINET/ControllerPluginData.py +11 -4
- arelle/plugin/validate/EDINET/CoverPageRequirements.py +118 -0
- arelle/plugin/validate/EDINET/FilingFormat.py +253 -0
- arelle/plugin/validate/EDINET/FormType.py +81 -0
- arelle/plugin/validate/EDINET/PluginValidationDataExtension.py +140 -33
- arelle/plugin/validate/EDINET/resources/cover-page-requirements.csv +27 -0
- arelle/plugin/validate/EDINET/rules/edinet.py +1 -1
- arelle/plugin/validate/EDINET/rules/gfm.py +187 -2
- arelle/plugin/validate/EDINET/rules/upload.py +183 -10
- arelle/plugin/validate/ROS/PluginValidationDataExtension.py +2 -0
- arelle/plugin/validate/ROS/ValidationPluginExtension.py +1 -0
- arelle/plugin/validate/ROS/rules/ros.py +37 -7
- {arelle_release-2.37.56.dist-info → arelle_release-2.37.57.dist-info}/METADATA +1 -1
- {arelle_release-2.37.56.dist-info → arelle_release-2.37.57.dist-info}/RECORD +24 -20
- {arelle_release-2.37.56.dist-info → arelle_release-2.37.57.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.56.dist-info → arelle_release-2.37.57.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.56.dist-info → arelle_release-2.37.57.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.56.dist-info → arelle_release-2.37.57.dist-info}/top_level.txt +0 -0
|
@@ -6,20 +6,24 @@ from __future__ import annotations
|
|
|
6
6
|
import re
|
|
7
7
|
from collections import defaultdict
|
|
8
8
|
from pathlib import Path
|
|
9
|
-
from typing import Any, Iterable, TYPE_CHECKING
|
|
9
|
+
from typing import Any, Iterable, TYPE_CHECKING, cast
|
|
10
10
|
|
|
11
11
|
import regex
|
|
12
12
|
|
|
13
|
-
from arelle import UrlUtil
|
|
13
|
+
from arelle import UrlUtil, XbrlConst
|
|
14
14
|
from arelle.Cntlr import Cntlr
|
|
15
15
|
from arelle.FileSource import FileSource
|
|
16
|
+
from arelle.ModelInstanceObject import ModelFact
|
|
16
17
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
18
|
+
from arelle.XmlValidateConst import VALID
|
|
17
19
|
from arelle.typing import TypeGetText
|
|
18
20
|
from arelle.utils.PluginHooks import ValidationHook
|
|
19
21
|
from arelle.utils.validate.Decorator import validation
|
|
20
22
|
from arelle.utils.validate.Validation import Validation
|
|
21
23
|
from .. import Constants
|
|
24
|
+
from ..CoverPageRequirements import CoverPageItemStatus
|
|
22
25
|
from ..DisclosureSystems import (DISCLOSURE_SYSTEM_EDINET)
|
|
26
|
+
from ..FilingFormat import FILING_FORMATS
|
|
23
27
|
from ..ReportFolderType import ReportFolderType, HTML_EXTENSIONS, IMAGE_EXTENSIONS
|
|
24
28
|
from ..PluginValidationDataExtension import PluginValidationDataExtension
|
|
25
29
|
|
|
@@ -631,6 +635,11 @@ def rules_cover_page(
|
|
|
631
635
|
) -> Iterable[Validation]:
|
|
632
636
|
"""
|
|
633
637
|
EDINET.EC1000E: Cover page must contain "【表紙】".
|
|
638
|
+
EDINET.EC1001E: A required item is missing from the cover page.
|
|
639
|
+
EDINET.EC1002E: A duplicate item is included on the cover page.
|
|
640
|
+
EDINET.EC1003E: An unnecessary item is included on the cover page.
|
|
641
|
+
EDINET.EC1004E: An item on the cover page is out of order.
|
|
642
|
+
EDINET.EC1005E: A required item on the cover page is missing a valid value.
|
|
634
643
|
"""
|
|
635
644
|
uploadContents = pluginData.getUploadContents(val.modelXbrl)
|
|
636
645
|
if uploadContents is None:
|
|
@@ -645,7 +654,7 @@ def rules_cover_page(
|
|
|
645
654
|
for elt in rootElt.iterdescendants():
|
|
646
655
|
if not coverPageTextFound and elt.text and '【表紙】' in elt.text:
|
|
647
656
|
coverPageTextFound = True
|
|
648
|
-
|
|
657
|
+
break
|
|
649
658
|
if not coverPageTextFound:
|
|
650
659
|
yield Validation.error(
|
|
651
660
|
codes='EDINET.EC1000E',
|
|
@@ -654,6 +663,85 @@ def rules_cover_page(
|
|
|
654
663
|
"Please add '【表紙】' to the relevant file."),
|
|
655
664
|
file=doc.basename,
|
|
656
665
|
)
|
|
666
|
+
filingFormat = pluginData.getFilingFormat(val.modelXbrl)
|
|
667
|
+
if filingFormat is None:
|
|
668
|
+
return
|
|
669
|
+
coverPageRequirements = pluginData.getCoverPageRequirements(val.modelXbrl)
|
|
670
|
+
currentLineNumber = 0
|
|
671
|
+
for qname in pluginData.coverPageItems:
|
|
672
|
+
foundFacts = []
|
|
673
|
+
validNonNilFacts = []
|
|
674
|
+
for fact in pluginData.iterFacts(val.modelXbrl, qname):
|
|
675
|
+
if fact.modelDocument != doc:
|
|
676
|
+
continue
|
|
677
|
+
if fact.qname.prefix is not None and filingFormat.includesTaxonomyPrefix(fact.qname.prefix):
|
|
678
|
+
foundFacts.append(fact)
|
|
679
|
+
if fact.xValid >= VALID and not fact.isNil:
|
|
680
|
+
validNonNilFacts.append(fact)
|
|
681
|
+
|
|
682
|
+
for fact in sorted(foundFacts, key=lambda f: cast(int, f.sourceline)):
|
|
683
|
+
if (sourceLine := cast(int, fact.sourceline)) <= currentLineNumber:
|
|
684
|
+
yield Validation.error(
|
|
685
|
+
codes='EDINET.EC1004E',
|
|
686
|
+
msg=_("Cover item %(localName)s is not in the correct order. "
|
|
687
|
+
"File name: '%(file)s'. "
|
|
688
|
+
"Please correct the order of cover items in the appropriate file."),
|
|
689
|
+
localName=qname.localName,
|
|
690
|
+
file=doc.basename,
|
|
691
|
+
modelObject=fact,
|
|
692
|
+
)
|
|
693
|
+
else:
|
|
694
|
+
currentLineNumber = sourceLine
|
|
695
|
+
|
|
696
|
+
if len(foundFacts) > 1:
|
|
697
|
+
yield Validation.error(
|
|
698
|
+
codes='EDINET.EC1002E',
|
|
699
|
+
msg=_("Cover item %(localName)s is duplicated. "
|
|
700
|
+
"File name: '%(file)s'. "
|
|
701
|
+
"Please check the cover item %(localName)s of the relevant file "
|
|
702
|
+
"and make sure there are no duplicates."),
|
|
703
|
+
localName=qname.localName,
|
|
704
|
+
file=doc.basename,
|
|
705
|
+
modelObject=foundFacts,
|
|
706
|
+
)
|
|
707
|
+
|
|
708
|
+
status = coverPageRequirements.get(qname, filingFormat)
|
|
709
|
+
if status is None:
|
|
710
|
+
continue
|
|
711
|
+
if status == CoverPageItemStatus.REQUIRED:
|
|
712
|
+
if len(foundFacts) == 0:
|
|
713
|
+
yield Validation.error(
|
|
714
|
+
codes='EDINET.EC1001E',
|
|
715
|
+
msg=_("Cover item %(localName)s is missing. "
|
|
716
|
+
"File name: '%(file)s'. "
|
|
717
|
+
"Please add the cover item %(localName)s to the relevant file."),
|
|
718
|
+
localName=qname.localName,
|
|
719
|
+
file=doc.basename,
|
|
720
|
+
)
|
|
721
|
+
elif len(validNonNilFacts) == 0:
|
|
722
|
+
yield Validation.error(
|
|
723
|
+
codes='EDINET.EC1005E',
|
|
724
|
+
msg=_("Cover item %(localName)s is missing a valid value. "
|
|
725
|
+
"File name: '%(file)s'. "
|
|
726
|
+
"Please enter a valid value for %(localName)s in the relevant file."),
|
|
727
|
+
localName=qname.localName,
|
|
728
|
+
file=doc.basename,
|
|
729
|
+
modelObject=foundFacts,
|
|
730
|
+
)
|
|
731
|
+
elif status == CoverPageItemStatus.PROHIBITED:
|
|
732
|
+
for fact in foundFacts:
|
|
733
|
+
if fact.isNil:
|
|
734
|
+
continue # Prohibited cover pages facts are allowed, only if nil.
|
|
735
|
+
yield Validation.error(
|
|
736
|
+
codes='EDINET.EC1003E',
|
|
737
|
+
msg=_("Cover item %(localName)s is not necessary. "
|
|
738
|
+
"File name: '%(file)s' (line %(line)s). "
|
|
739
|
+
"Please add the cover item %(localName)s to the relevant file."),
|
|
740
|
+
localName=qname.localName,
|
|
741
|
+
file=doc.basename,
|
|
742
|
+
line=fact.sourceline,
|
|
743
|
+
modelObject=fact,
|
|
744
|
+
)
|
|
657
745
|
|
|
658
746
|
|
|
659
747
|
@validation(
|
|
@@ -766,6 +854,77 @@ def rule_uri_references(
|
|
|
766
854
|
continue
|
|
767
855
|
|
|
768
856
|
|
|
857
|
+
@validation(
|
|
858
|
+
hook=ValidationHook.FILESOURCE,
|
|
859
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
860
|
+
)
|
|
861
|
+
def rule_EC1009R(
|
|
862
|
+
pluginData: ControllerPluginData,
|
|
863
|
+
cntlr: Cntlr,
|
|
864
|
+
fileSource: FileSource,
|
|
865
|
+
*args: Any,
|
|
866
|
+
**kwargs: Any,
|
|
867
|
+
) -> Iterable[Validation]:
|
|
868
|
+
"""
|
|
869
|
+
EDINET.EC1009R: The HTML file size must be 2.5MB (megabytes) or less.
|
|
870
|
+
"""
|
|
871
|
+
for path, size in pluginData.getUploadFileSizes(fileSource).items():
|
|
872
|
+
if path.suffix not in HTML_EXTENSIONS:
|
|
873
|
+
continue
|
|
874
|
+
if size > 2_500_000:
|
|
875
|
+
yield Validation.warning(
|
|
876
|
+
codes='EDINET.EC1009R',
|
|
877
|
+
msg=_("The HTML file size exceeds the maximum limit. "
|
|
878
|
+
"File name: '%(path)s'. "
|
|
879
|
+
"Please split the file so that the file size is 2.5MB or less."),
|
|
880
|
+
path=str(path),
|
|
881
|
+
)
|
|
882
|
+
|
|
883
|
+
|
|
884
|
+
|
|
885
|
+
@validation(
|
|
886
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
887
|
+
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
888
|
+
)
|
|
889
|
+
def rule_EC1010E(
|
|
890
|
+
pluginData: PluginValidationDataExtension,
|
|
891
|
+
val: ValidateXbrl,
|
|
892
|
+
*args: Any,
|
|
893
|
+
**kwargs: Any,
|
|
894
|
+
) -> Iterable[Validation]:
|
|
895
|
+
"""
|
|
896
|
+
EDINET.EC1010E: The charset specification in the content attribute of the HTML <meta> tag must be UTF-8.
|
|
897
|
+
"""
|
|
898
|
+
for modelDocument in val.modelXbrl.urlDocs.values():
|
|
899
|
+
path = Path(modelDocument.uri)
|
|
900
|
+
if path.suffix not in HTML_EXTENSIONS:
|
|
901
|
+
continue
|
|
902
|
+
rootElt = modelDocument.xmlRootElement
|
|
903
|
+
matchingElt = None
|
|
904
|
+
missingElts = []
|
|
905
|
+
for metaElt in rootElt.iterdescendants(tag=XbrlConst.qnXhtmlMeta.clarkNotation):
|
|
906
|
+
if metaElt.qname.localName != 'meta':
|
|
907
|
+
continue
|
|
908
|
+
content = metaElt.get('content')
|
|
909
|
+
if content is None:
|
|
910
|
+
continue
|
|
911
|
+
charset = content.split('charset=')[-1].strip().lower()
|
|
912
|
+
if charset == 'utf-8':
|
|
913
|
+
matchingElt = metaElt
|
|
914
|
+
else:
|
|
915
|
+
missingElts.append(metaElt)
|
|
916
|
+
|
|
917
|
+
if matchingElt is None or len(missingElts) > 0:
|
|
918
|
+
yield Validation.error(
|
|
919
|
+
codes='EDINET.EC1010E',
|
|
920
|
+
msg=_("The charset specification in the content attribute of the HTML <meta> tag is not UTF-8. "
|
|
921
|
+
"File name: '%(path)s'. "
|
|
922
|
+
"Please change the character code of the file to UTF-8."),
|
|
923
|
+
path=str(path),
|
|
924
|
+
modelObject=missingElts
|
|
925
|
+
)
|
|
926
|
+
|
|
927
|
+
|
|
769
928
|
@validation(
|
|
770
929
|
hook=ValidationHook.FILESOURCE,
|
|
771
930
|
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
@@ -833,20 +992,22 @@ def rule_EC1017E(
|
|
|
833
992
|
hook=ValidationHook.XBRL_FINALLY,
|
|
834
993
|
disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
|
|
835
994
|
)
|
|
836
|
-
def
|
|
995
|
+
def rule_html_elements(
|
|
837
996
|
pluginData: PluginValidationDataExtension,
|
|
838
997
|
val: ValidateXbrl,
|
|
839
998
|
*args: Any,
|
|
840
999
|
**kwargs: Any,
|
|
841
1000
|
) -> Iterable[Validation]:
|
|
842
1001
|
"""
|
|
1002
|
+
EDINET.EC1011E: The HTML lang attribute is not Japanese.
|
|
843
1003
|
EDINET.EC1020E: When writing a DOCTYPE declaration, do not define it multiple times.
|
|
844
|
-
|
|
1004
|
+
Also, please modify the relevant file so that there is only one html tag, one head tag, and one body tag each.
|
|
845
1005
|
|
|
846
|
-
Note: Some violations of
|
|
1006
|
+
Note: Some violations of EC1020E (such as multiple DOCTYPE declarations) prevent Arelle from parsing
|
|
847
1007
|
the XML at all, and thus an XML schema error will be triggered rather than this validation error.
|
|
848
1008
|
"""
|
|
849
1009
|
checkNames = frozenset({'body', 'head', 'html'})
|
|
1010
|
+
langAttributeValues = frozenset({'ja', 'jp', 'ja-jp', 'JA', 'JP', 'JA-JP'})
|
|
850
1011
|
for modelDocument in val.modelXbrl.urlDocs.values():
|
|
851
1012
|
path = Path(modelDocument.uri)
|
|
852
1013
|
if path.suffix not in HTML_EXTENSIONS:
|
|
@@ -857,10 +1018,22 @@ def rule_EC1020E(
|
|
|
857
1018
|
}
|
|
858
1019
|
for elt in rootElt.iterdescendants():
|
|
859
1020
|
name = elt.qname.localName
|
|
860
|
-
if name
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
1021
|
+
if name in checkNames:
|
|
1022
|
+
eltCounts[name] = eltCounts.get(name, 0) + 1
|
|
1023
|
+
if not isinstance(elt, ModelFact):
|
|
1024
|
+
lang = elt.get(XbrlConst.qnXmlLang.clarkNotation)
|
|
1025
|
+
if lang is not None and lang not in langAttributeValues:
|
|
1026
|
+
yield Validation.error(
|
|
1027
|
+
codes='EDINET.EC1011E',
|
|
1028
|
+
msg=_("The language setting is not Japanese. "
|
|
1029
|
+
"File name: %(file)s (line %(line)s). "
|
|
1030
|
+
"Please set the lang attribute on the given line of the "
|
|
1031
|
+
"relevant file to one of the following: %(langValues)s."),
|
|
1032
|
+
file=modelDocument.basename,
|
|
1033
|
+
line=elt.sourceline,
|
|
1034
|
+
langValues=', '.join(langAttributeValues),
|
|
1035
|
+
)
|
|
1036
|
+
|
|
864
1037
|
if any(count > 1 for count in eltCounts.values()):
|
|
865
1038
|
yield Validation.error(
|
|
866
1039
|
codes='EDINET.EC1020E',
|
|
@@ -35,6 +35,8 @@ SCHEMA_PATTERNS = {
|
|
|
35
35
|
"http://www.cro.ie/": re.compile(r"^\d{1,6}$")
|
|
36
36
|
}
|
|
37
37
|
|
|
38
|
+
UK_REF_NS_PATTERN = re.compile(r"^http://xbrl.frc.org.uk/general/\d{4,}-\d{2,}-\d{2,}/ref$")
|
|
39
|
+
|
|
38
40
|
TR_NAMESPACES = {
|
|
39
41
|
"http://www.xbrl.org/inlineXBRL/transformation/2010-04-20",
|
|
40
42
|
"http://www.xbrl.org/inlineXBRL/transformation/2011-07-31",
|
|
@@ -12,6 +12,7 @@ from .PluginValidationDataExtension import PluginValidationDataExtension
|
|
|
12
12
|
|
|
13
13
|
_: TypeGetText
|
|
14
14
|
|
|
15
|
+
CURRENCIES_DIMENSION = 'CurrenciesDimension'
|
|
15
16
|
EQUITY = 'Equity'
|
|
16
17
|
IE_PROFIT_LOSS = 'ProfitLossBeforeTax'
|
|
17
18
|
IE_PROFIT_LOSS_ORDINARY = 'ProfitLossOnOrdinaryActivitiesBeforeTax'
|
|
@@ -10,6 +10,7 @@ from collections import Counter
|
|
|
10
10
|
from collections.abc import Iterable
|
|
11
11
|
from decimal import Decimal
|
|
12
12
|
|
|
13
|
+
from arelle import XbrlConst
|
|
13
14
|
from arelle.typing import TypeGetText
|
|
14
15
|
from arelle.ValidateXbrl import ValidateXbrl
|
|
15
16
|
from collections import defaultdict
|
|
@@ -28,8 +29,8 @@ from arelle.utils.validate.Validation import Validation
|
|
|
28
29
|
from arelle.ValidateXbrlCalcs import inferredDecimals, rangeValue
|
|
29
30
|
from arelle.XbrlConst import qnXbrliMonetaryItemType, qnXbrliXbrl, xhtml
|
|
30
31
|
from arelle.XmlValidateConst import VALID
|
|
31
|
-
from ..ValidationPluginExtension import EQUITY, PRINCIPAL_CURRENCY, TURNOVER_REVENUE
|
|
32
|
-
from ..PluginValidationDataExtension import MANDATORY_ELEMENTS,
|
|
32
|
+
from ..ValidationPluginExtension import CURRENCIES_DIMENSION, EQUITY, PRINCIPAL_CURRENCY, TURNOVER_REVENUE
|
|
33
|
+
from ..PluginValidationDataExtension import MANDATORY_ELEMENTS, SCHEMA_PATTERNS, TR_NAMESPACES, UK_REF_NS_PATTERN, PluginValidationDataExtension
|
|
33
34
|
|
|
34
35
|
|
|
35
36
|
def checkFileEncoding(modelXbrl: ModelXbrl) -> None:
|
|
@@ -337,27 +338,56 @@ def rule_ros20(
|
|
|
337
338
|
used for the majority of monetary facts.
|
|
338
339
|
"""
|
|
339
340
|
principal_currency_facts = val.modelXbrl.factsByLocalName.get(PRINCIPAL_CURRENCY, set())
|
|
340
|
-
principal_currency_values =
|
|
341
|
+
principal_currency_values = {
|
|
342
|
+
currencyDimensionCode
|
|
343
|
+
for pc_fact in principal_currency_facts
|
|
344
|
+
if (currencyDimensionCode := _getCurrencyDimensionCode(val.modelXbrl, pc_fact))
|
|
345
|
+
}
|
|
341
346
|
if len(principal_currency_values) != 1:
|
|
342
347
|
yield Validation.error(
|
|
343
348
|
"ROS.20",
|
|
344
349
|
_("'PrincipalCurrencyUsedInBusinessReport' must exist and have a single value. Values found: %(principal_currency_values)s."),
|
|
345
350
|
modelObject=principal_currency_facts,
|
|
346
|
-
principal_currency_values=principal_currency_values,
|
|
351
|
+
principal_currency_values=sorted(principal_currency_values),
|
|
347
352
|
)
|
|
348
353
|
else:
|
|
349
354
|
principal_currency_value = principal_currency_values.pop()
|
|
350
355
|
monetary_facts = list(val.modelXbrl.factsByDatatype(False, qnXbrliMonetaryItemType))
|
|
351
|
-
monetary_units = [list(fact.utrEntries)[0].
|
|
356
|
+
monetary_units = [list(fact.utrEntries)[0].unitId for fact in monetary_facts if fact.unit is not None]
|
|
352
357
|
unit_counts = Counter(monetary_units)
|
|
353
358
|
principal_currency_value_count = unit_counts[principal_currency_value]
|
|
354
|
-
for
|
|
359
|
+
for count in unit_counts.values():
|
|
355
360
|
if count > principal_currency_value_count:
|
|
356
361
|
yield Validation.warning(
|
|
357
362
|
"ROS.20",
|
|
358
|
-
_("'PrincipalCurrencyUsedInBusinessReport' has a value of %(principal_currency_value)s, "
|
|
363
|
+
_("'PrincipalCurrencyUsedInBusinessReport' has a %(currencies_dimension)s value of %(principal_currency_value)s, "
|
|
359
364
|
"which must match the functional(majority) unit of the financial statement."),
|
|
360
365
|
modelObject=principal_currency_facts,
|
|
366
|
+
currencies_dimension=CURRENCIES_DIMENSION,
|
|
361
367
|
principal_currency_value=principal_currency_value,
|
|
362
368
|
)
|
|
363
369
|
break
|
|
370
|
+
|
|
371
|
+
def _getCurrencyDimensionCode(modelXbrl: ModelXbrl, fact: ModelInlineFact) -> str | None:
|
|
372
|
+
if fact.context is None:
|
|
373
|
+
return None
|
|
374
|
+
for dim, mem in fact.context.qnameDims.items():
|
|
375
|
+
if dim.localName != CURRENCIES_DIMENSION:
|
|
376
|
+
continue
|
|
377
|
+
if mem.xValid < VALID:
|
|
378
|
+
return None
|
|
379
|
+
mem_concept = modelXbrl.qnameConcepts.get(mem.xValue)
|
|
380
|
+
if mem_concept is None:
|
|
381
|
+
return None
|
|
382
|
+
for ref_rel in modelXbrl.relationshipSet(XbrlConst.conceptReference).fromModelObject(mem_concept):
|
|
383
|
+
concept_ref = ref_rel.toModelObject
|
|
384
|
+
uk_ref_ns = None
|
|
385
|
+
for ns in concept_ref.nsmap.values():
|
|
386
|
+
if UK_REF_NS_PATTERN.match(ns):
|
|
387
|
+
uk_ref_ns = ns
|
|
388
|
+
break
|
|
389
|
+
if uk_ref_ns is None:
|
|
390
|
+
continue
|
|
391
|
+
if code := concept_ref.findtext(f"{{{uk_ref_ns}}}Code"):
|
|
392
|
+
return code.strip()
|
|
393
|
+
return None
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
arelle/Aspect.py,sha256=Pn9I91D1os1RTVj6htuxTfRzVMhmVDtrbKvV_zy9xMI,5470
|
|
2
2
|
arelle/BetaFeatures.py,sha256=T_tPac-FiozHyYLCemt0RoHJ1JahUE71L-0tHmIRKpE,858
|
|
3
3
|
arelle/Cntlr.py,sha256=nwE_qIQMTa5R3sr_dLP6s3srLhiEA5zDOqfas2pDxoA,31691
|
|
4
|
-
arelle/CntlrCmdLine.py,sha256=
|
|
4
|
+
arelle/CntlrCmdLine.py,sha256=pOztA3ExK4O-IvxELeBU0SyC4Yk6OKgbsOjpNgwmKiU,88800
|
|
5
5
|
arelle/CntlrComServer.py,sha256=h1KPf31uMbErpxTZn_iklDqUMGFgQnjZkFkFjd8gtLQ,1888
|
|
6
6
|
arelle/CntlrProfiler.py,sha256=2VQJudiUhxryVypxjODx2ccP1-n60icTiWs5lSEokhQ,972
|
|
7
7
|
arelle/CntlrQuickBooks.py,sha256=BMqd5nkNQOZyNFPefkTeWUUDCYNS6BQavaG8k1Lepu4,31543
|
|
@@ -21,7 +21,7 @@ arelle/DialogRssWatch.py,sha256=mjc4pqyFDISY4tQtME0uSRQ3NlcWnNsOsMu9Zj8tTd0,1378
|
|
|
21
21
|
arelle/DialogURL.py,sha256=JH88OPFf588E8RW90uMaieok7A_4kOAURQ8kHWVhnao,4354
|
|
22
22
|
arelle/DialogUserPassword.py,sha256=kWPlCCihhwvsykDjanME9qBDtv6cxZlsrJyoMqiRep4,13769
|
|
23
23
|
arelle/DisclosureSystem.py,sha256=mQlz8eezPpJuG6gHBV-x4-5Hne3LVh8TQf-Qm9jiFxI,24757
|
|
24
|
-
arelle/ErrorManager.py,sha256=
|
|
24
|
+
arelle/ErrorManager.py,sha256=F81oi1syHgCFZ99L4e4j7bePGei5oJy34sIYizXd0OE,16762
|
|
25
25
|
arelle/FileSource.py,sha256=asaX2wM47T7S6kELwmXm-YjGIoV6poWz_YdYThY0lpk,47983
|
|
26
26
|
arelle/FunctionCustom.py,sha256=d1FsBG14eykvpLpgaXpN8IdxnlG54dfGcsXPYfdpA9Q,5880
|
|
27
27
|
arelle/FunctionFn.py,sha256=BcZKah1rpfquSVPwjvknM1pgFXOnK4Hr1e_ArG_mcJY,38058
|
|
@@ -68,7 +68,7 @@ arelle/UiUtil.py,sha256=3G0xPclZI8xW_XQDbiFrmylB7Nd5muqi5n2x2oMkMZU,34218
|
|
|
68
68
|
arelle/Updater.py,sha256=IZ8cq44Rq88WbQcB1VOpMA6bxdfZxfYQ8rgu9Ehpbes,7448
|
|
69
69
|
arelle/UrlUtil.py,sha256=HrxZSG59EUMGMMGmWPuZkPi5-0BGqY3jAMkp7V4IdZo,32400
|
|
70
70
|
arelle/Validate.py,sha256=cX1OA3JPiwmjNmxfecZc24GBW1qXdjcEEynJ9F1K7Zg,58764
|
|
71
|
-
arelle/ValidateDuplicateFacts.py,sha256=
|
|
71
|
+
arelle/ValidateDuplicateFacts.py,sha256=MPRCOWSHahdtB8IJVxZMPGbupZix6Zhv4OrLHZyHDAA,21767
|
|
72
72
|
arelle/ValidateFilingText.py,sha256=xnXc0xgdNiHQk0eyP7VSSpvw7qr-pRFRwqqoUb569is,54051
|
|
73
73
|
arelle/ValidateInfoset.py,sha256=Rz_XBi5Ha43KpxXYhjLolURcWVx5qmqyjLxw48Yt9Dg,20396
|
|
74
74
|
arelle/ValidateUtr.py,sha256=oxOPrOa1XEzBay4miXvx6eRLTnVFYUIJC9ueWUk4EkI,13633
|
|
@@ -116,7 +116,7 @@ arelle/ViewWinVersReport.py,sha256=aYfsOgynVZpMzl6f2EzQCBLzdihYGycwb5SiTghkgMQ,9
|
|
|
116
116
|
arelle/ViewWinXml.py,sha256=4ZGKtjaoCwU9etKYm9ZAS7jSmUxba1rqNEdv0OIyjTY,1250
|
|
117
117
|
arelle/WatchRss.py,sha256=5Ih4igH2MM4hpOuAXy9eO0QAyZ7jZR3S5bPzo2sdFpw,14097
|
|
118
118
|
arelle/WebCache.py,sha256=SLk-S5StYUIucm5bd2BqT-o8ZA0NdYw2Xl4O9vIt7O8,45257
|
|
119
|
-
arelle/XbrlConst.py,sha256=
|
|
119
|
+
arelle/XbrlConst.py,sha256=kyNYQZVjw917DdzmK7olLhaio1kPJCJtC3j9QhBSxfs,58619
|
|
120
120
|
arelle/XbrlUtil.py,sha256=s2Vmrh-sZI5TeuqsziKignOc3ao-uUgnCNoelP4dDj0,9212
|
|
121
121
|
arelle/XhtmlValidate.py,sha256=0gtm7N-kXK0RB5o3c1AQXjfFuRp1w2fKZZAeyruNANw,5727
|
|
122
122
|
arelle/XmlUtil.py,sha256=1VToOOylF8kbEorEdZLThmq35j9bmuF_DS2q9NthnHU,58774
|
|
@@ -125,7 +125,7 @@ arelle/XmlValidateConst.py,sha256=U_wN0Q-nWKwf6dKJtcu_83FXPn9c6P8JjzGA5b0w7P0,33
|
|
|
125
125
|
arelle/XmlValidateParticles.py,sha256=Mn6vhFl0ZKC_vag1mBwn1rH_x2jmlusJYqOOuxFPO2k,9231
|
|
126
126
|
arelle/XmlValidateSchema.py,sha256=6frtZOc1Yrx_5yYF6V6oHbScnglWrVbWr6xW4EHtLQI,7428
|
|
127
127
|
arelle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
128
|
-
arelle/_version.py,sha256=
|
|
128
|
+
arelle/_version.py,sha256=CcYtsRRssUOvQGQ3FxPpMP9UMr7c8qKJ7JmvTpB0H5U,708
|
|
129
129
|
arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
|
|
130
130
|
arelle/api/Session.py,sha256=kgSxS7VckA1sQ7xp0pJiK7IK-vRxAdAZKUo8gEx27s8,7549
|
|
131
131
|
arelle/config/creationSoftwareNames.json,sha256=5MK7XUjfDJ9OpRCCHXeOErJ1SlTBZji4WEcEOdOacx0,3128
|
|
@@ -312,25 +312,29 @@ arelle/plugin/validate/DBA/rules/tm.py,sha256=ui9oKBqlAForwkQ9kk9KBiUogTJE5pv1Rb
|
|
|
312
312
|
arelle/plugin/validate/DBA/rules/tr.py,sha256=4TootFjl0HXsKZk1XNBCyj-vnjRs4lg35hfiz_b_4wU,14684
|
|
313
313
|
arelle/plugin/validate/EBA/__init__.py,sha256=x3zXNcdSDJ3kHfL7kMs0Ve0Vs9oWbzNFVf1TK4Avmy8,45924
|
|
314
314
|
arelle/plugin/validate/EBA/config.xml,sha256=37wMVUAObK-XEqakqD8zPNog20emYt4a_yfL1AKubF8,2022
|
|
315
|
-
arelle/plugin/validate/EDINET/Constants.py,sha256=
|
|
316
|
-
arelle/plugin/validate/EDINET/ControllerPluginData.py,sha256=
|
|
315
|
+
arelle/plugin/validate/EDINET/Constants.py,sha256=2RxNrXqmAqsh7nM9ZNZn6Uo0mTrfFJcb_E_HJw_MLcE,1516
|
|
316
|
+
arelle/plugin/validate/EDINET/ControllerPluginData.py,sha256=1WhiS0RdrxeXz4pGDzWATEPqCopOh2spr8Z6Qra_Psk,8420
|
|
317
|
+
arelle/plugin/validate/EDINET/CoverPageRequirements.py,sha256=ZR8pk1CQfUIi15as1zVF27W0kRlUF1M_Ygw7appDUno,4488
|
|
317
318
|
arelle/plugin/validate/EDINET/DisclosureSystems.py,sha256=3rKG42Eg-17Xx_KXU_V5yHW6I3LTwQunvf4a44C9k_4,36
|
|
319
|
+
arelle/plugin/validate/EDINET/FilingFormat.py,sha256=SFZ22zFk6RVIA9dpx3iVLlf2heKfZZqt2ZUXUje4BII,18789
|
|
320
|
+
arelle/plugin/validate/EDINET/FormType.py,sha256=jFqjJACJJ4HhkY1t6Fqei0z6rgvH3Mp-dP04KwQVv3Q,2517
|
|
318
321
|
arelle/plugin/validate/EDINET/ManifestInstance.py,sha256=o6BGlaQHSsn6D0VKH4zn59UscKnjTKlo99kSGfGdYlU,6910
|
|
319
|
-
arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=
|
|
322
|
+
arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=wR18Oregy8SBBH2G_u4zqP2_M0EBopx9_AxOZpd1Bao,21358
|
|
320
323
|
arelle/plugin/validate/EDINET/ReportFolderType.py,sha256=Q-9a-5tJfhK-cjY8WUB2AT1NI-Nn9cFtARVOIJoLRGU,2979
|
|
321
324
|
arelle/plugin/validate/EDINET/Statement.py,sha256=0Mw5IB7LMtvUZ-2xKZfxmq67xF_dCgJo3eNLweLFRHU,9350
|
|
322
325
|
arelle/plugin/validate/EDINET/UploadContents.py,sha256=o29mDoX48M3S2jQqrJO4ZaulltAPt4vD-qdsWTMCUPc,1196
|
|
323
326
|
arelle/plugin/validate/EDINET/ValidationPluginExtension.py,sha256=8LNqvXzNaWP54dShEjet5ely4BnM8ByCSyimKpUx3_s,2577
|
|
324
327
|
arelle/plugin/validate/EDINET/__init__.py,sha256=ECWgqzwHA7MZ3g7SeoFI7ttR9Wq_lywV-TlqeUW_juY,3186
|
|
325
328
|
arelle/plugin/validate/EDINET/resources/config.xml,sha256=7uT4GcRgk5veMLpFhPPQJxbGKiQvM52P8EMrjn0qd0g,646
|
|
329
|
+
arelle/plugin/validate/EDINET/resources/cover-page-requirements.csv,sha256=8ILKNn8bXbcgG9V0lc8mxorKDKEjJQWLdBQRMvbqtkI,6518
|
|
326
330
|
arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml,sha256=997I3RGTLg5OY3vn5hQxVFAAxOmDSOYpuyQe6VnWSY0,16285
|
|
327
331
|
arelle/plugin/validate/EDINET/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
328
332
|
arelle/plugin/validate/EDINET/rules/contexts.py,sha256=KPoyWfRaURvxoGVcWP64mTMTAKPMSmQSX06RClCLddw,7590
|
|
329
|
-
arelle/plugin/validate/EDINET/rules/edinet.py,sha256=
|
|
333
|
+
arelle/plugin/validate/EDINET/rules/edinet.py,sha256=g3IPMV5-mWbVwVmEwv5-h1LOtdfeBQ9gZI27m744FFw,12628
|
|
330
334
|
arelle/plugin/validate/EDINET/rules/frta.py,sha256=N0YglHYZuLD2IuwE26viR2ViwUYjneBuMFU9vlrS0aQ,7616
|
|
331
|
-
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=
|
|
335
|
+
arelle/plugin/validate/EDINET/rules/gfm.py,sha256=8m6TkwIKVouENOZ4AmfBd3t_R_oODhEwbYzcsOZfyp4,33878
|
|
332
336
|
arelle/plugin/validate/EDINET/rules/manifests.py,sha256=MoT9R_a4BzuYdQVbF7RC5wz134Ve68svSdJ3NlpO_AU,4026
|
|
333
|
-
arelle/plugin/validate/EDINET/rules/upload.py,sha256=
|
|
337
|
+
arelle/plugin/validate/EDINET/rules/upload.py,sha256=E_sEhsuUkoH648PGWwpN90uOQMjKNFaZ8priucmYMOk,47908
|
|
334
338
|
arelle/plugin/validate/ESEF/Const.py,sha256=JujF_XV-_TNsxjGbF-8SQS4OOZIcJ8zhCMnr-C1O5Ho,22660
|
|
335
339
|
arelle/plugin/validate/ESEF/Dimensions.py,sha256=MOJM7vwNPEmV5cu-ZzPrhx3347ZvxgD6643OB2HRnIk,10597
|
|
336
340
|
arelle/plugin/validate/ESEF/Util.py,sha256=QH3btcGqBpr42M7WSKZLSdNXygZaZLfEiEjlxoG21jE,7950
|
|
@@ -359,13 +363,13 @@ arelle/plugin/validate/NL/rules/fr_kvk.py,sha256=kYqXt45S6eM32Yg9ii7pUhOMfJaHurg
|
|
|
359
363
|
arelle/plugin/validate/NL/rules/fr_nl.py,sha256=ZoyiRsTyqTNZB_VgcdabmeNi6v7DY6jMxzaP6ppLtIU,31387
|
|
360
364
|
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=bPD5lfr6dxdVGPZ2D_bEZtbz02tzsX_BZ5kC-CZJNwc,90170
|
|
361
365
|
arelle/plugin/validate/ROS/DisclosureSystems.py,sha256=rJ81mwQDYTi6JecFZ_zhqjjz3VNQRgjHNSh0wcQWAQE,18
|
|
362
|
-
arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=
|
|
363
|
-
arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=
|
|
366
|
+
arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=9_dxO20B3TRVElv0jZ_YW7tZbG3HihzRowg7W-397is,4379
|
|
367
|
+
arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=U5EtwSW3eGvvvgVk9JgcUueJn604a4J6C2Fsk_CHQy0,874
|
|
364
368
|
arelle/plugin/validate/ROS/__init__.py,sha256=KuWg1MHVzA2S6eaHFptvP3Vu_5gQWf3OUYC97clB7zI,2075
|
|
365
369
|
arelle/plugin/validate/ROS/config.xml,sha256=ZCpCFgr1ZAjoUuhb1eRpDnmKrae-sXA9yl6SOWnrfm8,654
|
|
366
370
|
arelle/plugin/validate/ROS/resources/config.xml,sha256=HXWume5HlrAqOx5AtiWWqgADbRatA8YSfm_JvZGwdgQ,657
|
|
367
371
|
arelle/plugin/validate/ROS/rules/__init__.py,sha256=wW7BUAIb7sRkOxC1Amc_ZKrz03FM-Qh1TyZe6wxYaAU,1567
|
|
368
|
-
arelle/plugin/validate/ROS/rules/ros.py,sha256=
|
|
372
|
+
arelle/plugin/validate/ROS/rules/ros.py,sha256=CRZkZfsKe4y1B-PDkazQ_cD5LRZBk1GJjTscCZXXYUI,21173
|
|
369
373
|
arelle/plugin/validate/UK/ValidateUK.py,sha256=h7-tnCubHme8Meaif-o55TV2rCfMWuikfpZCcK6NNDs,56447
|
|
370
374
|
arelle/plugin/validate/UK/__init__.py,sha256=GT67T_7qpOASzdmgRXFPmLxfPg3Gjubli7luQDK3zck,27462
|
|
371
375
|
arelle/plugin/validate/UK/config.xml,sha256=mUFhWDfBzGTn7v0ZSmf4HaweQTMJh_4ZcJmD9mzCHrA,1547
|
|
@@ -680,9 +684,9 @@ arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txr
|
|
|
680
684
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
681
685
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
682
686
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
683
|
-
arelle_release-2.37.
|
|
684
|
-
arelle_release-2.37.
|
|
685
|
-
arelle_release-2.37.
|
|
686
|
-
arelle_release-2.37.
|
|
687
|
-
arelle_release-2.37.
|
|
688
|
-
arelle_release-2.37.
|
|
687
|
+
arelle_release-2.37.57.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
688
|
+
arelle_release-2.37.57.dist-info/METADATA,sha256=2zuOGGta03sWvoswvqhJf2mZeNCt1kZ5M90_ZBKN6g8,9327
|
|
689
|
+
arelle_release-2.37.57.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
690
|
+
arelle_release-2.37.57.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
691
|
+
arelle_release-2.37.57.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
|
|
692
|
+
arelle_release-2.37.57.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|