arelle-release 2.37.66__py3-none-any.whl → 2.37.68__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/Cntlr.py CHANGED
@@ -18,24 +18,24 @@ import os
18
18
  import subprocess
19
19
  import sys
20
20
  import tempfile
21
- from typing import Any, TYPE_CHECKING, cast
21
+ from typing import TYPE_CHECKING, Any, cast
22
22
 
23
- import regex as re
23
+ import regex
24
24
 
25
25
  from arelle import Locale, ModelManager, PackageManager, PluginManager, XbrlConst
26
26
  from arelle.BetaFeatures import BETA_FEATURES_AND_DESCRIPTIONS
27
27
  from arelle.ErrorManager import ErrorManager
28
28
  from arelle.FileSource import FileSource
29
- from arelle.SystemInfo import PlatformOS, getSystemWordSize, hasFileSystem, hasWebServer, isCGI, isGAE
30
- from arelle.WebCache import WebCache
31
29
  from arelle.logging.formatters.LogFormatter import LogFormatter, logRefsFileLines # noqa: F401 - for reimport
32
30
  from arelle.logging.handlers.LogHandlerWithXml import LogHandlerWithXml # noqa: F401 - for reimport
33
31
  from arelle.logging.handlers.LogToBufferHandler import LogToBufferHandler
34
32
  from arelle.logging.handlers.LogToPrintHandler import LogToPrintHandler
35
33
  from arelle.logging.handlers.LogToXmlHandler import LogToXmlHandler
36
34
  from arelle.logging.handlers.StructuredMessageLogHandler import StructuredMessageLogHandler
35
+ from arelle.SystemInfo import PlatformOS, getSystemWordSize, hasFileSystem, hasWebServer, isCGI, isGAE
37
36
  from arelle.typing import TypeGetText
38
37
  from arelle.utils.PluginData import PluginData
38
+ from arelle.WebCache import WebCache
39
39
 
40
40
  _: TypeGetText
41
41
 
@@ -60,7 +60,7 @@ def resourcesDir() -> str:
60
60
  # for python 3.2 remove __pycache__
61
61
  if _moduleDir.endswith("__pycache__"):
62
62
  _moduleDir = os.path.dirname(_moduleDir)
