arelle-release 2.37.3__py3-none-any.whl → 2.37.5__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 -1
- arelle/CntlrWinMain.py +0 -1
- arelle/DisclosureSystem.py +10 -1
- arelle/FileSource.py +19 -7
- arelle/_version.py +2 -2
- 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/plugin/validate/CIPC/Const.py +0 -1
- arelle/plugin/validate/NL/PluginValidationDataExtension.py +64 -5
- arelle/plugin/validate/NL/ValidationPluginExtension.py +10 -5
- arelle/plugin/validate/NL/rules/nl_kvk.py +152 -0
- {arelle_release-2.37.3.dist-info → arelle_release-2.37.5.dist-info}/METADATA +1 -2
- {arelle_release-2.37.3.dist-info → arelle_release-2.37.5.dist-info}/RECORD +22 -22
- {arelle_release-2.37.3.dist-info → arelle_release-2.37.5.dist-info}/WHEEL +1 -1
- {arelle_release-2.37.3.dist-info → arelle_release-2.37.5.dist-info}/licenses/LICENSE.md +0 -3
- tests/resources/conformance_suites/nl_nt16/fr_nl/1-04-invalid.xbrl +5 -0
- tests/resources/conformance_suites/nl_nt17/fr_nl/1-04-invalid.xbrl +5 -0
- tests/resources/conformance_suites/nl_nt18/fr_nl/1-04-invalid.xbrl +5 -0
- tests/resources/conformance_suites/nl_nt19/fr_nl/1-04-invalid.xbrl +5 -0
- {arelle_release-2.37.3.dist-info → arelle_release-2.37.5.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.3.dist-info → arelle_release-2.37.5.dist-info}/top_level.txt +0 -0
arelle/CntlrCmdLine.py
CHANGED
|
@@ -405,7 +405,7 @@ def parseArgs(args):
|
|
|
405
405
|
if hasWebServer():
|
|
406
406
|
parser.add_option("--webserver", action="store", dest="webserver",
|
|
407
407
|
help=_("start web server on host:port[:server] for REST and web access, e.g., --webserver locahost:8080, "
|
|
408
|
-
"or specify nondefault a server name, such as
|
|
408
|
+
"or specify nondefault a server name, such as cheroot, --webserver locahost:8080:cheroot. "
|
|
409
409
|
"(It is possible to specify options to be defaults for the web server, such as disclosureSystem and validations, but not including file names.) "))
|
|
410
410
|
pluginOptionsIndex = len(parser.option_list)
|
|
411
411
|
pluginOptionsGroupIndex = len(parser.option_groups)
|
arelle/CntlrWinMain.py
CHANGED
|
@@ -1487,7 +1487,6 @@ class CntlrWinMain (Cntlr.Cntlr):
|
|
|
1487
1487
|
"\n PyParsing \u00a9 2003-2013 Paul T. McGuire"
|
|
1488
1488
|
"\n lxml {lxmlVersion} \u00a9 2004 Infrae, ElementTree \u00a9 1999-2004 by Fredrik Lundh"
|
|
1489
1489
|
"\n Bottle \u00a9 2009-2024 Marcel Hellkamp"
|
|
1490
|
-
"\n CherryPy \u00a9 2004-2019 CherryPy Team"
|
|
1491
1490
|
"\n May include installable plug-in modules with author-specific license terms").format(
|
|
1492
1491
|
version=Version.__version__,
|
|
1493
1492
|
wordSize=self.systemWordSize,
|
arelle/DisclosureSystem.py
CHANGED
|
@@ -396,7 +396,7 @@ class DisclosureSystem:
|
|
|
396
396
|
level=logging.ERROR)
|
|
397
397
|
etree.clear_error_log()
|
|
398
398
|
|
|
399
|
-
def mappedUrl(self, url):
|
|
399
|
+
def mappedUrl(self, url: str) -> str:
|
|
400
400
|
if url in self.mappedFiles:
|
|
401
401
|
mappedUrl = self.mappedFiles[url]
|
|
402
402
|
else: # handle mapped paths
|
|
@@ -407,6 +407,15 @@ class DisclosureSystem:
|
|
|
407
407
|
break
|
|
408
408
|
return mappedUrl
|
|
409
409
|
|
|
410
|
+
def isMappedUrl(self, url: str) -> bool:
|
|
411
|
+
if url in self.mappedFiles:
|
|
412
|
+
return True
|
|
413
|
+
else: # handle mapped paths
|
|
414
|
+
for mapFrom, mapTo in self.mappedPaths:
|
|
415
|
+
if url.startswith(mapFrom):
|
|
416
|
+
return True
|
|
417
|
+
return False
|
|
418
|
+
|
|
410
419
|
def uriAuthorityValid(self, uri):
|
|
411
420
|
if self.standardTaxonomiesUrl:
|
|
412
421
|
return UrlUtil.authority(uri) in self.standardAuthorities
|
arelle/FileSource.py
CHANGED
|
@@ -191,7 +191,11 @@ class FileSource:
|
|
|
191
191
|
if not self.isZip:
|
|
192
192
|
# Try to detect zip files with unrecognized file extensions.
|
|
193
193
|
try:
|
|
194
|
-
|
|
194
|
+
if self.cntlr is not None and hasattr(self.cntlr, "modelManager"):
|
|
195
|
+
basefile = self.cntlr.webCache.getfilename( # cache remapping
|
|
196
|
+
self.cntlr.modelManager.disclosureSystem.mappedUrl(self.url)) # local remapping
|
|
197
|
+
else:
|
|
198
|
+
basefile = self.url
|
|
195
199
|
if basefile:
|
|
196
200
|
with openFileStream(self.cntlr, basefile, 'rb') as fileStream:
|
|
197
201
|
self.isZip = zipfile.is_zipfile(fileStream)
|
|
@@ -213,7 +217,8 @@ class FileSource:
|
|
|
213
217
|
elif checkIfXmlIsEis:
|
|
214
218
|
try:
|
|
215
219
|
assert self.cntlr is not None
|
|
216
|
-
_filename = self.cntlr.webCache.getfilename(
|
|
220
|
+
_filename = self.cntlr.webCache.getfilename(
|
|
221
|
+
self.cntlr.modelManager.disclosureSystem.mappedUrl(self.url))
|
|
217
222
|
assert _filename is not None
|
|
218
223
|
file = open(_filename, errors='replace')
|
|
219
224
|
l = file.read(256) # may have comments before first element
|
|
@@ -234,7 +239,8 @@ class FileSource:
|
|
|
234
239
|
if self.isValid and not self.isOpen:
|
|
235
240
|
if (self.isZip or self.isTarGz or self.isEis or self.isXfd or self.isRss or self.isInstalledTaxonomyPackage) and self.cntlr:
|
|
236
241
|
assert isinstance(self.url, str)
|
|
237
|
-
self.basefile = self.cntlr.webCache.getfilename(
|
|
242
|
+
self.basefile = self.cntlr.webCache.getfilename(
|
|
243
|
+
self.cntlr.modelManager.disclosureSystem.mappedUrl(self.url), reload=reloadCache)
|
|
238
244
|
else:
|
|
239
245
|
self.basefile = self.url
|
|
240
246
|
self.baseurl = self.url # url gets changed by selection
|
|
@@ -473,8 +479,11 @@ class FileSource:
|
|
|
473
479
|
|
|
474
480
|
def isMappedUrl(self, url: str) -> bool:
|
|
475
481
|
if self.mappedPaths is not None:
|
|
476
|
-
|
|
477
|
-
for mapFrom in self.mappedPaths)
|
|
482
|
+
if any(url.startswith(mapFrom)
|
|
483
|
+
for mapFrom in self.mappedPaths):
|
|
484
|
+
return True
|
|
485
|
+
if self.cntlr and self.cntlr.modelManager.disclosureSystem.isMappedUrl(url):
|
|
486
|
+
return True
|
|
478
487
|
return False
|
|
479
488
|
|
|
480
489
|
def mappedUrl(self, url: str) -> str:
|
|
@@ -483,6 +492,8 @@ class FileSource:
|
|
|
483
492
|
if url.startswith(mapFrom):
|
|
484
493
|
url = mapTo + url[len(mapFrom):]
|
|
485
494
|
break
|
|
495
|
+
if self.cntlr:
|
|
496
|
+
return self.cntlr.modelManager.disclosureSystem.mappedUrl(url)
|
|
486
497
|
return url
|
|
487
498
|
|
|
488
499
|
def fileSourceContainingFilepath(self, filepath: str | None) -> FileSource | None:
|
|
@@ -807,11 +818,12 @@ def openFileStream(
|
|
|
807
818
|
cntlr
|
|
808
819
|
and hasattr(cntlr, "modelManager")
|
|
809
820
|
): # may be called early in initialization for PluginManager
|
|
810
|
-
filepath = cntlr.modelManager.disclosureSystem.mappedUrl(filepath)
|
|
821
|
+
filepath = cntlr.modelManager.disclosureSystem.mappedUrl(filepath)
|
|
811
822
|
if archiveFilenameParts(filepath): # file is in an archive
|
|
812
823
|
return openFileSource(filepath, cntlr).file(filepath, binary='b' in mode, encoding=encoding)[0]
|
|
813
824
|
if isHttpUrl(filepath) and cntlr:
|
|
814
|
-
_cacheFilepath = cntlr.webCache.getfilename(
|
|
825
|
+
_cacheFilepath = cntlr.webCache.getfilename(
|
|
826
|
+
cntlr.modelManager.disclosureSystem.mappedUrl(filepath), normalize=True) # normalize is separate step in ModelDocument retrieval, combined here
|
|
815
827
|
if _cacheFilepath is None:
|
|
816
828
|
raise OSError(_("Unable to open file: {0}.").format(filepath))
|
|
817
829
|
filepath = _cacheFilepath
|
arelle/_version.py
CHANGED
|
@@ -520,13 +520,13 @@ msgstr "تجميع إحصاءات تعريفية، مثل توقيتات اعم
|
|
|
520
520
|
msgid ""
|
|
521
521
|
"start web server on host:port[:server] for REST and web access, e.g., --"
|
|
522
522
|
"webserver locahost:8080, or specify nondefault a server name, such as "
|
|
523
|
-
"
|
|
523
|
+
"cheroot, --webserver locahost:8080:cheroot. (It is possible to specify "
|
|
524
524
|
"options to be defaults for the web server, such as disclosureSystem and "
|
|
525
525
|
"validations, but not including file names.) "
|
|
526
526
|
msgstr ""
|
|
527
527
|
"تشغيل الويب سيرفير على عنوان host:port[:server] لعمليات REST، مثال webserver "
|
|
528
|
-
"locahost:8080--، او تحديد نوع سيرفير اخر مثل
|
|
529
|
-
"webserver locahost:8080:
|
|
528
|
+
"locahost:8080--، او تحديد نوع سيرفير اخر مثل cheroot على سبيل المثال "
|
|
529
|
+
"webserver locahost:8080:cheroot--. (يمكن تحديد خيارات مفترضة للويب سيرفير "
|
|
530
530
|
"مثل disclosureSystem و validations ولا يتضمن ذلك اسم الملف.) "
|
|
531
531
|
|
|
532
532
|
#: CntlrCmdLine.py:379
|
|
@@ -2599,7 +2599,6 @@ msgstr ""
|
|
|
2599
2599
|
msgid ""
|
|
2600
2600
|
"\n"
|
|
2601
2601
|
" Bottle \\u00a9 2011-2013 Marcel Hellkamp\n"
|
|
2602
|
-
" CherryPy \\u00a9 2002-2013 CherryPy Team"
|
|
2603
2602
|
msgstr ""
|
|
2604
2603
|
|
|
2605
2604
|
#: CntlrWinMain.py:1343
|
arelle/locale/messages.pot
CHANGED
|
@@ -297,7 +297,7 @@ msgid "Collect profile statistics, such as timing of validation activities and f
|
|
|
297
297
|
msgstr ""
|
|
298
298
|
|
|
299
299
|
#: arelle\CntlrCmdLine.py:328
|
|
300
|
-
msgid "start web server on host:port[:server] for REST and web access, e.g., --webserver locahost:8080, or specify nondefault a server name, such as
|
|
300
|
+
msgid "start web server on host:port[:server] for REST and web access, e.g., --webserver locahost:8080, or specify nondefault a server name, such as cheroot, --webserver locahost:8080:cheroot. (It is possible to specify options to be defaults for the web server, such as disclosureSystem and validations, but not including file names.) "
|
|
301
301
|
msgstr ""
|
|
302
302
|
|
|
303
303
|
#: arelle\CntlrCmdLine.py:356
|
|
@@ -1572,7 +1572,6 @@ msgstr ""
|
|
|
1572
1572
|
msgid ""
|
|
1573
1573
|
"\n"
|
|
1574
1574
|
" Bottle © 2011-2013 Marcel Hellkamp\n"
|
|
1575
|
-
" CherryPy © 2002-2013 CherryPy Team"
|
|
1576
1575
|
msgstr ""
|
|
1577
1576
|
|
|
1578
1577
|
#: arelle\CntlrWinMain.py:1327
|
|
@@ -261,8 +261,8 @@ msgid "Collect profile statistics, such as timing of validation activities and f
|
|
|
261
261
|
msgstr "Собирать статистику профиля, например, время исполнения валидации."
|
|
262
262
|
|
|
263
263
|
#: arelle\CntlrCmdLine.py:308
|
|
264
|
-
msgid "start web server on host:port[:server] for REST and web access, e.g., --webserver locahost:8080, or specify nondefault a server name, such as
|
|
265
|
-
msgstr "запустите веб-сервер на host:port[:server] для REST и веб-доступа, например, --webserver locahost:8080, или укажите имя сервера не по умолчанию, например
|
|
264
|
+
msgid "start web server on host:port[:server] for REST and web access, e.g., --webserver locahost:8080, or specify nondefault a server name, such as cheroot, --webserver locahost:8080:cheroot. (It is possible to specify options to be defaults for the web server, such as disclosureSystem and validations, but not including file names.) "
|
|
265
|
+
msgstr "запустите веб-сервер на host:port[:server] для REST и веб-доступа, например, --webserver locahost:8080, или укажите имя сервера не по умолчанию, например cheroot, --webserver locahost:8080:cheroot. (Можно указать параметры по умолчанию для веб-сервера, такие как системы раскрытия информации и валиидаций, но не включая имена файлов.) "
|
|
266
266
|
|
|
267
267
|
#: arelle\CntlrCmdLine.py:336
|
|
268
268
|
msgid "Show product version, copyright, and license."
|
|
@@ -20,7 +20,6 @@ mustNotBeHiddenElements = [
|
|
|
20
20
|
"cipc-ca:DisclosureOfDirectorsResponsibilityExplanatory",
|
|
21
21
|
"cipc-ca:FullRegisteredNameOfCompany",
|
|
22
22
|
"cipc-ca:RegistrationNumberOfCompany",
|
|
23
|
-
"cipc-ca-enum:DescriptionOfNatureOfFinancialStatements",
|
|
24
23
|
"ifrs-full:DateOfEndOfReportingPeriod2013",
|
|
25
24
|
"ifrs-full:DescriptionOfNatureOfFinancialStatements",
|
|
26
25
|
"ifrs-full:DescriptionOfPresentationCurrency",
|
|
@@ -3,6 +3,8 @@ See COPYRIGHT.md for copyright information.
|
|
|
3
3
|
"""
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
|
+
from typing import cast, Any
|
|
7
|
+
|
|
6
8
|
import regex as re
|
|
7
9
|
from collections import defaultdict
|
|
8
10
|
from dataclasses import dataclass
|
|
@@ -11,6 +13,7 @@ from arelle.ModelInstanceObject import ModelUnit, ModelContext, ModelFact
|
|
|
11
13
|
from arelle.ModelValue import QName
|
|
12
14
|
from arelle.ModelXbrl import ModelXbrl
|
|
13
15
|
from arelle.utils.PluginData import PluginData
|
|
16
|
+
from arelle.XmlValidate import lexicalPatterns
|
|
14
17
|
|
|
15
18
|
|
|
16
19
|
XBRLI_IDENTIFIER_PATTERN = re.compile(r"^(?!00)\d{8}$")
|
|
@@ -18,20 +21,25 @@ XBRLI_IDENTIFIER_SCHEMA = 'http://www.kvk.nl/kvk-id'
|
|
|
18
21
|
|
|
19
22
|
@dataclass
|
|
20
23
|
class PluginValidationDataExtension(PluginData):
|
|
21
|
-
|
|
22
|
-
financialReportingPeriodCurrentEndDateQn: QName
|
|
23
|
-
financialReportingPeriodPreviousStartDateQn: QName
|
|
24
|
-
financialReportingPeriodPreviousEndDateQn: QName
|
|
25
|
-
formattedExplanationItemTypeQn: QName
|
|
24
|
+
chamberOfCommerceRegistrationNumberQn: QName
|
|
26
25
|
documentAdoptionDateQn: QName
|
|
27
26
|
documentAdoptionStatusQn: QName
|
|
28
27
|
documentResubmissionUnsurmountableInaccuraciesQn: QName
|
|
29
28
|
entrypointRoot: str
|
|
30
29
|
entrypoints: set[str]
|
|
30
|
+
financialReportingPeriodCurrentStartDateQn: QName
|
|
31
|
+
financialReportingPeriodCurrentEndDateQn: QName
|
|
32
|
+
financialReportingPeriodPreviousStartDateQn: QName
|
|
33
|
+
financialReportingPeriodPreviousEndDateQn: QName
|
|
34
|
+
formattedExplanationItemTypeQn: QName
|
|
31
35
|
textFormattingSchemaPath: str
|
|
32
36
|
textFormattingWrapper: str
|
|
33
37
|
|
|
34
38
|
_contextsByDocument: dict[str, list[ModelContext]] | None = None
|
|
39
|
+
_contextsWithImproperContent: list[ModelContext | None] | None = None
|
|
40
|
+
_contextsWithPeriodTime: list[ModelContext | None] | None = None
|
|
41
|
+
_contextsWithPeriodTimeZone: list[ModelContext | None] | None = None
|
|
42
|
+
_contextsWithSegments: list[ModelContext | None] | None = None
|
|
35
43
|
_entityIdentifiers: set[tuple[str, str]] | None = None
|
|
36
44
|
_factsByDocument: dict[str, list[ModelFact]] | None = None
|
|
37
45
|
_unitsByDocument: dict[str, list[ModelUnit]] | None = None
|
|
@@ -45,6 +53,33 @@ class PluginValidationDataExtension(PluginData):
|
|
|
45
53
|
self._contextsByDocument = dict(contextsByDocument)
|
|
46
54
|
return self._contextsByDocument
|
|
47
55
|
|
|
56
|
+
def checkContexts(self, allContexts: dict[str, list[ModelContext]]) -> None:
|
|
57
|
+
contextsWithImproperContent: list[ModelContext | None] = []
|
|
58
|
+
contextsWithPeriodTime: list[ModelContext | None] = []
|
|
59
|
+
contextsWithPeriodTimeZone: list[ModelContext | None] = []
|
|
60
|
+
contextsWithSegments: list[ModelContext | None] = []
|
|
61
|
+
datetimePattern = lexicalPatterns["XBRLI_DATEUNION"]
|
|
62
|
+
for contexts in allContexts.values():
|
|
63
|
+
for context in contexts:
|
|
64
|
+
for uncastElt in context.iterdescendants("{http://www.xbrl.org/2003/instance}startDate",
|
|
65
|
+
"{http://www.xbrl.org/2003/instance}endDate",
|
|
66
|
+
"{http://www.xbrl.org/2003/instance}instant"):
|
|
67
|
+
elt = cast(Any, uncastElt)
|
|
68
|
+
m = datetimePattern.match(elt.stringValue)
|
|
69
|
+
if m:
|
|
70
|
+
if m.group(1):
|
|
71
|
+
contextsWithPeriodTime.append(context)
|
|
72
|
+
if m.group(3):
|
|
73
|
+
contextsWithPeriodTimeZone.append(context)
|
|
74
|
+
if context.hasSegment:
|
|
75
|
+
contextsWithSegments.append(context)
|
|
76
|
+
if context.nonDimValues("scenario"): # type: ignore[no-untyped-call]
|
|
77
|
+
contextsWithImproperContent.append(context)
|
|
78
|
+
self._contextsWithImproperContent = contextsWithImproperContent
|
|
79
|
+
self._contextsWithPeriodTime = contextsWithPeriodTime
|
|
80
|
+
self._contextsWithPeriodTimeZone = contextsWithPeriodTimeZone
|
|
81
|
+
self._contextsWithSegments = contextsWithSegments
|
|
82
|
+
|
|
48
83
|
def entityIdentifiersInDocument(self, modelXbrl: ModelXbrl) -> set[tuple[str, str]]:
|
|
49
84
|
if self._entityIdentifiers is not None:
|
|
50
85
|
return self._entityIdentifiers
|
|
@@ -60,6 +95,30 @@ class PluginValidationDataExtension(PluginData):
|
|
|
60
95
|
self._factsByDocument = dict(factsByDocument)
|
|
61
96
|
return self._factsByDocument
|
|
62
97
|
|
|
98
|
+
def getContextsWithImproperContent(self, modelXbrl: ModelXbrl) -> list[ModelContext | None]:
|
|
99
|
+
if self._contextsWithImproperContent is None:
|
|
100
|
+
self.checkContexts(self.contextsByDocument(modelXbrl))
|
|
101
|
+
assert(self._contextsWithImproperContent is not None)
|
|
102
|
+
return self._contextsWithImproperContent
|
|
103
|
+
|
|
104
|
+
def getContextsWithPeriodTime(self, modelXbrl: ModelXbrl) -> list[ModelContext | None]:
|
|
105
|
+
if self._contextsWithPeriodTime is None:
|
|
106
|
+
self.checkContexts(self.contextsByDocument(modelXbrl))
|
|
107
|
+
assert(self._contextsWithPeriodTime is not None)
|
|
108
|
+
return self._contextsWithPeriodTime
|
|
109
|
+
|
|
110
|
+
def getContextsWithPeriodTimeZone(self, modelXbrl: ModelXbrl) -> list[ModelContext | None]:
|
|
111
|
+
if self._contextsWithPeriodTimeZone is None:
|
|
112
|
+
self.checkContexts(self.contextsByDocument(modelXbrl))
|
|
113
|
+
assert (self._contextsWithPeriodTimeZone is not None)
|
|
114
|
+
return self._contextsWithPeriodTimeZone
|
|
115
|
+
|
|
116
|
+
def getContextsWithSegments(self, modelXbrl: ModelXbrl) -> list[ModelContext | None]:
|
|
117
|
+
if self._contextsWithSegments is None:
|
|
118
|
+
self.checkContexts(self.contextsByDocument(modelXbrl))
|
|
119
|
+
assert(self._contextsWithSegments is not None)
|
|
120
|
+
return self._contextsWithSegments
|
|
121
|
+
|
|
63
122
|
def unitsByDocument(self, modelXbrl: ModelXbrl) -> dict[str, list[ModelUnit]]:
|
|
64
123
|
if self._unitsByDocument is not None:
|
|
65
124
|
return self._unitsByDocument
|
|
@@ -23,6 +23,7 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
23
23
|
jenvNamespace = 'http://www.nltaxonomie.nl/nt16/jenv/20211208/dictionary/jenv-bw2-data'
|
|
24
24
|
kvkINamespace = 'http://www.nltaxonomie.nl/nt16/kvk/20211208/dictionary/kvk-data'
|
|
25
25
|
nlTypesNamespace = 'http://www.nltaxonomie.nl/nt16/sbr/20210301/dictionary/nl-types'
|
|
26
|
+
titel9Namespace = ''
|
|
26
27
|
entrypointRoot = 'http://www.nltaxonomie.nl/nt16/kvk/20211208/entrypoints/'
|
|
27
28
|
entrypoints = {entrypointRoot + e for e in [
|
|
28
29
|
'kvk-rpt-jaarverantwoording-2021-ifrs-full.xsd',
|
|
@@ -59,6 +60,7 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
59
60
|
jenvNamespace = 'http://www.nltaxonomie.nl/nt17/jenv/20221214/dictionary/jenv-bw2-data'
|
|
60
61
|
kvkINamespace = 'http://www.nltaxonomie.nl/nt17/kvk/20221214/dictionary/kvk-data'
|
|
61
62
|
nlTypesNamespace = 'http://www.nltaxonomie.nl/nt17/sbr/20220301/dictionary/nl-types'
|
|
63
|
+
titel9Namespace = ''
|
|
62
64
|
entrypointRoot = 'http://www.nltaxonomie.nl/nt17/kvk/20221214/entrypoints/'
|
|
63
65
|
entrypoints = {entrypointRoot + e for e in [
|
|
64
66
|
'kvk-rpt-jaarverantwoording-2022-ifrs-full.xsd',
|
|
@@ -96,6 +98,7 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
96
98
|
jenvNamespace = 'http://www.nltaxonomie.nl/nt18/jenv/20231213/dictionary/jenv-bw2-data'
|
|
97
99
|
kvkINamespace = 'http://www.nltaxonomie.nl/nt18/kvk/20231213/dictionary/kvk-data'
|
|
98
100
|
nlTypesNamespace = 'http://www.nltaxonomie.nl/nt18/sbr/20230301/dictionary/nl-types'
|
|
101
|
+
titel9Namespace = ''
|
|
99
102
|
entrypointRoot = 'http://www.nltaxonomie.nl/nt18/kvk/20231213/entrypoints/'
|
|
100
103
|
entrypoints = {entrypointRoot + e for e in [
|
|
101
104
|
'kvk-rpt-jaarverantwoording-2023-ifrs-full.xsd',
|
|
@@ -133,6 +136,7 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
133
136
|
jenvNamespace = 'http://www.nltaxonomie.nl/nt19/jenv/20241211/dictionary/jenv-bw2-data'
|
|
134
137
|
kvkINamespace = 'http://www.nltaxonomie.nl/nt19/kvk/20241211/dictionary/kvk-data'
|
|
135
138
|
nlTypesNamespace = 'http://www.nltaxonomie.nl/nt19/sbr/20240301/dictionary/nl-types'
|
|
139
|
+
titel9Namespace = 'https://www.nltaxonomie.nl/jenv/2024-03-31/bw2-titel9-cor'
|
|
136
140
|
entrypointRoot = 'http://www.nltaxonomie.nl/nt19/kvk/20241211/entrypoints/'
|
|
137
141
|
entrypoints = {entrypointRoot + e for e in [
|
|
138
142
|
'kvk-rpt-jaarverantwoording-2024-ifrs-full.xsd',
|
|
@@ -170,16 +174,17 @@ class ValidationPluginExtension(ValidationPlugin):
|
|
|
170
174
|
raise ValueError(f'Invalid NL disclosure system: {disclosureSystem}')
|
|
171
175
|
return PluginValidationDataExtension(
|
|
172
176
|
self.name,
|
|
173
|
-
|
|
174
|
-
financialReportingPeriodCurrentEndDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodCurrentEndDate'),
|
|
175
|
-
financialReportingPeriodPreviousStartDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodPreviousStartDate'),
|
|
176
|
-
financialReportingPeriodPreviousEndDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodPreviousEndDate'),
|
|
177
|
-
formattedExplanationItemTypeQn=qname(f'{{{nlTypesNamespace}}}formattedExplanationItemType'),
|
|
177
|
+
chamberOfCommerceRegistrationNumberQn=qname(f'{{{titel9Namespace}}}ChamberOfCommerceRegistrationNumber'),
|
|
178
178
|
documentAdoptionDateQn=qname(f'{{{jenvNamespace}}}DocumentAdoptionDate'),
|
|
179
179
|
documentAdoptionStatusQn=qname(f'{{{jenvNamespace}}}DocumentAdoptionStatus'),
|
|
180
180
|
documentResubmissionUnsurmountableInaccuraciesQn=qname(f'{{{kvkINamespace}}}DocumentResubmissionDueToUnsurmountableInaccuracies'),
|
|
181
181
|
entrypointRoot=entrypointRoot,
|
|
182
182
|
entrypoints=entrypoints,
|
|
183
|
+
financialReportingPeriodCurrentStartDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodCurrentStartDate'),
|
|
184
|
+
financialReportingPeriodCurrentEndDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodCurrentEndDate'),
|
|
185
|
+
financialReportingPeriodPreviousStartDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodPreviousStartDate'),
|
|
186
|
+
financialReportingPeriodPreviousEndDateQn=qname(f'{{{jenvNamespace}}}FinancialReportingPeriodPreviousEndDate'),
|
|
187
|
+
formattedExplanationItemTypeQn=qname(f'{{{nlTypesNamespace}}}formattedExplanationItemType'),
|
|
183
188
|
textFormattingSchemaPath='sbr-text-formatting.xsd',
|
|
184
189
|
textFormattingWrapper='<formattedText xmlns="http://www.nltaxonomie.nl/2017/xbrl/sbr-text-formatting">{}</formattedText>',
|
|
185
190
|
)
|
|
@@ -4,6 +4,8 @@ See COPYRIGHT.md for copyright information.
|
|
|
4
4
|
from __future__ import annotations
|
|
5
5
|
|
|
6
6
|
from datetime import date, timedelta
|
|
7
|
+
|
|
8
|
+
from arelle.XmlValidateConst import VALID
|
|
7
9
|
from dateutil import relativedelta
|
|
8
10
|
from collections.abc import Iterable
|
|
9
11
|
from typing import Any, cast, TYPE_CHECKING
|
|
@@ -92,3 +94,153 @@ def rule_nl_kvk_3_1_1_2(
|
|
|
92
94
|
modelObject = val.modelXbrl
|
|
93
95
|
)
|
|
94
96
|
return
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
@validation(
|
|
100
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
101
|
+
disclosureSystems=[
|
|
102
|
+
DISCLOSURE_SYSTEM_INLINE_NT19
|
|
103
|
+
],
|
|
104
|
+
)
|
|
105
|
+
def rule_nl_kvk_3_1_2_1(
|
|
106
|
+
pluginData: PluginValidationDataExtension,
|
|
107
|
+
val: ValidateXbrl,
|
|
108
|
+
*args: Any,
|
|
109
|
+
**kwargs: Any,
|
|
110
|
+
) -> Iterable[Validation]:
|
|
111
|
+
"""
|
|
112
|
+
NL-KVK.3.1.2.1: xbrli:startDate, xbrli:endDate, xbrli:instant formatted as yyyy-mm-dd without time.
|
|
113
|
+
"""
|
|
114
|
+
contextsWithPeriodTime = pluginData.getContextsWithPeriodTime(val.modelXbrl)
|
|
115
|
+
if len(contextsWithPeriodTime) !=0:
|
|
116
|
+
yield Validation.error(
|
|
117
|
+
codes='NL.NL-KVK-3.1.2.1',
|
|
118
|
+
msg=_('xbrli:startDate, xbrli:endDate, xbrli:instant must be formatted as yyyy-mm-dd without time'),
|
|
119
|
+
modelObject = contextsWithPeriodTime
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
@validation(
|
|
124
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
125
|
+
disclosureSystems=[
|
|
126
|
+
DISCLOSURE_SYSTEM_INLINE_NT19
|
|
127
|
+
],
|
|
128
|
+
)
|
|
129
|
+
def rule_nl_kvk_3_1_2_2(
|
|
130
|
+
pluginData: PluginValidationDataExtension,
|
|
131
|
+
val: ValidateXbrl,
|
|
132
|
+
*args: Any,
|
|
133
|
+
**kwargs: Any,
|
|
134
|
+
) -> Iterable[Validation]:
|
|
135
|
+
"""
|
|
136
|
+
NL-KVK.3.1.2.1: xbrli:startDate, xbrli:endDate, xbrli:instant format to be formatted as yyyy-mm-dd without time zone.
|
|
137
|
+
"""
|
|
138
|
+
contextsWithPeriodTimeZone = pluginData.getContextsWithPeriodTimeZone(val.modelXbrl)
|
|
139
|
+
if len(contextsWithPeriodTimeZone) !=0:
|
|
140
|
+
yield Validation.error(
|
|
141
|
+
codes='NL.NL-KVK-3.1.2.2',
|
|
142
|
+
msg=_('xbrli:startDate, xbrli:endDate, xbrli:instant must be formatted as yyyy-mm-dd without time zone'),
|
|
143
|
+
modelObject = contextsWithPeriodTimeZone
|
|
144
|
+
)
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
@validation(
|
|
148
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
149
|
+
disclosureSystems=[
|
|
150
|
+
DISCLOSURE_SYSTEM_INLINE_NT19
|
|
151
|
+
],
|
|
152
|
+
)
|
|
153
|
+
def rule_nl_kvk_3_1_3_1 (
|
|
154
|
+
pluginData: PluginValidationDataExtension,
|
|
155
|
+
val: ValidateXbrl,
|
|
156
|
+
*args: Any,
|
|
157
|
+
**kwargs: Any,
|
|
158
|
+
) -> Iterable[Validation]:
|
|
159
|
+
"""
|
|
160
|
+
NL-KVK.3.1.3.1: xbrli:segment must not be used in contexts.
|
|
161
|
+
"""
|
|
162
|
+
contextsWithSegments = pluginData.getContextsWithSegments(val.modelXbrl)
|
|
163
|
+
if len(contextsWithSegments) !=0:
|
|
164
|
+
yield Validation.error(
|
|
165
|
+
codes='NL.NL-KVK-3.1.3.1',
|
|
166
|
+
msg=_('xbrli:segment must not be used in contexts.'),
|
|
167
|
+
modelObject = contextsWithSegments
|
|
168
|
+
)
|
|
169
|
+
|
|
170
|
+
|
|
171
|
+
@validation(
|
|
172
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
173
|
+
disclosureSystems=[
|
|
174
|
+
DISCLOSURE_SYSTEM_INLINE_NT19
|
|
175
|
+
],
|
|
176
|
+
)
|
|
177
|
+
def rule_nl_kvk_3_1_3_2 (
|
|
178
|
+
pluginData: PluginValidationDataExtension,
|
|
179
|
+
val: ValidateXbrl,
|
|
180
|
+
*args: Any,
|
|
181
|
+
**kwargs: Any,
|
|
182
|
+
) -> Iterable[Validation]:
|
|
183
|
+
"""
|
|
184
|
+
NL-KVK.3.1.3.2: xbrli:scenario must only contain content defined in XBRL Dimensions specification.
|
|
185
|
+
"""
|
|
186
|
+
contextsWithImproperContent = pluginData.getContextsWithImproperContent(val.modelXbrl)
|
|
187
|
+
if len(contextsWithImproperContent) !=0:
|
|
188
|
+
yield Validation.error(
|
|
189
|
+
codes='NL.NL-KVK-3.1.3.2',
|
|
190
|
+
msg=_('xbrli:scenario must only contain content defined in XBRL Dimensions specification.'),
|
|
191
|
+
modelObject = contextsWithImproperContent
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
@validation(
|
|
196
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
197
|
+
disclosureSystems=[
|
|
198
|
+
DISCLOSURE_SYSTEM_INLINE_NT19
|
|
199
|
+
],
|
|
200
|
+
)
|
|
201
|
+
def rule_nl_kvk_3_1_4_1 (
|
|
202
|
+
pluginData: PluginValidationDataExtension,
|
|
203
|
+
val: ValidateXbrl,
|
|
204
|
+
*args: Any,
|
|
205
|
+
**kwargs: Any,
|
|
206
|
+
) -> Iterable[Validation]:
|
|
207
|
+
"""
|
|
208
|
+
NL-KVK.3.1.4.1: All entity identifiers and schemes must have identical content.
|
|
209
|
+
"""
|
|
210
|
+
entityIdentifierValues = pluginData.entityIdentifiersInDocument(val.modelXbrl)
|
|
211
|
+
if len(entityIdentifierValues) >1:
|
|
212
|
+
yield Validation.error(
|
|
213
|
+
codes='NL.NL-KVK-3.1.4.1',
|
|
214
|
+
msg=_('All entity identifiers and schemes must have identical content.'),
|
|
215
|
+
modelObject = entityIdentifierValues
|
|
216
|
+
)
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
@validation(
|
|
221
|
+
hook=ValidationHook.XBRL_FINALLY,
|
|
222
|
+
disclosureSystems=[
|
|
223
|
+
DISCLOSURE_SYSTEM_INLINE_NT19
|
|
224
|
+
],
|
|
225
|
+
)
|
|
226
|
+
def rule_nl_kvk_3_1_4_2 (
|
|
227
|
+
pluginData: PluginValidationDataExtension,
|
|
228
|
+
val: ValidateXbrl,
|
|
229
|
+
*args: Any,
|
|
230
|
+
**kwargs: Any,
|
|
231
|
+
) -> Iterable[Validation]:
|
|
232
|
+
"""
|
|
233
|
+
NL-KVK.3.1.4.2: xbrli:identifier value must be identical to bw2-titel9:ChamberOfCommerceRegistrationNumber fact value.
|
|
234
|
+
"""
|
|
235
|
+
registrationNumberFacts = val.modelXbrl.factsByQname.get(pluginData.chamberOfCommerceRegistrationNumberQn, set())
|
|
236
|
+
if len(registrationNumberFacts) > 0:
|
|
237
|
+
regFact = next(iter(registrationNumberFacts))
|
|
238
|
+
if regFact.xValid >= VALID and regFact.xValue != regFact.context.entityIdentifier[1]:
|
|
239
|
+
yield Validation.error(
|
|
240
|
+
codes='NL-KVK.3.1.4.2',
|
|
241
|
+
msg=_("xbrli:identifier value must be identical to bw2-titel9:ChamberOfCommerceRegistrationNumber fact value.").format(
|
|
242
|
+
regFact.xValue,
|
|
243
|
+
regFact.context.entityIdentifier[1]
|
|
244
|
+
),
|
|
245
|
+
modelObject=regFact
|
|
246
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: arelle-release
|
|
3
|
-
Version: 2.37.
|
|
3
|
+
Version: 2.37.5
|
|
4
4
|
Summary: An open source XBRL platform.
|
|
5
5
|
Author-email: "arelle.org" <support@arelle.org>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -56,7 +56,6 @@ Provides-Extra: objectmaker
|
|
|
56
56
|
Requires-Dist: graphviz==0.*; extra == "objectmaker"
|
|
57
57
|
Provides-Extra: webserver
|
|
58
58
|
Requires-Dist: cheroot<11,>=8; extra == "webserver"
|
|
59
|
-
Requires-Dist: CherryPy==18.*; extra == "webserver"
|
|
60
59
|
Requires-Dist: tornado==6.*; extra == "webserver"
|
|
61
60
|
Dynamic: license-file
|
|
62
61
|
|
|
@@ -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
3
|
arelle/Cntlr.py,sha256=sf5Xe19t5E0wKzhdlXl1p5r6gMtCmPhYAi8RVY0jz7Y,30449
|
|
4
|
-
arelle/CntlrCmdLine.py,sha256=
|
|
4
|
+
arelle/CntlrCmdLine.py,sha256=50acj2edwwIxVjMnQ3MdxuCq1B89g6peCogPi1Ox_OI,94190
|
|
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=x5vtiopqGdp6L5s7PrUTEABXCGqtb5oy7yqWIVePtgE,50860
|
|
9
|
-
arelle/CntlrWinMain.py,sha256=
|
|
9
|
+
arelle/CntlrWinMain.py,sha256=qG1nSN9cMafrZNZgIlA6W_iMsmTwIcpUqb_S1J6YR9k,96611
|
|
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
|
|
@@ -20,8 +20,8 @@ arelle/DialogPluginManager.py,sha256=cr7GWNuYttg7H0pM5vaCPuxgDVgtZzR6ZamX957_1w8
|
|
|
20
20
|
arelle/DialogRssWatch.py,sha256=mjc4pqyFDISY4tQtME0uSRQ3NlcWnNsOsMu9Zj8tTd0,13789
|
|
21
21
|
arelle/DialogURL.py,sha256=JH88OPFf588E8RW90uMaieok7A_4kOAURQ8kHWVhnao,4354
|
|
22
22
|
arelle/DialogUserPassword.py,sha256=kWPlCCihhwvsykDjanME9qBDtv6cxZlsrJyoMqiRep4,13769
|
|
23
|
-
arelle/DisclosureSystem.py,sha256=
|
|
24
|
-
arelle/FileSource.py,sha256=
|
|
23
|
+
arelle/DisclosureSystem.py,sha256=g3XXMjuyKJk2eoqvHGqoyIs2bMfcODwOeISDRCcY9gc,24749
|
|
24
|
+
arelle/FileSource.py,sha256=FXqXCd7FZ7p7DH4yAYDHYYZ_43P8H3nreT8LJpoWu1M,46643
|
|
25
25
|
arelle/FunctionCustom.py,sha256=d1FsBG14eykvpLpgaXpN8IdxnlG54dfGcsXPYfdpA9Q,5880
|
|
26
26
|
arelle/FunctionFn.py,sha256=BcZKah1rpfquSVPwjvknM1pgFXOnK4Hr1e_ArG_mcJY,38058
|
|
27
27
|
arelle/FunctionIxt.py,sha256=8JELGh1l4o8Ul4_G7JgwX8Ebch9it2DblI6OkfL33Cw,80082
|
|
@@ -123,7 +123,7 @@ arelle/XmlValidateConst.py,sha256=U_wN0Q-nWKwf6dKJtcu_83FXPn9c6P8JjzGA5b0w7P0,33
|
|
|
123
123
|
arelle/XmlValidateParticles.py,sha256=Mn6vhFl0ZKC_vag1mBwn1rH_x2jmlusJYqOOuxFPO2k,9231
|
|
124
124
|
arelle/XmlValidateSchema.py,sha256=6frtZOc1Yrx_5yYF6V6oHbScnglWrVbWr6xW4EHtLQI,7428
|
|
125
125
|
arelle/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
126
|
-
arelle/_version.py,sha256=
|
|
126
|
+
arelle/_version.py,sha256=rerVv2bkyHju_24j_qkXddEpdbpWMlSRnKzm4NdB1lc,513
|
|
127
127
|
arelle/typing.py,sha256=Ct5lrNKRow_o9CraMEXNza8nFsJ_iGIKoUeGfPs2dxI,1084
|
|
128
128
|
arelle/api/Session.py,sha256=O8zpg7MJys9uxwwHf8OsSlZxpPdq7A3ONyY39Q4A3Kc,6218
|
|
129
129
|
arelle/archive/CustomLogger.py,sha256=v_JXOCQLDZcfaFWzxC9FRcEf9tQi4rCI4Sx7jCuAVQI,1231
|
|
@@ -276,14 +276,14 @@ arelle/images/xbrl128.gif,sha256=wb1K8SeKyYV63EUVYG0j7W6veY0moD8L8YrjAhnyRdI,927
|
|
|
276
276
|
arelle/images/xbrl16.ico,sha256=n4GcRLd-_sTpT0PML7rPSUd8lHCGNWYftrJ7WhhcMaQ,1150
|
|
277
277
|
arelle/images/xbrl32.ico,sha256=ubVPZKTkX7lsJhHz1vEKsIbWY7g0k1asxvwgT8Nbzxw,4286
|
|
278
278
|
arelle/locale/messages.mo,sha256=1fb0KAYAzYLGV0tuFvfzDHMj_fYtNYEpqS2rUkZSf3Y,398
|
|
279
|
-
arelle/locale/messages.pot,sha256=
|
|
280
|
-
arelle/locale/ar_EG/LC_MESSAGES/ar_EG.po,sha256=
|
|
279
|
+
arelle/locale/messages.pot,sha256=rSm-zzgA-4oDOrMELAQwrFAJpwV2yGP-81Ij6Uoc-uw,249718
|
|
280
|
+
arelle/locale/ar_EG/LC_MESSAGES/ar_EG.po,sha256=UboUT0k6DtALtn_Lsu5Ts8wCxiyaotYjA4OoSkfooBQ,341833
|
|
281
281
|
arelle/locale/ar_EG/LC_MESSAGES/arelle.mo,sha256=J_v2J5ED3FDhIpk4WxnWXo2THNTqfgAwd2NOa8erB8I,185904
|
|
282
282
|
arelle/locale/es/LC_MESSAGES/arelle.mo,sha256=iB8uYP_vhdqll3c8O08KBsaZ3hlf4YHwZFxc3-nC3k8,149331
|
|
283
283
|
arelle/locale/fr/LC_MESSAGES/arelle.mo,sha256=HsXvnKEsnhqJqH6H9SlGBy451fnQTaizbZCyCN_Qbwg,118897
|
|
284
284
|
arelle/locale/fr/LC_MESSAGES/fr.po,sha256=D2WHLI9NktcxgmGx91fRLNLoVjvO3Z0jjS9AJlroOCE,168077
|
|
285
285
|
arelle/locale/ru/LC_MESSAGES/arelle.mo,sha256=i004xdiJMpXus5DnSz2y708H5vPt78Pu5ApkrdC9Fqw,375378
|
|
286
|
-
arelle/locale/ru/LC_MESSAGES/ru.po,sha256=
|
|
286
|
+
arelle/locale/ru/LC_MESSAGES/ru.po,sha256=aOQv5MfenTHo_y_RbkRen2SvgBQDTnmxOkKOZsUE3LQ,449575
|
|
287
287
|
arelle/logging/formatters/LogFormatter.py,sha256=emXkUWLRZ65-qu9K-BcYrT2ueR8R-YchA8bwPY3yA60,1968
|
|
288
288
|
arelle/logging/handlers/LogHandlerWithXml.py,sha256=xj-m6aNh4gksxP9AjN0xkECxVdx9m7ElCC0lXkhFcUQ,4318
|
|
289
289
|
arelle/logging/handlers/LogToBufferHandler.py,sha256=tTzHRw9tn1Osrpc5rcKxk2iTEE3uIq5wb792z5RVYAs,612
|
|
@@ -344,7 +344,7 @@ arelle/plugin/logging/saveMessages.py,sha256=h6XNFJZq3q1WLn_Y3_DI-l8Qn_-IZa2JBk-
|
|
|
344
344
|
arelle/plugin/security/cryptAES_CBC.py,sha256=S94AdMqu4jdLrprl0FLT2w7tG6IgxTGxRfRuYR9x43w,6078
|
|
345
345
|
arelle/plugin/security/cryptAES_EAX.py,sha256=TAL_kpu_2WMMpHOWrxA8Y7UuTAcbbTY6DK0VYQZGWF0,5952
|
|
346
346
|
arelle/plugin/transforms/tester.py,sha256=57relfBci8FttRSxHtdUaxlaQPrBhJglssImDecQPow,12501
|
|
347
|
-
arelle/plugin/validate/CIPC/Const.py,sha256=
|
|
347
|
+
arelle/plugin/validate/CIPC/Const.py,sha256=GSiODyiK8V9P-pV0_DPEKYAhe2wqgcYJP2Qt6xaIyA4,11425
|
|
348
348
|
arelle/plugin/validate/CIPC/__init__.py,sha256=OMLc0DgKulsyQlVhU9Wjlt_1VMpNJiUWBH16KV6TLtA,14681
|
|
349
349
|
arelle/plugin/validate/CIPC/config.xml,sha256=4pyn40JAvQQeoRC8I046gZ4ZcmUnekX3TNfYpC5yonI,667
|
|
350
350
|
arelle/plugin/validate/DBA/DisclosureSystems.py,sha256=Dp_r-Pa3tahtCfDha2Zc97N0iyrY4Zagb8w2D9ErILg,294
|
|
@@ -378,8 +378,8 @@ arelle/plugin/validate/FERC/__init__.py,sha256=V4fXcFKBsjFFPs9_1NhvDjWpEQCoQM0tR
|
|
|
378
378
|
arelle/plugin/validate/FERC/config.xml,sha256=bn9b8eCqJA1J62rYq1Nz85wJrMGAahVmmnIUQZyerjo,1919
|
|
379
379
|
arelle/plugin/validate/FERC/resources/ferc-utr.xml,sha256=OCRj9IUpdXATCBXKbB71apYx9kxcNtZW-Hq4s-avsRY,2663
|
|
380
380
|
arelle/plugin/validate/NL/DisclosureSystems.py,sha256=VFMcO8GJ8kIqhOV5McyEejaGJOR5JrmeF8GdFuS9IZw,174
|
|
381
|
-
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=
|
|
382
|
-
arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=
|
|
381
|
+
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=WuCXeiCYlDWDrQ--lRkTVTTuD_KTemgYsiWMxs6psxM,6259
|
|
382
|
+
arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=pRnKCXnHzwW3lDDZ_yk5d3Mia4d8a_qhqIvZK6kItTc,15216
|
|
383
383
|
arelle/plugin/validate/NL/__init__.py,sha256=9NkkfosHnAzJhBa84KDAsoyU7vd4_DO3GYKTSvKuOk8,2554
|
|
384
384
|
arelle/plugin/validate/NL/resources/config.xml,sha256=vu5pA-Iw6cgb5aep8LNLNPCkmG1QF6RTw3TCgEIest8,1102
|
|
385
385
|
arelle/plugin/validate/NL/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
@@ -387,7 +387,7 @@ arelle/plugin/validate/NL/rules/br_kvk.py,sha256=0SwKieWzTDm3YMsXPS6zTdgbk7_Z9Cz
|
|
|
387
387
|
arelle/plugin/validate/NL/rules/fg_nl.py,sha256=4Puq5wAjtK_iNd4wisH_R0Z_EKJ7MT2OCai5g4t1MPE,10714
|
|
388
388
|
arelle/plugin/validate/NL/rules/fr_kvk.py,sha256=-_BLeWGoZ_f56p5VO4X40S45Ny3Ej-WK6Srei1KVSxU,8170
|
|
389
389
|
arelle/plugin/validate/NL/rules/fr_nl.py,sha256=-M1WtXp06khhtkfOVPCa-b8UbC281gk4YfDhvtAVlnI,31424
|
|
390
|
-
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=
|
|
390
|
+
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=_eUzTAFaT_hH3EXW7MPJjM7dmBa-P14TqPMFDw4xVPc,8163
|
|
391
391
|
arelle/plugin/validate/ROS/DisclosureSystems.py,sha256=rJ81mwQDYTi6JecFZ_zhqjjz3VNQRgjHNSh0wcQWAQE,18
|
|
392
392
|
arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=IV7ILhNvgKwQXqbpSA6HRNt9kEnejCyMADI3wyyIgk0,4036
|
|
393
393
|
arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=FBhEp8t396vGdvCbMEimfcxmGiGnhXMen-yVLWnkFaI,758
|
|
@@ -707,7 +707,7 @@ arelle/utils/validate/ValidationPlugin.py,sha256=_WeRPXZUTCcSN3FLbFwiAe_2pAUTxZZ
|
|
|
707
707
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
708
708
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
709
709
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
710
|
-
arelle_release-2.37.
|
|
710
|
+
arelle_release-2.37.5.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
711
711
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
712
712
|
tests/integration_tests/download_cache.py,sha256=jVMIVICsZjcVc9DCPPu3fCjF9_cWSS3tqSynhFs3oAM,4097
|
|
713
713
|
tests/integration_tests/integration_test_util.py,sha256=H7mncbv0T9ZeVyrtk9Hohe3k6jgcYykHkt-LGE-Q9aQ,10270
|
|
@@ -1154,7 +1154,7 @@ tests/resources/conformance_suites/nl_nt16/fr_nl/1-02-invalid.xbrl,sha256=Flu8pS
|
|
|
1154
1154
|
tests/resources/conformance_suites/nl_nt16/fr_nl/1-02-testcase.xml,sha256=TINl7JVLw6r6SkjgBagEH1MCFNaIBrnpl--IAoB4OMw,924
|
|
1155
1155
|
tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-invalid-doctype.xbrl,sha256=3Z3i7fLOjOFYj7tuX1w8lueek6bpQhj101Ephb6IVgE,129
|
|
1156
1156
|
tests/resources/conformance_suites/nl_nt16/fr_nl/1-03-testcase.xml,sha256=kmlnCY0ZtdEVrpKyU3oSC_6RM1kKlOoG81sxtwPECwY,926
|
|
1157
|
-
tests/resources/conformance_suites/nl_nt16/fr_nl/1-04-invalid.xbrl,sha256=
|
|
1157
|
+
tests/resources/conformance_suites/nl_nt16/fr_nl/1-04-invalid.xbrl,sha256=9tRI4DoSXd7LHMLWLFnerIyOpxONPSsd-_0FsVozRlQ,1297
|
|
1158
1158
|
tests/resources/conformance_suites/nl_nt16/fr_nl/1-04-testcase.xml,sha256=Nkgds7HDnz7y1b6padzxfbMAMMKp2rNQhrfvlH_IaEs,889
|
|
1159
1159
|
tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-invalid-encoding.xbrl,sha256=dmjvwRnAM3ZiMlF0sDWAxa_Qb19sNtQ369kYEpDG7wU,194
|
|
1160
1160
|
tests/resources/conformance_suites/nl_nt16/fr_nl/1-05-testcase.xml,sha256=dJi2elHTSN2wL3oTnFR3MbhWEmkl00EichkpP4wQLdg,936
|
|
@@ -1252,7 +1252,7 @@ tests/resources/conformance_suites/nl_nt17/fr_nl/1-02-invalid.xbrl,sha256=Flu8pS
|
|
|
1252
1252
|
tests/resources/conformance_suites/nl_nt17/fr_nl/1-02-testcase.xml,sha256=TINl7JVLw6r6SkjgBagEH1MCFNaIBrnpl--IAoB4OMw,924
|
|
1253
1253
|
tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-invalid-doctype.xbrl,sha256=3Z3i7fLOjOFYj7tuX1w8lueek6bpQhj101Ephb6IVgE,129
|
|
1254
1254
|
tests/resources/conformance_suites/nl_nt17/fr_nl/1-03-testcase.xml,sha256=kmlnCY0ZtdEVrpKyU3oSC_6RM1kKlOoG81sxtwPECwY,926
|
|
1255
|
-
tests/resources/conformance_suites/nl_nt17/fr_nl/1-04-invalid.xbrl,sha256=
|
|
1255
|
+
tests/resources/conformance_suites/nl_nt17/fr_nl/1-04-invalid.xbrl,sha256=9tRI4DoSXd7LHMLWLFnerIyOpxONPSsd-_0FsVozRlQ,1297
|
|
1256
1256
|
tests/resources/conformance_suites/nl_nt17/fr_nl/1-04-testcase.xml,sha256=Nkgds7HDnz7y1b6padzxfbMAMMKp2rNQhrfvlH_IaEs,889
|
|
1257
1257
|
tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-invalid-encoding.xbrl,sha256=dmjvwRnAM3ZiMlF0sDWAxa_Qb19sNtQ369kYEpDG7wU,194
|
|
1258
1258
|
tests/resources/conformance_suites/nl_nt17/fr_nl/1-05-testcase.xml,sha256=dJi2elHTSN2wL3oTnFR3MbhWEmkl00EichkpP4wQLdg,936
|
|
@@ -1350,7 +1350,7 @@ tests/resources/conformance_suites/nl_nt18/fr_nl/1-02-invalid.xbrl,sha256=Flu8pS
|
|
|
1350
1350
|
tests/resources/conformance_suites/nl_nt18/fr_nl/1-02-testcase.xml,sha256=TINl7JVLw6r6SkjgBagEH1MCFNaIBrnpl--IAoB4OMw,924
|
|
1351
1351
|
tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-invalid-doctype.xbrl,sha256=3Z3i7fLOjOFYj7tuX1w8lueek6bpQhj101Ephb6IVgE,129
|
|
1352
1352
|
tests/resources/conformance_suites/nl_nt18/fr_nl/1-03-testcase.xml,sha256=kmlnCY0ZtdEVrpKyU3oSC_6RM1kKlOoG81sxtwPECwY,926
|
|
1353
|
-
tests/resources/conformance_suites/nl_nt18/fr_nl/1-04-invalid.xbrl,sha256=
|
|
1353
|
+
tests/resources/conformance_suites/nl_nt18/fr_nl/1-04-invalid.xbrl,sha256=9tRI4DoSXd7LHMLWLFnerIyOpxONPSsd-_0FsVozRlQ,1297
|
|
1354
1354
|
tests/resources/conformance_suites/nl_nt18/fr_nl/1-04-testcase.xml,sha256=Nkgds7HDnz7y1b6padzxfbMAMMKp2rNQhrfvlH_IaEs,889
|
|
1355
1355
|
tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-invalid-encoding.xbrl,sha256=dmjvwRnAM3ZiMlF0sDWAxa_Qb19sNtQ369kYEpDG7wU,194
|
|
1356
1356
|
tests/resources/conformance_suites/nl_nt18/fr_nl/1-05-testcase.xml,sha256=dJi2elHTSN2wL3oTnFR3MbhWEmkl00EichkpP4wQLdg,936
|
|
@@ -1448,7 +1448,7 @@ tests/resources/conformance_suites/nl_nt19/fr_nl/1-02-invalid.xbrl,sha256=Flu8pS
|
|
|
1448
1448
|
tests/resources/conformance_suites/nl_nt19/fr_nl/1-02-testcase.xml,sha256=TINl7JVLw6r6SkjgBagEH1MCFNaIBrnpl--IAoB4OMw,924
|
|
1449
1449
|
tests/resources/conformance_suites/nl_nt19/fr_nl/1-03-invalid-doctype.xbrl,sha256=3Z3i7fLOjOFYj7tuX1w8lueek6bpQhj101Ephb6IVgE,129
|
|
1450
1450
|
tests/resources/conformance_suites/nl_nt19/fr_nl/1-03-testcase.xml,sha256=kmlnCY0ZtdEVrpKyU3oSC_6RM1kKlOoG81sxtwPECwY,926
|
|
1451
|
-
tests/resources/conformance_suites/nl_nt19/fr_nl/1-04-invalid.xbrl,sha256=
|
|
1451
|
+
tests/resources/conformance_suites/nl_nt19/fr_nl/1-04-invalid.xbrl,sha256=9tRI4DoSXd7LHMLWLFnerIyOpxONPSsd-_0FsVozRlQ,1297
|
|
1452
1452
|
tests/resources/conformance_suites/nl_nt19/fr_nl/1-04-testcase.xml,sha256=Nkgds7HDnz7y1b6padzxfbMAMMKp2rNQhrfvlH_IaEs,889
|
|
1453
1453
|
tests/resources/conformance_suites/nl_nt19/fr_nl/1-05-invalid-encoding.xbrl,sha256=dmjvwRnAM3ZiMlF0sDWAxa_Qb19sNtQ369kYEpDG7wU,194
|
|
1454
1454
|
tests/resources/conformance_suites/nl_nt19/fr_nl/1-05-testcase.xml,sha256=dJi2elHTSN2wL3oTnFR3MbhWEmkl00EichkpP4wQLdg,936
|
|
@@ -1555,8 +1555,8 @@ tests/unit_tests/arelle/oim/test_load.py,sha256=NxiUauQwJVfWAHbbpsMHGSU2d3Br8Pki
|
|
|
1555
1555
|
tests/unit_tests/arelle/plugin/test_plugin_imports.py,sha256=bdhIs9frAnFsdGU113yBk09_jis-z43dwUItMFYuSYM,1064
|
|
1556
1556
|
tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py,sha256=XHABmejQt7RlZ0udh7v42f2Xb2STGk_fSaIaJ9i2xo0,878
|
|
1557
1557
|
tests/unit_tests/arelle/utils/validate/test_decorator.py,sha256=ZS8FqIY1g-2FCbjF4UYm609dwViax6qBMRJSi0vfuhY,2482
|
|
1558
|
-
arelle_release-2.37.
|
|
1559
|
-
arelle_release-2.37.
|
|
1560
|
-
arelle_release-2.37.
|
|
1561
|
-
arelle_release-2.37.
|
|
1562
|
-
arelle_release-2.37.
|
|
1558
|
+
arelle_release-2.37.5.dist-info/METADATA,sha256=4Kw7oBfKyh0aON2AEk16a98SktKugAPZNfo3jey0Oww,9064
|
|
1559
|
+
arelle_release-2.37.5.dist-info/WHEEL,sha256=ck4Vq1_RXyvS4Jt6SI0Vz6fyVs4GWg7AINwpsaGEgPE,91
|
|
1560
|
+
arelle_release-2.37.5.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
1561
|
+
arelle_release-2.37.5.dist-info/top_level.txt,sha256=ZYmYGmhW5Jvo3vJ4iXBZPUI29LvYhntom04w90esJvU,13
|
|
1562
|
+
arelle_release-2.37.5.dist-info/RECORD,,
|
|
@@ -24,9 +24,6 @@ Python®: Copyright (c) 2001-2022 Python Software Foundation; All Rights Reserve
|
|
|
24
24
|
aniso8601: Copyright (c) 2021, Brandon Nielsen, All rights reserved.
|
|
25
25
|
[License](https://github.com/sloanlance/aniso8601/blob/master/LICENSE)
|
|
26
26
|
|
|
27
|
-
cherrypy: cheroot Copyright © 2004-2020, CherryPy Team. All rights reserved.
|
|
28
|
-
[License](https://github.com/cherrypy/cherrypy/blob/main/LICENSE.md)
|
|
29
|
-
|
|
30
27
|
cx_Freeze: Copyright © 2020-2022, Marcelo Duarte, 2007-2020, Anthony Tuininga,
|
|
31
28
|
2001-2006, Computronix (Canada) Ltd., Edmonton, Alberta, Canada. All rights reserved.
|
|
32
29
|
[License](https://cx-freeze.readthedocs.io/en/latest/license.html)
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE xbrl [
|
|
3
|
+
<!ENTITY reg "®">
|
|
4
|
+
<!ENTITY plus "+">
|
|
5
|
+
]>
|
|
1
6
|
<xbrl xmlns="http://www.xbrl.org/2003/instance" title="Test®"> <!-- CAUSE: disallowed named reference, in attribute -->
|
|
2
7
|
<!-- и й --> <!-- CAUSE: disallowed decimal numeric references, in comment -->
|
|
3
8
|
<!-- � ⃐ --> <!-- CAUSE: disallowed hexadecimal numeric references, in comment -->
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE xbrl [
|
|
3
|
+
<!ENTITY reg "®">
|
|
4
|
+
<!ENTITY plus "+">
|
|
5
|
+
]>
|
|
1
6
|
<xbrl xmlns="http://www.xbrl.org/2003/instance" title="Test®"> <!-- CAUSE: disallowed named reference, in attribute -->
|
|
2
7
|
<!-- и й --> <!-- CAUSE: disallowed decimal numeric references, in comment -->
|
|
3
8
|
<!-- � ⃐ --> <!-- CAUSE: disallowed hexadecimal numeric references, in comment -->
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE xbrl [
|
|
3
|
+
<!ENTITY reg "®">
|
|
4
|
+
<!ENTITY plus "+">
|
|
5
|
+
]>
|
|
1
6
|
<xbrl xmlns="http://www.xbrl.org/2003/instance" title="Test®"> <!-- CAUSE: disallowed named reference, in attribute -->
|
|
2
7
|
<!-- и й --> <!-- CAUSE: disallowed decimal numeric references, in comment -->
|
|
3
8
|
<!-- � ⃐ --> <!-- CAUSE: disallowed hexadecimal numeric references, in comment -->
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
|
2
|
+
<!DOCTYPE xbrl [
|
|
3
|
+
<!ENTITY reg "®">
|
|
4
|
+
<!ENTITY plus "+">
|
|
5
|
+
]>
|
|
1
6
|
<xbrl xmlns="http://www.xbrl.org/2003/instance" title="Test®"> <!-- CAUSE: disallowed named reference, in attribute -->
|
|
2
7
|
<!-- и й --> <!-- CAUSE: disallowed decimal numeric references, in comment -->
|
|
3
8
|
<!-- � ⃐ --> <!-- CAUSE: disallowed hexadecimal numeric references, in comment -->
|
|
File without changes
|
|
File without changes
|