63
- if (re.match(r".*[\\/](library|python{0.major}{0.minor}).zip[\\/]arelle$".format(sys.version_info),
63
+ if (regex.match(r".*[\\/](library|python{0.major}{0.minor}).zip[\\/]arelle$".format(sys.version_info),
64
64
  _moduleDir)): # cx_Freexe uses library up to 3.4 and python35 after 3.5
65
65
  _resourcesDir = os.path.dirname(os.path.dirname(_moduleDir))
66
66
  else:
@@ -435,11 +435,11 @@ class Cntlr:
435
435
 
436
436
  def setLogLevelFilter(self, logLevelFilter: str) -> None:
437
437
  if self.logger:
438
- setattr(self.logger, "messageLevelFilter", re.compile(logLevelFilter) if logLevelFilter else None)
438
+ setattr(self.logger, "messageLevelFilter", regex.compile(logLevelFilter) if logLevelFilter else None)
439
439
 
440
440
  def setLogCodeFilter(self, logCodeFilter: str) -> None:
441
441
  if self.logger:
442
- setattr(self.logger, "messageCodeFilter", re.compile(logCodeFilter) if logCodeFilter else None)
442
+ setattr(self.logger, "messageCodeFilter", regex.compile(logCodeFilter) if logCodeFilter else None)
443
443
 
444
444
  def addToLog(
445
445
  self,
arelle/CntlrCmdLine.py CHANGED
@@ -11,7 +11,6 @@ import datetime
11
11
  import fnmatch
12
12
  import gettext
13
13
  import glob
14
- import json
15
14
  import logging
16
15
  import multiprocessing
17
16
  import os
arelle/CntlrWinMain.py CHANGED
@@ -5,12 +5,19 @@ See COPYRIGHT.md for copyright information.
5
5
  '''
6
6
  from __future__ import annotations
7
7
 
8
+ import fnmatch
9
+ import os
10
+ import pickle
11
+ import platform
12
+ import subprocess
13
+ import sys
14
+ import time
15
+ import webbrowser
8
16
  from typing import Any
9
17
 
10
- from arelle import ValidateDuplicateFacts
11
- import os, sys, subprocess, pickle, time, locale, fnmatch, platform, webbrowser
12
18
  import regex as re
13
19
 
20
+ from arelle import ValidateDuplicateFacts
14
21
  from arelle.logging.formatters.LogFormatter import logRefsFileLines
15
22
  from arelle.utils.EntryPointDetection import parseEntrypointFileInput
16
23
 
@@ -18,55 +25,89 @@ if sys.platform == 'win32' and getattr(sys, 'frozen', False):
18
25
  # need the .dll directory in path to be able to access Tk and Tcl DLLs efore importinng Tk, etc.
19
26
  os.environ['PATH'] = os.path.dirname(sys.executable) + ";" + os.environ['PATH']
20
27
 
21
- from tkinter import (Tk, Tcl, TclError, Toplevel, Menu, PhotoImage, StringVar, BooleanVar, IntVar, N, S, E, W, EW,
22
- HORIZONTAL, VERTICAL, END, font as tkFont)
28
+ from tkinter import (
29
+ END,
30
+ EW,
31
+ HORIZONTAL,
32
+ VERTICAL,
33
+ BooleanVar,
34
+ E,
35
+ IntVar,
36
+ Menu,
37
+ N,
38
+ PhotoImage,
39
+ S,
40
+ StringVar,
41
+ Tcl,
42
+ TclError,
43
+ Tk,
44
+ W,
45
+ )
46
+ from tkinter import font as tkFont
47
+
23
48
  try:
24
- from tkinter.ttk import Frame, Button, Label, Combobox, Separator, PanedWindow, Notebook
49
+ from tkinter.ttk import Button, Combobox, Frame, Label, Notebook, PanedWindow, Separator
25
50
  except ImportError: # 3.0 versions of tkinter
26
- from ttk import Frame, Button, Label, Combobox, Separator, PanedWindow, Notebook
51
+ from ttk import Button, Combobox, Frame, Label, Notebook, PanedWindow, Separator
27
52
  try:
28
53
  import syslog
29
54
  except ImportError:
30
55
  syslog = None
56
+
57
+ import logging
58
+ import multiprocessing
59
+ import queue
60
+ import threading
31
61
  import tkinter.filedialog
32
- import tkinter.messagebox, traceback
62
+ import tkinter.messagebox
33
63
  import tkinter.simpledialog
34
- from arelle.Locale import format_string, setApplicationLocale
64
+ import traceback
65
+
66
+ from arelle import (
67
+ Cntlr,
68
+ DialogLanguage,
69
+ DialogPackageManager,
70
+ DialogPluginManager,
71
+ DialogURL,
72
+ ModelDocument,
73
+ PackageManager,
74
+ TableStructure,
75
+ Updater,
76
+ ViewFileConcepts,
77
+ ViewFileDTS,
78
+ ViewFileFactList,
79
+ ViewFileFactTable,
80
+ ViewFileFormulae,
81
+ ViewFileRelationshipSet,
82
+ ViewFileRoleTypes,
83
+ ViewFileTests,
84
+ ViewWinConcepts,
85
+ ViewWinDTS,
86
+ ViewWinFactList,
87
+ ViewWinFactTable,
88
+ ViewWinFormulae,
89
+ ViewWinProperties,
90
+ ViewWinRelationshipSet,
91
+ ViewWinRenderedGrid,
92
+ ViewWinRoleTypes,
93
+ ViewWinRssFeed,
94
+ ViewWinTests,
95
+ ViewWinTree,
96
+ ViewWinVersReport,
97
+ ViewWinXml,
98
+ XbrlConst,
99
+ )
35
100
  from arelle.CntlrWinTooltip import ToolTip
36
- from arelle import XbrlConst
101
+ from arelle.FileSource import openFileSource
102
+ from arelle.Locale import format_string, setApplicationLocale
103
+ from arelle.ModelFormulaObject import FormulaOptions
104
+ from arelle.oim.xml.Save import saveOimReportToXmlInstance
37
105
  from arelle.PluginManager import pluginClassMethods
106
+ from arelle.rendering import RenderingEvaluator
38
107
  from arelle.UrlUtil import isHttpUrl
39
108
  from arelle.ValidateXbrlCalcs import ValidateCalcsMode as CalcsMode
40
109
  from arelle.ValidateXbrlDTS import ValidateBaseTaxonomiesMode
41
110
  from arelle.Version import copyrightLabel
42
- from arelle.oim.xml.Save import saveOimReportToXmlInstance
43
- import logging
44
- import multiprocessing
45
-
46
- import threading, queue
47
-
48
- from arelle import Cntlr
49
- from arelle import (DialogURL, DialogLanguage,
50
- DialogPluginManager, DialogPackageManager,
51
- ModelDocument,
52
- ModelManager,
53
- PackageManager,
54
- TableStructure,
55
- ViewWinDTS,
56
- ViewWinProperties, ViewWinConcepts, ViewWinRelationshipSet, ViewWinFormulae,
57
- ViewWinFactList, ViewFileFactList, ViewWinFactTable, ViewWinRenderedGrid, ViewWinXml,
58
- ViewWinRoleTypes, ViewFileRoleTypes, ViewFileConcepts,
59
- ViewWinTests, ViewWinTree, ViewWinVersReport, ViewWinRssFeed,
60
- ViewFileDTS,
61
- ViewFileFactTable,
62
- ViewFileFormulae,
63
- ViewFileTests,
64
- ViewFileRelationshipSet,
65
- Updater
66
- )
67
- from arelle.ModelFormulaObject import FormulaOptions
68
- from arelle.FileSource import openFileSource
69
- from arelle.rendering import RenderingEvaluator
70
111
 
71
112
  restartMain = True
72
113
 
arelle/_version.py CHANGED
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
28
28
  commit_id: COMMIT_ID
29
29
  __commit_id__: COMMIT_ID
30
30
 
31
- __version__ = version = '2.37.66'
32
- __version_tuple__ = version_tuple = (2, 37, 66)
31
+ __version__ = version = '2.37.68'
32
+ __version_tuple__ = version_tuple = (2, 37, 68)
33
33
 
34
34
  __commit_id__ = commit_id = None
@@ -5,11 +5,10 @@ from __future__ import annotations
5
5
 
6
6
  from collections import defaultdict
7
7
  from dataclasses import dataclass
8
- from typing import cast
9
8
 
10
9
  import regex
11
10
 
12
- from arelle.ModelInstanceObject import ModelFact, ModelContext
11
+ from arelle.ModelInstanceObject import ModelContext, ModelFact
13
12
  from arelle.ModelValue import QName
14
13
  from arelle.ModelXbrl import ModelXbrl
15
14
  from arelle.utils.PluginData import PluginData
@@ -46,7 +45,7 @@ class PluginValidationDataExtension(PluginData):
46
45
  disclosureOfEquityQns: frozenset[QName]
47
46
  consolidatedMemberQn: QName
48
47
  consolidatedSoloDimensionQn: QName
49
- cpr_regex: regex.regex.Pattern[str]
48
+ cpr_regex: regex.Pattern[str]
50
49
  dateOfApprovalOfAnnualReportQn: QName
51
50
  dateOfExtraordinaryDividendDistributedAfterEndOfReportingPeriod: QName
52
51
  dateOfGeneralMeetingQn: QName
@@ -85,8 +85,8 @@ NUMERIC_LABEL_ROLES = frozenset({
85
85
  PATTERN_CODE = r'(?P<code>[A-Za-z\d]*)'
86
86
  PATTERN_CONSOLIDATED = r'(?P<consolidated>c|n)'
87
87
  PATTERN_COUNT = r'(?P<count>\d{2})'
88
- PATTERN_DATE1 = r'(?P<year1>\d{4})-(?P<month1>\d{2})-(?P<day1>\d{2})'
89
- PATTERN_DATE2 = r'(?P<year2>\d{4})-(?P<month2>\d{2})-(?P<day2>\d{2})'
88
+ PATTERN_PERIOD_DATE = r'(?P<period_year>\d{4})-(?P<period_month>\d{2})-(?P<period_day>\d{2})'
89
+ PATTERN_SUBMISSION_DATE = r'(?P<submission_year>\d{4})-(?P<submission_month>\d{2})-(?P<submission_day>\d{2})'
90
90
  PATTERN_FORM = r'(?P<form>\d{6})'
91
91
  PATTERN_LINKBASE = r'(?P<linkbase>lab|lab-en|gla|pre|def|cal)'
92
92
  PATTERN_MAIN = r'(?P<main>\d{7})'
@@ -99,12 +99,12 @@ PATTERN_SERIAL = r'(?P<serial>\d{3})'
99
99
 
100
100
  PATTERN_AUDIT_REPORT_PREFIX = rf'jpaud-{PATTERN_REPORT}-{PATTERN_PERIOD}{PATTERN_CONSOLIDATED}'
101
101
  PATTERN_REPORT_PREFIX = rf'jp{PATTERN_ORDINANCE}{PATTERN_FORM}-{PATTERN_REPORT}'
102
- PATTERN_SUFFIX = rf'{PATTERN_REPORT_SERIAL}_{PATTERN_CODE}-{PATTERN_SERIAL}_{PATTERN_DATE1}_{PATTERN_COUNT}_{PATTERN_DATE2}'
102
+ PATTERN_SUFFIX = rf'{PATTERN_REPORT_SERIAL}_{PATTERN_CODE}-{PATTERN_SERIAL}_{PATTERN_PERIOD_DATE}_{PATTERN_COUNT}_{PATTERN_SUBMISSION_DATE}'
103
103
 
104
104
  PATTERN_URI_HOST = r'http:\/\/disclosure\.edinet-fsa\.go\.jp'
105
105
  PATTERN_AUDIT_URI_PREFIX = rf'jpaud\/{PATTERN_REPORT}\/{PATTERN_PERIOD}{PATTERN_CONSOLIDATED}'
106
106
  PATTERN_REPORT_URI_PREFIX = rf'jp{PATTERN_ORDINANCE}{PATTERN_FORM}\/{PATTERN_REPORT}'
107
- PATTERN_URI_SUFFIX = rf'{PATTERN_REPORT_SERIAL}\/{PATTERN_CODE}-{PATTERN_SERIAL}\/{PATTERN_DATE1}\/{PATTERN_COUNT}\/{PATTERN_DATE2}'
107
+ PATTERN_URI_SUFFIX = rf'{PATTERN_REPORT_SERIAL}\/{PATTERN_CODE}-{PATTERN_SERIAL}\/{PATTERN_PERIOD_DATE}\/{PATTERN_COUNT}\/{PATTERN_SUBMISSION_DATE}'
108
108
 
109
109
  # Extension namespace URI for report
110
110
  # Example: http://disclosure.edinet-fsa.go.jp/jpcrp030000/asr/001/X99002-000/2025-03-31/01/2025-06-28
@@ -2,7 +2,7 @@ from dataclasses import dataclass
2
2
  from decimal import Decimal
3
3
  from enum import Enum
4
4
 
5
- from regex import regex
5
+ import regex
6
6
 
7
7
  from arelle.ModelInstanceObject import ModelFact
8
8
 
@@ -353,6 +353,48 @@ def rule_EC8021W(
353
353
  )
354
354
 
355
355
 
356
+ @validation(
357
+ hook=ValidationHook.COMPLETE,
358
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
359
+ )
360
+ def rule_EC8032E(
361
+ pluginData: ControllerPluginData,
362
+ cntlr: Cntlr,
363
+ fileSource: FileSource,
364
+ *args: Any,
365
+ **kwargs: Any,
366
+ ) -> Iterable[Validation]:
367
+ """
368
+ EDINET.EC8032E: The first six digits of each context identifier must match the "EDINET code"
369
+ in the DEI information (or the "fund code" in the DEI information in the case of the Cabinet
370
+ Office Ordinance on Specified Securities Disclosure).
371
+ """
372
+ localNames = ('EDINETCodeDEI', 'FundCodeDEI')
373
+ codes = set()
374
+ for localName in localNames:
375
+ code = pluginData.getDeiValue(localName)
376
+ if code is None:
377
+ continue
378
+ codes.add(str(code)[:6])
379
+ if len(codes) == 0:
380
+ # If neither code is present in the DEI, it will be caught by other validation(s).
381
+ return
382
+ for modelXbrl in pluginData.loadedModelXbrls:
383
+ for context in modelXbrl.contexts.values():
384
+ __, identifier = context.entityIdentifier
385
+ identifier = identifier[:6]
386
+ if identifier not in codes:
387
+ yield Validation.error(
388
+ codes='EDINET.EC8032E',
389
+ msg=_("The context identifier must match the 'EDINETCodeDEI' information in the DEI. "
390
+ "Please set the identifier (first six digits) of the relevant context ID so "
391
+ "that it matches the EDINET code of the person submitting the disclosure "
392
+ "documents (or the fund code in the case of the Specified Securities Disclosure "
393
+ "Ordinance)."),
394
+ modelObject=context,
395
+ )
396
+
397
+
356
398
  @validation(
357
399
  hook=ValidationHook.XBRL_FINALLY,
358
400
  disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
@@ -4,12 +4,14 @@ See COPYRIGHT.md for copyright information.
4
4
  from __future__ import annotations
5
5
 
6
6
  from collections import defaultdict
7
+ from pathlib import Path
7
8
  from typing import Any, Iterable
8
9
 
9
10
  import regex
11
+ import unicodedata
10
12
  from jaconv import jaconv
11
13
 
12
- from arelle import XbrlConst, ValidateDuplicateFacts
14
+ from arelle import XbrlConst, ValidateDuplicateFacts, XmlUtil
13
15
  from arelle.Cntlr import Cntlr
14
16
  from arelle.FileSource import FileSource
15
17
  from arelle.LinkbaseType import LinkbaseType
@@ -649,6 +651,172 @@ def rule_EC8029W(
649
651
  )
650
652
 
651
653
 
654
+ @validation(
655
+ hook=ValidationHook.XBRL_FINALLY,
656
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
657
+ )
658
+ def rule_EC8030W(
659
+ pluginData: PluginValidationDataExtension,
660
+ val: ValidateXbrl,
661
+ *args: Any,
662
+ **kwargs: Any,
663
+ ) -> Iterable[Validation]:
664
+ """
665
+ EDINET.EC8030W: Any concept (other than DEI concepts) used in an instance must
666
+ be in the presentation linkbase.
667
+ """
668
+ usedConcepts = pluginData.getUsedConcepts(val.modelXbrl)
669
+ relSet = val.modelXbrl.relationshipSet(tuple(LinkbaseType.PRESENTATION.getArcroles()))
670
+ for concept in usedConcepts:
671
+ if concept.qname.namespaceURI == pluginData.jpdeiNamespace:
672
+ continue
673
+ if concept.qname.localName.endswith('DEI'):
674
+ # Example: jpsps_cor:SecuritiesRegistrationStatementAmendmentFlagDeemedRegistrationStatementDEI
675
+ continue
676
+ if not relSet.contains(concept):
677
+ yield Validation.warning(
678
+ codes='EDINET.EC8030W',
679
+ msg=_("An element (other than DEI) set in the inline XBRL file is not set in the "
680
+ "presentation linkbase. "
681
+ "Element: '%(concept)s'. "
682
+ "Please set the relevant element in the presentation linkbase."),
683
+ concept=concept.qname.localName,
684
+ modelObject=concept,
685
+ )
686
+
687
+
688
+ @validation(
689
+ hook=ValidationHook.COMPLETE,
690
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
691
+ )
692
+ def rule_EC8031W(
693
+ pluginData: ControllerPluginData,
694
+ cntlr: Cntlr,
695
+ fileSource: FileSource,
696
+ *args: Any,
697
+ **kwargs: Any,
698
+ ) -> Iterable[Validation]:
699
+ """
700
+ EDINET.EC8031W: For contexts having an ID beginning with "FilingDate", the instant
701
+ date value must match the report submission date set in the file name.
702
+
703
+ However, when reporting corrections, please set the following:
704
+ Context beginning with "FilingDate": The submission date on the cover page of the attached inline XBRL (original submission date)
705
+ "Report submission date" in the file name: The submission date of the correction report, etc.
706
+ """
707
+ isAmendment = pluginData.getDeiValue('ReportAmendmentFlagDEI')
708
+ if isAmendment:
709
+ # Amendment/corrections report are not subject to this validation, but documentation does note:
710
+ # However, when reporting corrections, please set the following:
711
+ # Context beginning with "FilingDate": The submission date on the cover page of the attached inline XBRL (original submission date)
712
+ # "Report submission date" in the file name: The submission date of the correction report, etc.
713
+ return
714
+ uploadContents = pluginData.getUploadContents()
715
+ if uploadContents is None:
716
+ return
717
+ docUris = {
718
+ docUri
719
+ for modelXbrl in pluginData.loadedModelXbrls
720
+ for docUri in modelXbrl.urlDocs.keys()
721
+ }
722
+ actualDates = defaultdict(set)
723
+ for uri in docUris:
724
+ path = Path(uri)
725
+ pathInfo = uploadContents.uploadPathsByFullPath.get(path)
726
+ if pathInfo is None or pathInfo.reportFolderType is None:
727
+ continue
728
+ patterns = pathInfo.reportFolderType.ixbrlFilenamePatterns
729
+ for pattern in patterns:
730
+ matches = pattern.match(path.name)
731
+ if not matches:
732
+ continue
733
+ groups = matches.groupdict()
734
+ year = groups['submission_year']
735
+ month = groups['submission_month']
736
+ day = groups['submission_day']
737
+ actualDate = f'{year:04}-{month:02}-{day:02}'
738
+ actualDates[actualDate].add(path)
739
+ expectedDates = defaultdict(set)
740
+ for modelXbrl in pluginData.loadedModelXbrls:
741
+ for context in modelXbrl.contexts.values():
742
+ if context.id is None:
743
+ continue
744
+ if not context.id.startswith("FilingDate"):
745
+ continue
746
+ if not context.isInstantPeriod:
747
+ continue
748
+ expectedDate = XmlUtil.dateunionValue(context.instantDatetime, subtractOneDay=True)[:10]
749
+ expectedDates[expectedDate].add(context)
750
+ invalidDates = {k: v for k, v in actualDates.items() if k not in expectedDates}
751
+ if len(invalidDates) == 0:
752
+ return
753
+ paths = [
754
+ path
755
+ for paths in invalidDates.values()
756
+ for path in paths
757
+ ]
758
+ contexts = [
759
+ context
760
+ for contexts in expectedDates.values()
761
+ for context in contexts
762
+ ]
763
+ for path in paths:
764
+ for context in contexts:
765
+ yield Validation.warning(
766
+ codes='EDINET.EC8031W',
767
+ msg=_("The value of the instant element in context '%(context)s' "
768
+ "must match the report submission date set in the file name. "
769
+ "File name: '%(file)s'. "
770
+ "Please correct the report submission date in the filename or "
771
+ "the instant element value for the context with ID '%(context)s'."),
772
+ context=context.id,
773
+ file=path.name,
774
+ modelObject=context,
775
+ )
776
+
777
+
778
+ @validation(
779
+ hook=ValidationHook.XBRL_FINALLY,
780
+ disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
781
+ )
782
+ def rule_EC8034W(
783
+ pluginData: PluginValidationDataExtension,
784
+ val: ValidateXbrl,
785
+ *args: Any,
786
+ **kwargs: Any,
787
+ ) -> Iterable[Validation]:
788
+ """
789
+ EDINET.EC8034W: English labels for extension concepts must not contain full-width characters.
790
+ """
791
+ labelsRelationshipSet = val.modelXbrl.relationshipSet(XbrlConst.conceptLabel)
792
+ for concept, modelLabelRels in labelsRelationshipSet.fromModelObjects().items():
793
+ for modelLabelRel in modelLabelRels:
794
+ modelLabel = modelLabelRel.toModelObject
795
+ if not isinstance(modelLabel, ModelResource):
796
+ continue
797
+ if not pluginData.isExtensionUri(modelLabel.modelDocument.uri, val.modelXbrl):
798
+ continue
799
+ if modelLabel.xmlLang != 'en':
800
+ continue
801
+ label = modelLabel.textValue.strip() # Does not trim full-width spaces
802
+ if any(
803
+ unicodedata.east_asian_width(char) in ('F', 'W')
804
+ for char in label
805
+ ):
806
+ yield Validation.warning(
807
+ codes='EDINET.EC8034W',
808
+ msg=_("The English label must be set using half-width alphanumeric characters "
809
+ "and half-width symbols. "
810
+ "File name: '%(file)s'. "
811
+ "English label: '%(label)s'. "
812
+ "Please use only half-width alphanumeric characters and half-width symbols "
813
+ "for the English labels of concepts in the relevant files."),
814
+ file=modelLabel.document.basename,
815
+ label=modelLabel.id,
816
+ modelObject=modelLabel,
817
+ )
818
+
819
+
652
820
  @validation(
653
821
  hook=ValidationHook.XBRL_FINALLY,
654
822
  disclosureSystems=[DISCLOSURE_SYSTEM_EDINET],
@@ -3,10 +3,12 @@ See COPYRIGHT.md for copyright information.
3
3
  """
4
4
  from __future__ import annotations
5
5
 
6
- import re
7
6
  from collections import defaultdict
7
+ from collections.abc import Iterable
8
8
  from pathlib import Path
9
- from typing import Any, Iterable, TYPE_CHECKING
9
+ from typing import TYPE_CHECKING, Any
10
+
11
+ import regex
10
12
 
11
13
  from arelle import UrlUtil, XbrlConst
12
14
  from arelle.Cntlr import Cntlr
@@ -14,16 +16,17 @@ from arelle.FileSource import FileSource
14
16
  from arelle.ModelDocument import Type as ModelDocumentType
15
17
  from arelle.ModelInstanceObject import ModelFact
16
18
  from arelle.ModelObject import ModelObject
17
- from arelle.ValidateXbrl import ValidateXbrl
18
- from arelle.XmlValidateConst import VALID
19
19
  from arelle.typing import TypeGetText
20
20
  from arelle.utils.PluginHooks import ValidationHook
21
21
  from arelle.utils.validate.Decorator import validation
22
22
  from arelle.utils.validate.Validation import Validation
23
+ from arelle.ValidateXbrl import ValidateXbrl
24
+ from arelle.XmlValidateConst import VALID
25
+
23
26
  from ..Constants import JAPAN_LANGUAGE_CODES
24
- from ..DisclosureSystems import (DISCLOSURE_SYSTEM_EDINET)
27
+ from ..DisclosureSystems import DISCLOSURE_SYSTEM_EDINET
25
28
  from ..PluginValidationDataExtension import PluginValidationDataExtension
26
- from ..ReportFolderType import ReportFolderType, HTML_EXTENSIONS, IMAGE_EXTENSIONS
29
+ from ..ReportFolderType import HTML_EXTENSIONS, IMAGE_EXTENSIONS, ReportFolderType
27
30
 
28
31
  if TYPE_CHECKING:
29
32
  from ..ControllerPluginData import ControllerPluginData
@@ -52,7 +55,7 @@ FILE_COUNT_LIMITS = {
52
55
  Path("XBRL"): 99_990,
53
56
  }
54
57
 
55
- FILENAME_STEM_PATTERN = re.compile(r'[a-zA-Z0-9_-]*')
58
+ FILENAME_STEM_PATTERN = regex.compile(r'[a-zA-Z0-9_-]*')
56
59
 
57
60
 
58
61
  @validation(
@@ -302,7 +305,7 @@ def rule_EC0188E(
302
305
  """
303
306
  EDINET.EC0188E: There is an HTML file directly under PublicDoc or PrivateDoc whose first 7 characters are not numbers.
304
307
  """
305
- pattern = re.compile(r'^\d{7}')
308
+ pattern = regex.compile(r'^\d{7}')
306
309
  uploadFilepaths = pluginData.getUploadFilepaths(fileSource)
307
310
  docFolders = frozenset({"PublicDoc", "PrivateDoc"})
308
311
  for path in uploadFilepaths:
@@ -3,21 +3,22 @@ See COPYRIGHT.md for copyright information.
3
3
  """
4
4
  from __future__ import annotations
5
5
 
6
- from datetime import date, timedelta
7
- from dateutil import relativedelta
8
6
  from collections.abc import Iterable
9
- from typing import Any, cast, TYPE_CHECKING
7
+ from datetime import date, timedelta
8
+ from typing import TYPE_CHECKING, Any, cast
10
9
 
11
- from regex import regex
10
+ import regex
11
+ from dateutil import relativedelta
12
12
 
13
- from arelle import XmlUtil, XbrlConst
13
+ from arelle import XbrlConst, XmlUtil
14
14
  from arelle.ModelObject import ModelObject
15
- from arelle.ValidateXbrl import ValidateXbrl
16
- from arelle.XmlValidate import INVALID
17
15
  from arelle.typing import TypeGetText
18
16
  from arelle.utils.PluginHooks import ValidationHook
19
17
  from arelle.utils.validate.Decorator import validation
20
18
  from arelle.utils.validate.Validation import Validation
19
+ from arelle.ValidateXbrl import ValidateXbrl
20
+ from arelle.XmlValidate import INVALID
21
+
21
22
  from ..DisclosureSystems import (
22
23
  DISCLOSURE_SYSTEM_NT16,
23
24
  DISCLOSURE_SYSTEM_NT17,
@@ -3,36 +3,37 @@ See COPYRIGHT.md for copyright information.
3
3
  """
4
4
  from __future__ import annotations
5
5
 
6
- import re
7
6
  from collections import defaultdict
8
7
  from collections.abc import Iterable
9
8
  from datetime import date
10
- from typing import Any, cast, TYPE_CHECKING
9
+ from typing import TYPE_CHECKING, Any, cast
11
10
 
11
+ import regex
12
12
  from lxml.etree import Element
13
13
 
14
+ from arelle import ModelDocument, XbrlConst, XmlUtil
14
15
  from arelle.LinkbaseType import LinkbaseType
15
16
  from arelle.ModelDtsObject import ModelConcept, ModelLink, ModelResource, ModelType
16
17
  from arelle.ModelInstanceObject import ModelInlineFact
17
18
  from arelle.ModelObject import ModelObject
18
19
  from arelle.PrototypeDtsObject import PrototypeObject
19
- from arelle.ValidateDuplicateFacts import getDuplicateFactSets
20
- from arelle.XbrlConst import parentChild, standardLabel
21
- from arelle.XmlValidateConst import VALID
22
-
23
- from arelle import XbrlConst, XmlUtil, ModelDocument
24
- from arelle.ValidateXbrl import ValidateXbrl
25
20
  from arelle.typing import TypeGetText
26
21
  from arelle.utils.PluginHooks import ValidationHook
27
22
  from arelle.utils.validate.Decorator import validation
28
23
  from arelle.utils.validate.DetectScriptsInXhtml import containsScriptMarkers
29
24
  from arelle.utils.validate.ESEFImage import ImageValidationParameters, validateImage
30
25
  from arelle.utils.validate.Validation import Validation
31
- from arelle.ValidateDuplicateFacts import getHashEquivalentFactGroups, getAspectEqualFacts
32
- from ..DisclosureSystems import (ALL_NL_INLINE_DISCLOSURE_SYSTEMS, NL_INLINE_GAAP_IFRS_DISCLOSURE_SYSTEMS,
33
- NL_INLINE_GAAP_OTHER_DISCLOSURE_SYSTEMS)
26
+ from arelle.ValidateDuplicateFacts import getAspectEqualFacts, getDuplicateFactSets, getHashEquivalentFactGroups
27
+ from arelle.ValidateXbrl import ValidateXbrl
28
+ from arelle.XbrlConst import parentChild, standardLabel
29
+ from arelle.XmlValidateConst import VALID
30
+
31
+ from ..DisclosureSystems import (
32
+ ALL_NL_INLINE_DISCLOSURE_SYSTEMS,
33
+ NL_INLINE_GAAP_IFRS_DISCLOSURE_SYSTEMS,
34
+ NL_INLINE_GAAP_OTHER_DISCLOSURE_SYSTEMS,
35
+ )
34
36
  from ..PluginValidationDataExtension import (
35
- PluginValidationDataExtension,
36
37
  ALLOWABLE_LANGUAGES,
37
38
  DEFAULT_MEMBER_ROLE_URI,
38
39
  DISALLOWED_IXT_NAMESPACES,
@@ -45,15 +46,16 @@ from ..PluginValidationDataExtension import (
45
46
  TAXONOMY_URLS_BY_YEAR,
46
47
  XBRLI_IDENTIFIER_PATTERN,
47
48
  XBRLI_IDENTIFIER_SCHEMA,
49
+ PluginValidationDataExtension,
48
50
  )
49
51
 
50
52
  if TYPE_CHECKING:
51
- from arelle.ModelXbrl import ModelXbrl
52
53
  from arelle.ModelValue import QName
54
+ from arelle.ModelXbrl import ModelXbrl
53
55
 
54
56
  _: TypeGetText
55
57
 
56
- DOCTYPE_XHTML_PATTERN = re.compile(r"^<!(?:DOCTYPE\s+)\s*html(?:PUBLIC\s+)?(?:.*-//W3C//DTD\s+(X?HTML)\s)?.*>$", re.IGNORECASE)
58
+ DOCTYPE_XHTML_PATTERN = regex.compile(r"^<!(?:DOCTYPE\s+)\s*html(?:PUBLIC\s+)?(?:.*-//W3C//DTD\s+(X?HTML)\s)?.*>$", regex.IGNORECASE)
57
59
 
58
60
 
59
61
  def _getReportingPeriodDateValue(modelXbrl: ModelXbrl, qname: QName) -> date | None:
@@ -38,12 +38,18 @@ IMG_URL_CSS_PROPERTIES = frozenset([
38
38
  EMPTYDICT = {}
39
39
  _6_APR_2008 = dateTime("2008-04-06", type=DATE)
40
40
 
41
- COMMON_GENERIC_DIMENSIONS = {
41
+ GENERIC_DIMENSION_VALIDATIONS = {
42
+ # "LocalName": (range of numbers if any, first item name, 2nd choice item name if any)
43
+ "SpecificDiscontinuedOperation": (1, 8, "DescriptionDiscontinuedOperationOrNon-currentAssetsOrDisposalGroupHeldForSale"),
44
+ "SpecificNon-currentAssetsDisposalGroupHeldForSale": (1, 8, "DescriptionDiscontinuedOperationOrNon-currentAssetsOrDisposalGroupHeldForSale"),
42
45
  "Chairman": ("NameEntityOfficer",),
43
46
  "ChiefExecutive": ("NameEntityOfficer",),
44
47
  "ChairmanChiefExecutive": ("NameEntityOfficer",),
45
48
  "SeniorPartnerLimitedLiabilityPartnership": ("NameEntityOfficer",),
46
- "HighestPaidDirector": ("NameEntityOfficer",),
49
+ "CorporateTrustee": (1, 3, "NameEntityOfficer"),
50
+ "DirectorOfCorporateTrustee": ("NameEntityOfficer",),
51
+ "CustodianTrustee": ("NameEntityOfficer",),
52
+ "Trustee": (1, 20, "NameEntityOfficer",),
47
53
  "CompanySecretary": (1, 2, "NameEntityOfficer",),
48
54
  "CompanySecretaryDirector": (1, 2, "NameEntityOfficer",),
49
55
  "Director": (1, 40, "NameEntityOfficer",),
@@ -60,7 +66,7 @@ COMMON_GENERIC_DIMENSIONS = {
60
66
  "UnconsolidatedStructuredEntity": (1, 5, "NameUnconsolidatedStructuredEntity"),
61
67
  "IntermediateParent": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
62
68
  "EntityWithJointControlOrSignificantInfluence": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
63
- "AnotherGroupMember": (1, 8, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
69
+ "OtherGroupMember": (1, 8, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
64
70
  "KeyManagementIndividualGroup": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
65
71
  "CloseFamilyMember": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
66
72
  "EntityControlledByKeyManagementPersonnel": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
@@ -77,6 +83,7 @@ COMMON_GENERIC_DIMENSIONS = {
77
83
  "OtherPost-employmentBenefitPlan": (1, 2, "NameDefinedContributionPlan", "NameDefinedBenefitPlan"),
78
84
  "OtherContractType": (1, 2, "DescriptionOtherContractType"),
79
85
  "OtherDurationType": (1, 2, "DescriptionOtherContractDurationType"),
86
+ "OtherChannelType": (1, 2, "DescriptionOtherSalesChannelType"),
80
87
  "SalesChannel": (1, 2, "DescriptionOtherSalesChannelType"),
81
88
  }
82
89
 
@@ -115,33 +122,6 @@ MUST_HAVE_ONE_ITEM = {
115
122
  }
116
123
  }
117
124
 
118
- GENERIC_DIMENSION_VALIDATION = {
119
- # "taxonomyType": { "LocalName": (range of numbers if any, first item name, 2nd choice item name if any)
120
- "ukGAAP": COMMON_GENERIC_DIMENSIONS,
121
- "ukIFRS": COMMON_GENERIC_DIMENSIONS,
122
- "charities": {
123
- **COMMON_GENERIC_DIMENSIONS,
124
- **{
125
- "Trustee": (1, 20, "NameEntityOfficer"),
126
- "CorporateTrustee": (1, 3, "NameEntityOfficer"),
127
- "CustodianTrustee": (1, 3, "NameEntityOfficer"),
128
- "Director1CorporateTrustee": ("NameEntityOfficer",),
129
- "Director2CorporateTrustee": ("NameEntityOfficer",),
130
- "Director3CorporateTrustee": ("NameEntityOfficer",),
131
- "TrusteeTrustees": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
132
- "CloseFamilyMemberTrusteeTrustees": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
133
- "EntityControlledTrustees": (1, 5, "NameOrDescriptionRelatedPartyIfNotDefinedByAnotherTag"),
134
- "Activity": (1, 50, "DescriptionActivity"),
135
- "MaterialFund": (1, 50, "DescriptionsMaterialFund"),
136
- "LinkedCharity": (1, 5, "DescriptionActivitiesLinkedCharity"),
137
- "NameGrantRecipient": (1, 50, "NameSpecificInstitutionalGrantRecipient"),
138
- "ConcessionaryLoan": (1, 50, "DescriptionConcessionaryLoan"),
139
- }
140
- },
141
- "FRS": COMMON_GENERIC_DIMENSIONS,
142
- "FRS-2022": COMMON_GENERIC_DIMENSIONS
143
- }
144
-
145
125
  ALLOWED_IMG_MIME_TYPES = (
146
126
  "data:image/gif;base64",
147
127
  "data:image/jpeg;base64", "data:image/jpg;base64", # note both jpg and jpeg are in use
@@ -243,7 +223,7 @@ def validateXbrlFinally(val, *args, **kwargs):
243
223
  else:
244
224
  l = _memName
245
225
  n = None
246
- gdv = GENERIC_DIMENSION_VALIDATION.get(val.txmyType, EMPTYDICT).get(l)
226
+ gdv = GENERIC_DIMENSION_VALIDATIONS.get(l)
247
227
  if (gdv and (n is None or
248
228
  (isinstance(gdv[0],int) and isinstance(gdv[1],int) and n >= gdv[0] and n <= gdv[1]))):
249
229
  gdvFacts = [f for f in gdv if isinstance(f,str)]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: arelle-release
3
- Version: 2.37.66
3
+ Version: 2.37.68
4
4
  Summary: An open source XBRL platform.
5
5
  Author-email: "arelle.org" <support@arelle.org>
6
6
  License-Expression: Apache-2.0
@@ -1,12 +1,12 @@
1
1
  arelle/Aspect.py,sha256=Pn9I91D1os1RTVj6htuxTfRzVMhmVDtrbKvV_zy9xMI,5470
2
2
  arelle/BetaFeatures.py,sha256=T_tPac-FiozHyYLCemt0RoHJ1JahUE71L-0tHmIRKpE,858
3
- arelle/Cntlr.py,sha256=HQ9JfpByqRf-C-ub07ALWMWUO2LIFev8tcmqpXjHW9s,31718
4
- arelle/CntlrCmdLine.py,sha256=uzHyES0xyIZ9OSksU8Hg78tfOiHS0t9xhFo-DLpCOK0,88956
3
+ arelle/Cntlr.py,sha256=GvHkm1ev2hf6rWPA4g3a62YEJOWxz5lZOa2Dq1X1lnM,31721
4
+ arelle/CntlrCmdLine.py,sha256=St0iKu8TcMFNGcoG5L4njBA1a2N6s6LuUNbWtqVToYE,88944
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
8
8
  arelle/CntlrWebMain.py,sha256=_jhosP0Pg-erutBRzTVsL0cmWVgbc6z0WIIlNO-z1N4,50712
9
- arelle/CntlrWinMain.py,sha256=SWMdTK4Vv1I8cFpVBxbPiJwfuGn7yMbNDbNZM9UYn9E,98220
9
+ arelle/CntlrWinMain.py,sha256=59zdQBBSZpaSI0_X2gPSMTSY6i80u4H2Yo-jGJGwZVc,98063
10
10
  arelle/CntlrWinTooltip.py,sha256=6MzoAIfkYnNu_bl_je8n0adhwmKxAIcymkg9Tij9Z4M,7951
11
11
  arelle/DialogAbout.py,sha256=XXzMV0fO4BQ3-l1Puirzmn7EZEdmgJg7JNYdJm1FueM,1987
12
12
  arelle/DialogArcroleGroup.py,sha256=r81OT3LFmMkoROpFenk97oVEyQhibKZ1QgDHvMsyCl0,7547
@@ -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=7mP6Dryl-C9zKK-ALa3HCZHkwF-7BbhH__zd8ouxGn0,708
128
+ arelle/_version.py,sha256=qh1yDpT2z-PpR-NJRv0w_TqdxkiOFXztPW4E-tALlsU,708
129
129
  arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
130
130
  arelle/api/Session.py,sha256=a71ML4FOkWxeqxQBRu6WUqkUoI4C5R6znzAQcbGR5jg,7902
131
131
  arelle/config/creationSoftwareNames.json,sha256=5MK7XUjfDJ9OpRCCHXeOErJ1SlTBZji4WEcEOdOacx0,3128
@@ -300,7 +300,7 @@ arelle/plugin/validate/CIPC/Const.py,sha256=GSiODyiK8V9P-pV0_DPEKYAhe2wqgcYJP2Qt
300
300
  arelle/plugin/validate/CIPC/__init__.py,sha256=R6KVETICUpfW--TvVkFNDo-67Kq_KpWz3my2ECkiKxM,14699
301
301
  arelle/plugin/validate/CIPC/config.xml,sha256=4pyn40JAvQQeoRC8I046gZ4ZcmUnekX3TNfYpC5yonI,667
302
302
  arelle/plugin/validate/DBA/DisclosureSystems.py,sha256=Dp_r-Pa3tahtCfDha2Zc97N0iyrY4Zagb8w2D9ErILg,294
303
- arelle/plugin/validate/DBA/PluginValidationDataExtension.py,sha256=y9W5S5QeuBoDkZra7fFp3gHQhB8R0cPifbs21QlHQQI,7240
303
+ arelle/plugin/validate/DBA/PluginValidationDataExtension.py,sha256=F_fKc811Dq7l7hH2zoC67iI3wOmZKqtEBgufoYKyhyc,7210
304
304
  arelle/plugin/validate/DBA/ValidationPluginExtension.py,sha256=UygF7oELnPJcP6Ta0ncy3dy5fnJq-Mz6N2-gEaVhigo,48690
305
305
  arelle/plugin/validate/DBA/__init__.py,sha256=KhmlUkqgsRtEXpu5DZBXFzv43nUTvi-0sdDNRfw5Up4,1564
306
306
  arelle/plugin/validate/DBA/resources/config.xml,sha256=KHfo7SrjzmjHbfwIJBmESvOOjdIv4Av26BCcZxfn3Pg,875
@@ -312,7 +312,7 @@ 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=6POa7ftTNQAV1td5WYGbzPGSXpWfAE9bfbXNFnTqfOI,8146
315
+ arelle/plugin/validate/EDINET/Constants.py,sha256=Rdwait6p9IYxTQLhfNcyg9WhbW-_Kpg7EX2223_ty3g,8242
316
316
  arelle/plugin/validate/EDINET/ContextRequirement.py,sha256=BejN3uz6TCSzR1qfQm-PZMbkhJlgUH9NVrY2Ux-Ph78,5217
317
317
  arelle/plugin/validate/EDINET/ControllerPluginData.py,sha256=8FVFpqh25NaxRKWn5qlK23qD6XDUOvNXRW35O6X9hTk,11599
318
318
  arelle/plugin/validate/EDINET/CoverItemRequirements.py,sha256=1YdzlSgc5MlUGyw81Ipv37CLxsdpSw8CO90snjgqLzw,1852
@@ -323,7 +323,7 @@ arelle/plugin/validate/EDINET/FormType.py,sha256=jFqjJACJJ4HhkY1t6Fqei0z6rgvH3Mp
323
323
  arelle/plugin/validate/EDINET/ManifestInstance.py,sha256=o6BGlaQHSsn6D0VKH4zn59UscKnjTKlo99kSGfGdYlU,6910
324
324
  arelle/plugin/validate/EDINET/PluginValidationDataExtension.py,sha256=rFzAR8VbVcCO2IO1qp6TGWpBQd2rsOES-Ta2UOKOmDs,31309
325
325
  arelle/plugin/validate/EDINET/ReportFolderType.py,sha256=-p_byoOLP6wAyEiPtSN2iMMl68m5vPh__hHTYgypxH8,4612
326
- arelle/plugin/validate/EDINET/Statement.py,sha256=CGq8c647pIEBQtOv8AL0U4knT8HofOdK8IaUjHrcOYU,9331
326
+ arelle/plugin/validate/EDINET/Statement.py,sha256=twW0Grv4IM_zjCo425YYcdKpPPZqn9t-ROEK2y3AoQ8,9320
327
327
  arelle/plugin/validate/EDINET/TableOfContentsBuilder.py,sha256=-TsPfIdtgOCdvUh-H8EZo3B5A63ti7rIDXHCUnt_us8,21760
328
328
  arelle/plugin/validate/EDINET/UploadContents.py,sha256=o29mDoX48M3S2jQqrJO4ZaulltAPt4vD-qdsWTMCUPc,1196
329
329
  arelle/plugin/validate/EDINET/ValidationPluginExtension.py,sha256=8LNqvXzNaWP54dShEjet5ely4BnM8ByCSyimKpUx3_s,2577
@@ -333,12 +333,12 @@ arelle/plugin/validate/EDINET/resources/cover-item-requirements.json,sha256=K5j2
333
333
  arelle/plugin/validate/EDINET/resources/dei-requirements.csv,sha256=8ILKNn8bXbcgG9V0lc8mxorKDKEjJQWLdBQRMvbqtkI,6518
334
334
  arelle/plugin/validate/EDINET/resources/edinet-taxonomies.xml,sha256=YXaPu-60CI2s0S-vXcLDEXCrrukEAAHyCEk0QRhrYR8,16772
335
335
  arelle/plugin/validate/EDINET/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
336
- arelle/plugin/validate/EDINET/rules/contexts.py,sha256=fSYIZOWg3Q3cDos17hNAvw1HUVdcZx7IlUFfBJnwjHo,19604
337
- arelle/plugin/validate/EDINET/rules/edinet.py,sha256=mGqPXCJgy1SXb5Qhn3OpZZKbU7Rq3OeW-pDODFPvR4s,29714
336
+ arelle/plugin/validate/EDINET/rules/contexts.py,sha256=wEwIBPjEgWJHJrALxOV6qB1Lj_tws9ZnBT_twewn2js,21357
337
+ arelle/plugin/validate/EDINET/rules/edinet.py,sha256=aZ6zeUMprffP2tOw26Ch65MExdXkW2HmPxTG6GB9OTE,36707
338
338
  arelle/plugin/validate/EDINET/rules/frta.py,sha256=wpX5zK0IfVVYZR9ELy2g_Z_F1Jzhwd9gh_KZC5ALkLg,12756
339
339
  arelle/plugin/validate/EDINET/rules/gfm.py,sha256=l5XHOBqyorub0LaQ7lA6oISy4oSynNFz4ilW9-Br89A,92060
340
340
  arelle/plugin/validate/EDINET/rules/manifests.py,sha256=MoT9R_a4BzuYdQVbF7RC5wz134Ve68svSdJ3NlpO_AU,4026
341
- arelle/plugin/validate/EDINET/rules/upload.py,sha256=kG-zihz16ow_B6lGOYEqyH84Mx9sIqSX1_m0sSQfV3Q,52875
341
+ arelle/plugin/validate/EDINET/rules/upload.py,sha256=HhY7i_AdU94mEkpIoxwew4xNI9oP3HuM3EoZZl37ZjM,52911
342
342
  arelle/plugin/validate/ESEF/Const.py,sha256=JujF_XV-_TNsxjGbF-8SQS4OOZIcJ8zhCMnr-C1O5Ho,22660
343
343
  arelle/plugin/validate/ESEF/Dimensions.py,sha256=MOJM7vwNPEmV5cu-ZzPrhx3347ZvxgD6643OB2HRnIk,10597
344
344
  arelle/plugin/validate/ESEF/Util.py,sha256=QH3btcGqBpr42M7WSKZLSdNXygZaZLfEiEjlxoG21jE,7950
@@ -361,11 +361,11 @@ arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=oeiHGtCvpF9oCELWV-
361
361
  arelle/plugin/validate/NL/__init__.py,sha256=W-SHohiAWM7Yi77gAbt-D3vvZNAB5s1j16mHCTFta6w,3158
362
362
  arelle/plugin/validate/NL/resources/config.xml,sha256=qBE6zywFSmemBSWonuTII5iuOCUlNb1nvkpMbsZb5PM,1853
363
363
  arelle/plugin/validate/NL/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
364
- arelle/plugin/validate/NL/rules/br_kvk.py,sha256=0SwKieWzTDm3YMsXPS6zTdgbk7_Z9CzqRkRmCRz1OiQ,15789
364
+ arelle/plugin/validate/NL/rules/br_kvk.py,sha256=O_8TlrK5SItLUgLw2qx9LSXh_bPNSPHZ_PJY8Q11MOk,15779
365
365
  arelle/plugin/validate/NL/rules/fg_nl.py,sha256=OJF2EYx4KDTdNggHiw5Trq5S5g7WGpbb7YvO6_IrrGU,10704
366
366
  arelle/plugin/validate/NL/rules/fr_kvk.py,sha256=kYqXt45S6eM32Yg9ii7pUhOMfJaHurgYqQ73FyQALs8,8171
367
367
  arelle/plugin/validate/NL/rules/fr_nl.py,sha256=ZoyiRsTyqTNZB_VgcdabmeNi6v7DY6jMxzaP6ppLtIU,31387
368
- arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=c9QOB5tnEmCHfAzPvYQA78fzpUeMMOL1nhSGBDrFJko,90082
368
+ arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=hysgvKFIOeTHJedadAITp4Ju8GgU93OXp1yqr9TA9wg,90032
369
369
  arelle/plugin/validate/ROS/DisclosureSystems.py,sha256=rJ81mwQDYTi6JecFZ_zhqjjz3VNQRgjHNSh0wcQWAQE,18
370
370
  arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=9_dxO20B3TRVElv0jZ_YW7tZbG3HihzRowg7W-397is,4379
371
371
  arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=U5EtwSW3eGvvvgVk9JgcUueJn604a4J6C2Fsk_CHQy0,874
@@ -375,7 +375,7 @@ arelle/plugin/validate/ROS/resources/config.xml,sha256=HXWume5HlrAqOx5AtiWWqgADb
375
375
  arelle/plugin/validate/ROS/rules/__init__.py,sha256=wW7BUAIb7sRkOxC1Amc_ZKrz03FM-Qh1TyZe6wxYaAU,1567
376
376
  arelle/plugin/validate/ROS/rules/ros.py,sha256=CRZkZfsKe4y1B-PDkazQ_cD5LRZBk1GJjTscCZXXYUI,21173
377
377
  arelle/plugin/validate/UK/ValidateUK.py,sha256=UwNR3mhFzWNn6RKLSiC7j3LlMlConOx-9gWGovKamHA,61035
378
- arelle/plugin/validate/UK/__init__.py,sha256=GT67T_7qpOASzdmgRXFPmLxfPg3Gjubli7luQDK3zck,27462
378
+ arelle/plugin/validate/UK/__init__.py,sha256=tKAcsYzwopWbhY863sZE7kmOEaQbAGSABcAouhzTPcc,26589
379
379
  arelle/plugin/validate/UK/config.xml,sha256=mUFhWDfBzGTn7v0ZSmf4HaweQTMJh_4ZcJmD9mzCHrA,1547
380
380
  arelle/plugin/validate/UK/consistencyChecksByName.json,sha256=BgB9YAWzmcsX-_rU74RBkABwEsS75vrMlwBHsYCz2R0,25247
381
381
  arelle/plugin/validate/UK/hmrc-taxonomies.xml,sha256=3lR-wb2sooAddQkVqqRzG_VqLuHq_MQ8kIaXAQs1KVk,9623
@@ -688,9 +688,9 @@ arelle/utils/validate/ValidationUtil.py,sha256=hghMQoNuC3ocs6kkNtIQPhh8QwzubwHGt
688
688
  arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
689
689
  arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
690
690
  arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
691
- arelle_release-2.37.66.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
692
- arelle_release-2.37.66.dist-info/METADATA,sha256=_ztovOi_5js6O0w_nldk5c99k8B_ZpFp2TDTj4jKits,9355
693
- arelle_release-2.37.66.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
694
- arelle_release-2.37.66.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
695
- arelle_release-2.37.66.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
696
- arelle_release-2.37.66.dist-info/RECORD,,
691
+ arelle_release-2.37.68.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
692
+ arelle_release-2.37.68.dist-info/METADATA,sha256=VgnB8qmdhdmMFTbU4XVY6nOvBJiUpSDW5WjRTDkr8ak,9355
693
+ arelle_release-2.37.68.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
694
+ arelle_release-2.37.68.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
695
+ arelle_release-2.37.68.dist-info/top_level.txt,sha256=fwU7SYawL4_r-sUMRg7r1nYVGjFMSDvRWx8VGAXEw7w,7
696
+ arelle_release-2.37.68.dist-info/RECORD,,