arelle-release 2.37.19__py3-none-any.whl → 2.37.20__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/FileSource.py +2 -2
- arelle/ModelInstanceObject.py +1 -1
- arelle/ModelXbrl.py +1 -1
- arelle/_version.py +2 -2
- arelle/formula/XPathContext.py +22 -22
- arelle/formula/XPathParser.py +2 -2
- arelle/plugin/OimTaxonomy/ModelValueMore.py +2 -2
- arelle/plugin/OimTaxonomy/ViewXbrlTxmyObj.py +2 -3
- arelle/plugin/OimTaxonomy/XbrlConcept.py +2 -1
- arelle/plugin/OimTaxonomy/XbrlCube.py +8 -8
- arelle/plugin/OimTaxonomy/XbrlDts.py +5 -5
- arelle/plugin/OimTaxonomy/XbrlImportedTaxonomy.py +3 -3
- arelle/plugin/OimTaxonomy/XbrlNetwork.py +3 -3
- arelle/plugin/OimTaxonomy/XbrlProperty.py +3 -3
- arelle/plugin/OimTaxonomy/XbrlReport.py +3 -3
- arelle/plugin/OimTaxonomy/XbrlTableTemplate.py +3 -3
- arelle/plugin/OimTaxonomy/XbrlTypes.py +1 -1
- arelle/plugin/OimTaxonomy/__init__.py +4 -5
- arelle/plugin/validate/NL/__init__.py +4 -0
- arelle/plugin/validate/NL/rules/nl_kvk.py +60 -0
- {arelle_release-2.37.19.dist-info → arelle_release-2.37.20.dist-info}/METADATA +2 -1
- {arelle_release-2.37.19.dist-info → arelle_release-2.37.20.dist-info}/RECORD +28 -28
- tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py +4 -1
- tests/unit_tests/arelle/test_import.py +0 -30
- {arelle_release-2.37.19.dist-info → arelle_release-2.37.20.dist-info}/WHEEL +0 -0
- {arelle_release-2.37.19.dist-info → arelle_release-2.37.20.dist-info}/entry_points.txt +0 -0
- {arelle_release-2.37.19.dist-info → arelle_release-2.37.20.dist-info}/licenses/LICENSE.md +0 -0
- {arelle_release-2.37.19.dist-info → arelle_release-2.37.20.dist-info}/top_level.txt +0 -0
arelle/FileSource.py
CHANGED
|
@@ -13,7 +13,7 @@ import struct
|
|
|
13
13
|
import tarfile
|
|
14
14
|
import zipfile
|
|
15
15
|
import zlib
|
|
16
|
-
from typing import IO, TYPE_CHECKING, Any, TextIO, cast
|
|
16
|
+
from typing import IO, TYPE_CHECKING, Any, Optional, TextIO, cast
|
|
17
17
|
|
|
18
18
|
import regex as re
|
|
19
19
|
from lxml import etree
|
|
@@ -452,7 +452,7 @@ class FileSource:
|
|
|
452
452
|
def reportPackage(self) -> ReportPackage | None:
|
|
453
453
|
try:
|
|
454
454
|
self._reportPackage: ReportPackage | None
|
|
455
|
-
return self._reportPackage
|
|
455
|
+
return cast(Optional[ReportPackage], self._reportPackage)
|
|
456
456
|
except AttributeError:
|
|
457
457
|
self._reportPackage = ReportPackage.fromFileSource(self)
|
|
458
458
|
return self._reportPackage
|
arelle/ModelInstanceObject.py
CHANGED
|
@@ -1133,7 +1133,7 @@ class ModelContext(ModelObject):
|
|
|
1133
1133
|
dimValue = self.modelXbrl.qnameDimensionDefaults.get(dimQname)
|
|
1134
1134
|
return dimValue
|
|
1135
1135
|
|
|
1136
|
-
def dimMemberQname(self, dimQname, includeDefaults=False):
|
|
1136
|
+
def dimMemberQname(self, dimQname: ModelValue.QName, includeDefaults: bool = False) -> ModelValue.QName | None:
|
|
1137
1137
|
"""(QName) -- QName of explicit dimension if reported (or defaulted if includeDefaults is True), else None"""
|
|
1138
1138
|
dimValue = self.dimValue(dimQname)
|
|
1139
1139
|
if isinstance(dimValue, (ModelDimensionValue,DimValuePrototype)) and dimValue.isExplicit:
|
arelle/ModelXbrl.py
CHANGED
|
@@ -878,7 +878,7 @@ class ModelXbrl:
|
|
|
878
878
|
def dimensionsInUse(self) -> set[Any]:
|
|
879
879
|
self._dimensionsInUse: set[Any]
|
|
880
880
|
try:
|
|
881
|
-
return self._dimensionsInUse
|
|
881
|
+
return cast(set[Any], self._dimensionsInUse)
|
|
882
882
|
except AttributeError:
|
|
883
883
|
self._dimensionsInUse = set(dim.dimension
|
|
884
884
|
for cntx in self.contexts.values() # use contextsInUse? slower?
|
arelle/_version.py
CHANGED
arelle/formula/XPathContext.py
CHANGED
|
@@ -351,8 +351,8 @@ class XPathContext:
|
|
|
351
351
|
raise XPathException(p, 'err:XPST0017', _('Function named {0} does not have a custom or built-in implementation.').format(op))
|
|
352
352
|
elif op in VALUE_OPS:
|
|
353
353
|
# binary arithmetic operations and value comparisons
|
|
354
|
-
s1 = self.atomize(p, resultStack.pop()) if len(resultStack) > 0 else []
|
|
355
|
-
s2 = self.atomize(p, self.evaluate(p.args, contextItem=contextItem))
|
|
354
|
+
s1: Sequence[ContextItem] = self.atomize(p, resultStack.pop()) if len(resultStack) > 0 else []
|
|
355
|
+
s2: Sequence[ContextItem] = self.atomize(p, self.evaluate(p.args, contextItem=contextItem))
|
|
356
356
|
# value comparisons
|
|
357
357
|
if len(s1) > 1 or len(s2) > 1:
|
|
358
358
|
raise XPathException(p, 'err:XPTY0004', _("Value operation '{0}' sequence length error").format(op))
|
|
@@ -383,35 +383,35 @@ class XPathContext:
|
|
|
383
383
|
elif isinstance(op2, Decimal) and isinstance(op1, float):
|
|
384
384
|
op2 = float(op2)
|
|
385
385
|
if op == '+':
|
|
386
|
-
result = op1 + op2
|
|
386
|
+
result = op1 + op2 # type: ignore[assignment,operator]
|
|
387
387
|
elif op == '-':
|
|
388
|
-
result = op1 - op2
|
|
388
|
+
result = op1 - op2 # type: ignore[assignment,operator]
|
|
389
389
|
elif op == '*':
|
|
390
|
-
result = op1 * op2
|
|
390
|
+
result = op1 * op2 # type: ignore[assignment,operator]
|
|
391
391
|
elif op in ('div', 'idiv', "mod"):
|
|
392
392
|
try:
|
|
393
393
|
if op == 'div':
|
|
394
|
-
result = op1 / op2
|
|
394
|
+
result = op1 / op2 # type: ignore[assignment,operator]
|
|
395
395
|
elif op == 'idiv':
|
|
396
|
-
result = op1 // op2
|
|
396
|
+
result = op1 // op2 # type: ignore[assignment,operator]
|
|
397
397
|
elif op == 'mod':
|
|
398
|
-
result = op1 % op2
|
|
398
|
+
result = op1 % op2 # type: ignore[assignment,operator]
|
|
399
399
|
except ZeroDivisionError:
|
|
400
400
|
raise XPathException(p, 'err:FOAR0001', _('Attempt to divide by zero: {0} {1} {2}.').format(op1, op, op2))
|
|
401
401
|
elif op == 'ge':
|
|
402
|
-
result = op1 >= op2
|
|
402
|
+
result = op1 >= op2 # type: ignore[operator]
|
|
403
403
|
elif op == 'gt':
|
|
404
|
-
result = op1 > op2
|
|
404
|
+
result = op1 > op2 # type: ignore[operator]
|
|
405
405
|
elif op == 'le':
|
|
406
|
-
result = op1 <= op2
|
|
406
|
+
result = op1 <= op2 # type: ignore[operator]
|
|
407
407
|
elif op == 'lt':
|
|
408
|
-
result = op1 < op2
|
|
408
|
+
result = op1 < op2 # type: ignore[operator]
|
|
409
409
|
elif op == 'eq':
|
|
410
410
|
result = op1 == op2
|
|
411
411
|
elif op == 'ne':
|
|
412
412
|
result = op1 != op2
|
|
413
413
|
elif op == 'to':
|
|
414
|
-
result = range(int(op1), int(op2) + 1)
|
|
414
|
+
result = range(int(op1), int(op2) + 1) # type: ignore[arg-type]
|
|
415
415
|
elif op in GENERALCOMPARISON_OPS:
|
|
416
416
|
# general comparisons
|
|
417
417
|
s1 = self.atomize(p, resultStack.pop()) if len(resultStack) > 0 else []
|
|
@@ -440,23 +440,23 @@ class XPathContext:
|
|
|
440
440
|
elif op in NODECOMPARISON_OPS:
|
|
441
441
|
# node comparisons
|
|
442
442
|
s1 = resultStack.pop() if len(resultStack) > 0 else []
|
|
443
|
-
|
|
444
|
-
if len(s1) > 1 or len(
|
|
443
|
+
_s2 = self.evaluate(p.args, contextItem=contextItem)
|
|
444
|
+
if len(s1) > 1 or len(_s2) > 1 or not self.isNodeSequence(s1) or not self.isNodeSequence(_s2[0]):
|
|
445
445
|
raise XPathException(p, 'err:XPTY0004', _('Node comparison sequence error'))
|
|
446
|
-
if len(s1) == 0 or len(
|
|
446
|
+
if len(s1) == 0 or len(_s2[0]) == 0:
|
|
447
447
|
result = []
|
|
448
448
|
else:
|
|
449
449
|
n1 = s1[0]
|
|
450
|
-
n2 =
|
|
450
|
+
n2 = _s2[0][0]
|
|
451
451
|
result = False
|
|
452
452
|
for op1 in s1:
|
|
453
|
-
for
|
|
453
|
+
for _op2 in _s2:
|
|
454
454
|
if op == 'is':
|
|
455
455
|
result = n1 == n2
|
|
456
456
|
elif op == '>>':
|
|
457
|
-
result = op1 >
|
|
457
|
+
result = op1 > _op2 # type: ignore[operator]
|
|
458
458
|
elif op == '<<':
|
|
459
|
-
result = op1 <=
|
|
459
|
+
result = op1 <= _op2 # type: ignore[operator]
|
|
460
460
|
if result:
|
|
461
461
|
break
|
|
462
462
|
elif op in COMBINING_OPS:
|
|
@@ -503,7 +503,7 @@ class XPathContext:
|
|
|
503
503
|
if op == 'u+':
|
|
504
504
|
result = op1
|
|
505
505
|
elif op == 'u-':
|
|
506
|
-
result = -op1
|
|
506
|
+
result = -op1 # type: ignore[assignment,operator]
|
|
507
507
|
elif op == 'instance':
|
|
508
508
|
result = False
|
|
509
509
|
s1 = self.flattenSequence(resultStack.pop()) if len(resultStack) > 0 else []
|
|
@@ -671,7 +671,7 @@ class XPathContext:
|
|
|
671
671
|
if hasPrevValue:
|
|
672
672
|
prevValue = self.inScopeVars[rvQname]
|
|
673
673
|
for rv in r:
|
|
674
|
-
self.inScopeVars[rvQname] = rv
|
|
674
|
+
self.inScopeVars[rvQname] = rv
|
|
675
675
|
self.evaluateRangeVars(op, args[0], args[1:], contextItem, result)
|
|
676
676
|
if op != 'for' and len(result) > 0:
|
|
677
677
|
break # short circuit evaluation
|
arelle/formula/XPathParser.py
CHANGED
|
@@ -9,7 +9,7 @@ import time
|
|
|
9
9
|
import traceback
|
|
10
10
|
from collections.abc import Iterable, Sequence
|
|
11
11
|
from decimal import Decimal
|
|
12
|
-
from typing import Any, TYPE_CHECKING, Union
|
|
12
|
+
from typing import Any, TYPE_CHECKING, Union, cast
|
|
13
13
|
from xml.dom import minidom
|
|
14
14
|
|
|
15
15
|
from pyparsing import (
|
|
@@ -954,7 +954,7 @@ def staticExpressionFunctionContext() -> minidom.Element:
|
|
|
954
954
|
' xmlns:fn="http://www.w3.org/2005/xpath-functions"'
|
|
955
955
|
'/>'
|
|
956
956
|
).documentElement
|
|
957
|
-
return _staticExpressionFunctionContext
|
|
957
|
+
return cast(minidom.Element, _staticExpressionFunctionContext)
|
|
958
958
|
|
|
959
959
|
|
|
960
960
|
def parse(
|
|
@@ -2,12 +2,12 @@
|
|
|
2
2
|
See COPYRIGHT.md for copyright information.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Set, Any
|
|
5
|
+
from typing import TYPE_CHECKING, Optional, Set, Any
|
|
6
6
|
|
|
7
7
|
from arelle.ModelValue import QName
|
|
8
8
|
|
|
9
9
|
class QNameAt(QName):
|
|
10
|
-
def __init__(self, prefix: str
|
|
10
|
+
def __init__(self, prefix: Optional[str], namespaceURI: Optional[str], localName: str, atSuffix:str = "end") -> None:
|
|
11
11
|
super(QNameAt, self).__init__(prefix, namespaceURI, localName)
|
|
12
12
|
self.atSuffix: str = atSuffix # The context suffix must be either @end or @start. If an @ value is not provided then the suffix defaults to @end.
|
|
13
13
|
|
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
'''
|
|
2
2
|
See COPYRIGHT.md for copyright information.
|
|
3
3
|
'''
|
|
4
|
-
from typing import Union
|
|
5
|
-
from types import UnionType
|
|
4
|
+
from typing import Union, get_origin
|
|
6
5
|
from collections import defaultdict
|
|
7
6
|
from decimal import Decimal
|
|
8
7
|
from typing import GenericAlias
|
|
@@ -28,7 +27,7 @@ def viewXbrlTxmyObj(xbrlDts, objClass, tabWin, header, additionalViews=None):
|
|
|
28
27
|
initialParentProp = False
|
|
29
28
|
if isinstance(propType, str):
|
|
30
29
|
continue
|
|
31
|
-
elif
|
|
30
|
+
elif get_origin(propType) is Union:
|
|
32
31
|
if any(arg.__name__.startswith("Xbrl") for arg in propType.__args__):
|
|
33
32
|
continue
|
|
34
33
|
elif propType.__name__.startswith("Xbrl"): # skip taxonomy alias type
|
|
@@ -2,7 +2,8 @@
|
|
|
2
2
|
See COPYRIGHT.md for copyright information.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING,
|
|
5
|
+
from typing import TYPE_CHECKING, Optional, Any
|
|
6
|
+
from typing_extensions import TypeAlias
|
|
6
7
|
from decimal import Decimal
|
|
7
8
|
|
|
8
9
|
from arelle.ModelValue import QName
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
See COPYRIGHT.md for copyright information.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Optional
|
|
5
|
+
from typing import TYPE_CHECKING, Optional, Union
|
|
6
6
|
|
|
7
7
|
from arelle.ModelValue import qname, QName, DateTime, YearMonthDayTimeDuration
|
|
8
8
|
from arelle.PythonUtil import OrderedSet
|
|
@@ -32,7 +32,7 @@ class XbrlCubeDimension(XbrlTaxonomyObject):
|
|
|
32
32
|
dimensionName: QName # (required) The QName of the dimension object that is used to identify the dimension. For the core dimensions of concept, period, entity and unit, the core dimension QNames of xbrl:concept, xbrl:period, xbrl:entity, xbrl:unit and xbrl:language are used. The dimension object indicates if the dimension is typed or explicit.
|
|
33
33
|
domainName: Optional[QName] # (required if explicit dimension) The QName of the domain object that is used to identify the domain associated with the dimension. Only one domain can be associated with a dimension. The domain name cannot be provided for a typed dimension or the period core dimension.
|
|
34
34
|
domainSort: Optional[str] # (optional if typed dimension) A string value that indicates the sort order of the typed dimension. The values can be either asc or desc. The values are case insensitive. This indicates if the cube is viewed the order of the values shown on the typed dimension. This cannot be used on an explicit dimension.
|
|
35
|
-
allowDomainFacts: bool
|
|
35
|
+
allowDomainFacts: Union[bool, DefaultFalse] # (optional ) A boolean value that indicates if facts not identified with the dimension are included in the cube. For typed and explicit dimensions the value defaults to false. A value of true for a typed or explicit dimension will include facts that don't use the dimension in the cube. For the period core dimension, forever facts or facts with no period dimension are included when this value is set to true. For units, this is a unit with no units such as a string or date. For the entity core dimension, it is fact values with no entity. This property cannot be used on the concept core dimension.
|
|
36
36
|
periodConstraints: set[XbrlPeriodConstraint] # (optional only for period core dimension) Defines an ordered set of periodConstraint objects to restrict fact values in a cube to fact values with a specified period.
|
|
37
37
|
|
|
38
38
|
class XbrlCube(XbrlReferencableTaxonomyObject):
|
|
@@ -49,7 +49,7 @@ class XbrlAllowedCubeDimension(XbrlTaxonomyObject):
|
|
|
49
49
|
dimensionName: Optional[QName] # (optional) The dimension QName that identifies the taxonomy defined dimension.
|
|
50
50
|
dimensionType: Optional[str] # (optional) The dimension QName that identifies the taxonomy defined dimension.
|
|
51
51
|
dimensionDataType: Optional[QName] # (optional) The dimension QName that identifies the taxonomy defined dimension.
|
|
52
|
-
required: bool
|
|
52
|
+
required: Union[bool, DefaultFalse] # (optional) The dimension QName that identifies the taxonomy defined dimension.
|
|
53
53
|
|
|
54
54
|
class XbrlRequiredCubeRelationship(XbrlTaxonomyObject):
|
|
55
55
|
relationshipTypeName: QName # (required) The relationship type QName of a relationship. This requires that at lease one of these relationship types exist on the cube.
|
|
@@ -59,11 +59,11 @@ class XbrlRequiredCubeRelationship(XbrlTaxonomyObject):
|
|
|
59
59
|
class XbrlCubeType(XbrlReferencableTaxonomyObject):
|
|
60
60
|
taxonomy: XbrlTaxonomyType
|
|
61
61
|
name: QNameKeyType # (required) The name is a QName that uniquely identifies the cube type object.
|
|
62
|
-
baseCubeType: bool
|
|
63
|
-
periodDimension: bool
|
|
64
|
-
entityDimension: bool
|
|
65
|
-
unitDimension: bool
|
|
66
|
-
taxonomyDefinedDimension: bool
|
|
62
|
+
baseCubeType: Union[bool, DefaultTrue] # (optional) Base cube type that the cube object is based on. Uses the QName of a cubeType object. The property only allows restriction rather than expansion of the baseCubeTape.
|
|
63
|
+
periodDimension: Union[bool, DefaultTrue] # (optional) boolean to indicate if the period core dimension is included in the cube. Defaults to true.
|
|
64
|
+
entityDimension: Union[bool, DefaultTrue] # (optional) boolean to indicate if the entity core dimension is included in the cube. Defaults to true.
|
|
65
|
+
unitDimension: Union[bool, DefaultTrue] # (optional) boolean to indicate if the unit core dimension is included in the cube. Defaults to true.
|
|
66
|
+
taxonomyDefinedDimension: Union[bool, DefaultTrue] # (optional) boolean to indicate if taxonomy defined dimensions are included in the cube. Defaults to true.
|
|
67
67
|
allowedCubeDimensions: OrderedSet[XbrlAllowedCubeDimension] # (optional) An ordered set of allowedCubeDimension objects that are permitted to be used on the cube. If the property is not defined then any dimensions can be associated with the cube.
|
|
68
68
|
requiredCubeRelationships: OrderedSet[XbrlRequiredCubeRelationship] # (optional) An ordered set of requiredCubeRelationship objects that at a minimum must be associated with the cube.
|
|
69
69
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
See COPYRIGHT.md for copyright information.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, cast, Any, ClassVar
|
|
5
|
+
from typing import TYPE_CHECKING, Optional, Union, cast, Any, ClassVar
|
|
6
6
|
from collections import OrderedDict, defaultdict # OrderedDict is not same as dict, has additional key order features
|
|
7
7
|
import sys, traceback
|
|
8
8
|
from arelle.ModelValue import QName, AnyURI
|
|
@@ -58,7 +58,7 @@ class XbrlDts(ModelXbrl): # complete wrapper for ModelXbrl
|
|
|
58
58
|
def referenceTypes(self):
|
|
59
59
|
return set(obj.referenceType for l in self.tagObjects.values() for obj in l if hasattr(obj, "referenceType"))
|
|
60
60
|
|
|
61
|
-
def labelValue(self, name: QName, labelType: QName, lang: str
|
|
61
|
+
def labelValue(self, name: QName, labelType: QName, lang: Optional[str] = None, fallbackToName: bool = True) -> Optional[str]:
|
|
62
62
|
if labelType == XbrlConst.conceptNameLabelRole:
|
|
63
63
|
return str(name)
|
|
64
64
|
if lang is None:
|
|
@@ -76,7 +76,7 @@ class XbrlDts(ModelXbrl): # complete wrapper for ModelXbrl
|
|
|
76
76
|
return str(name)
|
|
77
77
|
return None
|
|
78
78
|
|
|
79
|
-
def referenceProperties(self, name: QName, referenceType: QName
|
|
79
|
+
def referenceProperties(self, name: QName, referenceType: Optional[QName], lang: Optional[str] = None) -> list[XbrlPropertyType]:
|
|
80
80
|
refProperties = defaultdict(list)
|
|
81
81
|
if lang is None:
|
|
82
82
|
lang = self.modelXbrl.modelManager.defaultLang
|
|
@@ -90,11 +90,11 @@ class XbrlDts(ModelXbrl): # complete wrapper for ModelXbrl
|
|
|
90
90
|
|
|
91
91
|
|
|
92
92
|
# UI thread viewTaxonomyObject
|
|
93
|
-
def viewTaxonomyObject(self, objectId: str
|
|
93
|
+
def viewTaxonomyObject(self, objectId: Union[str, int]) -> None:
|
|
94
94
|
"""Finds taxonomy object, if any, and synchronizes any views displaying it to bring the model object into scrollable view region and highlight it
|
|
95
95
|
:param objectId: string which includes _ordinalNumber, produced by ModelObject.objectId(), or integer object index
|
|
96
96
|
"""
|
|
97
|
-
xbrlObj: XbrlObject
|
|
97
|
+
xbrlObj: Union[XbrlObject, str, int] = ""
|
|
98
98
|
try:
|
|
99
99
|
if isinstance(objectId, XbrlObject):
|
|
100
100
|
xbrlObj = objectId
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
See COPYRIGHT.md for copyright information.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING
|
|
5
|
+
from typing import TYPE_CHECKING, Union
|
|
6
6
|
|
|
7
7
|
from arelle.ModelValue import QName, AnyURI
|
|
8
8
|
from arelle.PythonUtil import OrderedSet
|
|
@@ -18,5 +18,5 @@ class XbrlImportedTaxonomy(XbrlTaxonomyObject):
|
|
|
18
18
|
taxonomyName: QNameKeyType # (required) The QName of the taxonomy to import. The location of the taxonomy QName is resolved by referencing the namespace map which includes the url of the namespace. When importing XBRL 2.1 taxonomies a QName comprising the namespace of the taxonomy to import and a local name of taxonomy is defined. i.e. ifrs:Taxonomy.
|
|
19
19
|
includeObjects: set[QName] # (optional) A set of object QNames that should be imported from the taxonomyName location property. Only the objects defined in the include and any dependent objects are added to the dts. This property can only be used for taxonomy files using the OIM specification. The dependents of each object are defined in this specification.
|
|
20
20
|
includeObjectTypes: set[QName] # (optional) A set of object type QNames that should be imported from the taxonomyName location property. Examples include xbrl:conceptObject and xbrl:memberObject. All objects of the specified object types from the taxonomyName and any dependent objects will be imported. This property can only be used for taxonomy files using the OIM specification. The includeObjectTypes cannot include the label object.
|
|
21
|
-
excludeLabels: bool
|
|
22
|
-
followImport: bool
|
|
21
|
+
excludeLabels: Union[bool, DefaultTrue] # (optional) If set to true any labels attached to the objects comprising the dts deriving from the taxonomyName property will be excluded from the dts. The default value is false.
|
|
22
|
+
followImport: Union[bool, DefaultFalse] # (optional) If set to false the dts resolution will not import taxonomies defined in descendant ImportedTaxonomyObjects. These imports will be excluded from the dts. The default value is true. This means if a taxonomy QName is provided all imprtedTaxonomy objects will be brought into the dts.
|
|
@@ -37,9 +37,9 @@ class XbrlRelationship(XbrlTaxonomyObject):
|
|
|
37
37
|
return ("relationship", f"{str(self.source)}\u2192{self.target}", tuple(nestedProperties))
|
|
38
38
|
|
|
39
39
|
class XbrlRelationshipSet:
|
|
40
|
-
_relationshipsFrom: dict[QName, list[XbrlRelationship]]
|
|
41
|
-
_relationshipsTo: dict[QName, list[XbrlRelationship]]
|
|
42
|
-
_roots: OrderedSet[QName]
|
|
40
|
+
_relationshipsFrom: Optional[dict[QName, list[XbrlRelationship]]]
|
|
41
|
+
_relationshipsTo: Optional[dict[QName, list[XbrlRelationship]]]
|
|
42
|
+
_roots: Optional[OrderedSet[QName]]
|
|
43
43
|
|
|
44
44
|
def __init__(self):
|
|
45
45
|
self._relationshipsFrom = self._relationshipsTo = self._roots = None
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
See COPYRIGHT.md for copyright information.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Any, Optional
|
|
5
|
+
from typing import TYPE_CHECKING, Any, Optional, Union
|
|
6
6
|
|
|
7
7
|
from arelle.ModelValue import QName
|
|
8
8
|
from arelle.PythonUtil import OrderedSet
|
|
@@ -23,6 +23,6 @@ class XbrlPropertyType(XbrlReferencableTaxonomyObject):
|
|
|
23
23
|
name: QNameKeyType # (required) The name is a QName that uniquely identifies the property type object.
|
|
24
24
|
dataType: QName # (required) Indicates the dataType of the property value. These are provided as a QName based on the datatypes specified in the XBRL 2.1 specification and any custom datatype defined in the taxonomy.
|
|
25
25
|
enumerationDomain: Optional[QName] # (optional) Used to specify the QName of a domain object that is used to derive enumerated domain members QNames that can be used for the property.
|
|
26
|
-
definitional: bool
|
|
26
|
+
definitional: Union[bool, DefaultFalse] # (optional) Indicates if the property is definitional. If changes to the property change the meaning of the object it is definitional, if the property provides extra information about the object it is not definitional. If no value is provided the attribute defaults to false.
|
|
27
27
|
allowedObjects: set[QName] # (optional) List of allowable objects that the property can be used with. For example the balance property can only be used with concept objects.
|
|
28
|
-
allowedAsLinkProperty: bool
|
|
28
|
+
allowedAsLinkProperty: Union[bool, DefaultFalse] # (optional) Indicates if the property can be used a a properton the link between two objects in a relationship. If no value is provided the attribute defaults to false.
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
See COPYRIGHT.md for copyright information.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Optional, Any
|
|
5
|
+
from typing import TYPE_CHECKING, Optional, Any, Union
|
|
6
6
|
from collections import OrderedDict
|
|
7
7
|
from arelle.ModelValue import QName, AnyURI
|
|
8
8
|
from arelle.PythonUtil import OrderedSet
|
|
@@ -12,9 +12,9 @@ from .XbrlTaxonomyObject import XbrlReportObject
|
|
|
12
12
|
class XbrlFact(XbrlReportObject):
|
|
13
13
|
report: XbrlDtsType
|
|
14
14
|
id: Optional[str] # synthesized id (from fact key in JSON), marked Optional because it's a key, not value, in json source.
|
|
15
|
-
value: str
|
|
15
|
+
value: Optional[str] # (required) The value of the {value} property of the fact. The value MUST be represented as (xbrlje:invalidFactValue):
|
|
16
16
|
decimals: Optional[int] # An integer providing the value of the {decimals} property, or absent if the value is infinitely precise or not applicable (for nil or non-numeric facts).
|
|
17
|
-
dimensions: dict[QName
|
|
17
|
+
dimensions: dict[Union[QName, str], str] # (required) A dimensions object with properties corresponding to the members of the {dimensions} property.
|
|
18
18
|
links: dict[str, dict[str, list[str]]] # A links object, cormesponding to the link groups associated with the fact. This member MAY be absent if there are no link groups associated with the fact.
|
|
19
19
|
|
|
20
20
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
See COPYRIGHT.md for copyright information.
|
|
3
3
|
"""
|
|
4
4
|
|
|
5
|
-
from typing import TYPE_CHECKING, Optional
|
|
5
|
+
from typing import TYPE_CHECKING, Optional, Union
|
|
6
6
|
from decimal import Decimal
|
|
7
7
|
|
|
8
8
|
from arelle.ModelValue import QName
|
|
@@ -20,8 +20,8 @@ class XbrlTableTemplate(XbrlReferencableTaxonomyObject):
|
|
|
20
20
|
|
|
21
21
|
class XbrlAxisDimensions(XbrlTaxonomyObject):
|
|
22
22
|
dimensionName: QName # (required) The QName of a dimension defined by the cubeName property.
|
|
23
|
-
showTotal: bool
|
|
24
|
-
showAncestorColumns: bool
|
|
23
|
+
showTotal: Union[bool, DefaultFalse] # (optional) Indicates if the total of the dimension is shown in the axis. This is the value associated with the dimension absent. If no value is provided the default is false. The concept dimension defaults to false and cannot be set to true.
|
|
24
|
+
showAncestorColumns: Union[bool, DefaultFalse] # (optional) Define members on an explicit dimension that are not leaf values that are included on the axis. If not provided only leaf members on the axis will show.
|
|
25
25
|
totalLocation: Optional[str] # (optional) Indicates if the total is at the start or at the end when shown on the axis. The default value is end. The totalLocation attribute can only have a value of start or end.
|
|
26
26
|
periodAlign: OrderedSet[str] # (optional) the period align attribute can only be used with the period dimension. This attribute is used to align time values of facts in a dimension rather than being created as seperate columns or rows. The values @start and @end are used to indicate if instant values are aligned with duration values. These values are used to support roll-forwards in a datatgrid and will align duration values and instant values with the same start and end dates.
|
|
27
27
|
|
|
@@ -16,8 +16,7 @@ For debugging, saves the xsd objects loaded from the OIM taxonomy if
|
|
|
16
16
|
|
|
17
17
|
"""
|
|
18
18
|
|
|
19
|
-
from typing import TYPE_CHECKING, cast, GenericAlias, Union, _UnionGenericAlias
|
|
20
|
-
from types import UnionType
|
|
19
|
+
from typing import TYPE_CHECKING, cast, GenericAlias, Union, _UnionGenericAlias, get_origin
|
|
21
20
|
|
|
22
21
|
import os, io, json, sys, time, traceback
|
|
23
22
|
import jsonschema
|
|
@@ -377,7 +376,7 @@ def loadOIMTaxonomy(cntlr, error, warning, modelXbrl, oimFile, mappedUri, **kwar
|
|
|
377
376
|
eltClass = propType.__args__[0]
|
|
378
377
|
if isinstance(jsonValue, list):
|
|
379
378
|
for iObj, listObj in enumerate(jsonValue):
|
|
380
|
-
if isinstance(eltClass, str) or eltClass
|
|
379
|
+
if isinstance(eltClass, str) or getattr(eltClass, "__name__", "").startswith("Xbrl"): # nested Xbrl objects
|
|
381
380
|
if isinstance(listObj, dict):
|
|
382
381
|
# this handles lists of dict objects. For dicts of key-value dict objects see above.
|
|
383
382
|
createTaxonomyObjects(propName, listObj, newObj, pathParts + [f'{propName}[{iObj}]'])
|
|
@@ -401,7 +400,7 @@ def loadOIMTaxonomy(cntlr, error, warning, modelXbrl, oimFile, mappedUri, **kwar
|
|
|
401
400
|
collectionProp.append(listObj)
|
|
402
401
|
elif isinstance(jsonValue, dict) and keyClass:
|
|
403
402
|
for iObj, (valKey, valVal) in enumerate(jsonValue.items()):
|
|
404
|
-
if
|
|
403
|
+
if get_origin(_keyClass) is Union:
|
|
405
404
|
if QName in _keyClass.__args__ and ":" in valKey:
|
|
406
405
|
_valKey = qname(listObj, prefixNamespaces)
|
|
407
406
|
if _valKey is None:
|
|
@@ -447,7 +446,7 @@ def loadOIMTaxonomy(cntlr, error, warning, modelXbrl, oimFile, mappedUri, **kwar
|
|
|
447
446
|
keyValue = jsonValue # e.g. the QNAme of the new object for parent object collection
|
|
448
447
|
elif propType in (type(oimParentObj), type(oimParentObj).__name__): # propType may be a TypeAlias which is a string name of class
|
|
449
448
|
setattr(newObj, propName, oimParentObj)
|
|
450
|
-
elif ((
|
|
449
|
+
elif (((get_origin(propType) is Union) or isinstance(get_origin(propType), type(Union))) and # Optional[ ] type
|
|
451
450
|
propType.__args__[-1] in (type(None), DefaultTrue, DefaultFalse, DefaultZero)):
|
|
452
451
|
setattr(newObj, propName, {type(None): None, DefaultTrue: True, DefaultFalse: False, DefaultZero:0}[propType.__args__[-1]]) # use first of union for prop value creation
|
|
453
452
|
else: # absent json element
|
|
@@ -43,6 +43,9 @@ def disclosureSystemConfigURL(*args: Any, **kwargs: Any) -> str:
|
|
|
43
43
|
def modelXbrlLoadComplete(*args: Any, **kwargs: Any) -> ModelDocument | LoadingException | None:
|
|
44
44
|
return validationPlugin.modelXbrlLoadComplete(*args, **kwargs)
|
|
45
45
|
|
|
46
|
+
def validateFinally(*args: Any, **kwargs: Any) -> None:
|
|
47
|
+
return validationPlugin.validateFinally(*args, **kwargs)
|
|
48
|
+
|
|
46
49
|
def validateXbrlStart(val: ValidateXbrl, parameters: dict[Any, Any], *args: Any, **kwargs: Any) -> None:
|
|
47
50
|
val.extensionImportedUrls = set()
|
|
48
51
|
|
|
@@ -63,4 +66,5 @@ __pluginInfo__ = {
|
|
|
63
66
|
"ModelXbrl.LoadComplete": modelXbrlLoadComplete,
|
|
64
67
|
"Validate.XBRL.Start": validateXbrlStart,
|
|
65
68
|
"Validate.XBRL.Finally": validateXbrlFinally,
|
|
69
|
+
"ValidateFormula.Finished": validateFinally,
|
|
66
70
|
}
|
|
@@ -847,6 +847,66 @@ def rule_nl_kvk_3_6_3_3(
|
|
|
847
847
|
'Invalid filenames: %(invalidBasenames)s'))
|
|
848
848
|
|
|
849
849
|
|
|
850
|
+
@validation(
|
|
851
|
+
hook=ValidationHook.FINALLY,
|
|
852
|
+
disclosureSystems=[
|
|
853
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
854
|
+
],
|
|
855
|
+
)
|
|
856
|
+
def rule_nl_kvk_3_7_1_1(
|
|
857
|
+
pluginData: PluginValidationDataExtension,
|
|
858
|
+
val: ValidateXbrl,
|
|
859
|
+
*args: Any,
|
|
860
|
+
**kwargs: Any,
|
|
861
|
+
) -> Iterable[Validation]:
|
|
862
|
+
"""
|
|
863
|
+
NL-KVK.3.7.1.1: The filing MUST be valid against the formula linkbase assertions with error severity.
|
|
864
|
+
"""
|
|
865
|
+
modelXbrl = val.modelXbrl
|
|
866
|
+
sumErrMsgs = 0
|
|
867
|
+
for e in modelXbrl.errors:
|
|
868
|
+
if isinstance(e,dict):
|
|
869
|
+
for id, (numSat, numUnsat, numOkMsgs, numWrnMsgs, numErrMsgs) in e.items():
|
|
870
|
+
sumErrMsgs += numErrMsgs
|
|
871
|
+
if sumErrMsgs > 0:
|
|
872
|
+
yield Validation.error(
|
|
873
|
+
codes='NL.NL-KVK.3.7.1.1.targetXBRLDocumentWithFormulaErrors',
|
|
874
|
+
msg=_("The filing is not valid against the formula linkbase assertions with error severity. Address the %(numUnsatisfied)s unresolved formula linkbase validation errors."),
|
|
875
|
+
modelObject=modelXbrl,
|
|
876
|
+
numUnsatisfied=sumErrMsgs
|
|
877
|
+
)
|
|
878
|
+
|
|
879
|
+
|
|
880
|
+
@validation(
|
|
881
|
+
hook=ValidationHook.FINALLY,
|
|
882
|
+
disclosureSystems=[
|
|
883
|
+
DISCLOSURE_SYSTEM_NL_INLINE_2024
|
|
884
|
+
],
|
|
885
|
+
)
|
|
886
|
+
def rule_nl_kvk_3_7_1_2(
|
|
887
|
+
pluginData: PluginValidationDataExtension,
|
|
888
|
+
val: ValidateXbrl,
|
|
889
|
+
*args: Any,
|
|
890
|
+
**kwargs: Any,
|
|
891
|
+
) -> Iterable[Validation]:
|
|
892
|
+
"""
|
|
893
|
+
NL-KVK.3.7.1.2: The filing MUST be valid against the formula linkbase assertions with error warning.
|
|
894
|
+
"""
|
|
895
|
+
modelXbrl = val.modelXbrl
|
|
896
|
+
sumWrnMsgs = 0
|
|
897
|
+
for e in modelXbrl.errors:
|
|
898
|
+
if isinstance(e,dict):
|
|
899
|
+
for id, (numSat, numUnsat, numOkMsgs, numWrnMsgs, numErrMsgs) in e.items():
|
|
900
|
+
sumWrnMsgs += numWrnMsgs
|
|
901
|
+
if sumWrnMsgs > 0:
|
|
902
|
+
yield Validation.warning(
|
|
903
|
+
codes='NL.NL-KVK.3.7.1.2.targetXBRLDocumentWithFormulaWarnings',
|
|
904
|
+
msg=_("The filing is not valid against the formula linkbase assertions with warning severity. Address the %(numUnsatisfied)s unresolved formula linkbase validation warnings."),
|
|
905
|
+
modelObject=modelXbrl,
|
|
906
|
+
numUnsatisfied=sumWrnMsgs
|
|
907
|
+
)
|
|
908
|
+
|
|
909
|
+
|
|
850
910
|
@validation(
|
|
851
911
|
hook=ValidationHook.XBRL_FINALLY,
|
|
852
912
|
disclosureSystems=[
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: arelle-release
|
|
3
|
-
Version: 2.37.
|
|
3
|
+
Version: 2.37.20
|
|
4
4
|
Summary: An open source XBRL platform.
|
|
5
5
|
Author-email: "arelle.org" <support@arelle.org>
|
|
6
6
|
License: Apache-2.0
|
|
@@ -41,6 +41,7 @@ Requires-Dist: pillow<12,>=10
|
|
|
41
41
|
Requires-Dist: pyparsing==3.*
|
|
42
42
|
Requires-Dist: python-dateutil==2.*
|
|
43
43
|
Requires-Dist: regex
|
|
44
|
+
Requires-Dist: typing-extensions==4.*
|
|
44
45
|
Provides-Extra: crypto
|
|
45
46
|
Requires-Dist: pycryptodome==3.*; extra == "crypto"
|
|
46
47
|
Provides-Extra: db
|
|
@@ -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=g3XXMjuyKJk2eoqvHGqoyIs2bMfcODwOeISDRCcY9gc,24749
|
|
24
|
-
arelle/FileSource.py,sha256=
|
|
24
|
+
arelle/FileSource.py,sha256=OHWArRo30BfqC4vmNsSsUVOjRXvhDGlW4EVmE5uG9ZM,46652
|
|
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
|
|
@@ -37,7 +37,7 @@ arelle/Locale.py,sha256=aKC1Uaen_dbPGb92kZa_yUoo7On_QtWlvr5H_F9BNXg,33008
|
|
|
37
37
|
arelle/ModelDocument.py,sha256=Sq6umEdn-aNHjxIpEsXTT7A4V25nGY0JiylSnhr9zSI,130749
|
|
38
38
|
arelle/ModelDtsObject.py,sha256=nvHQs4BDmPxY6mqLiBuqIGRJXyA1EqOEGB2f3S6A6w4,88656
|
|
39
39
|
arelle/ModelFormulaObject.py,sha256=-eb0lBYciEeAvvGduIs3AHGNGrxge9_0g1cVT6UUgvc,122560
|
|
40
|
-
arelle/ModelInstanceObject.py,sha256=
|
|
40
|
+
arelle/ModelInstanceObject.py,sha256=gRRPEZR-x6IL-0z0-asKd2nbgReZFKHKmk7QTxKXI64,74254
|
|
41
41
|
arelle/ModelManager.py,sha256=QUNcD2LC_YyyGFU8bFTSuzIGI1qpOK55KBlQ697Ep1I,11075
|
|
42
42
|
arelle/ModelObject.py,sha256=Rttkhv-PtfneZyDYsG5FDh98BzT97ameTmwNdqFaOv0,18657
|
|
43
43
|
arelle/ModelObjectFactory.py,sha256=XuNF4Re3p00tODCdyspfar_DNCXfARqCaLEkntgAZ0g,8750
|
|
@@ -49,7 +49,7 @@ arelle/ModelTestcaseObject.py,sha256=sOyIktwv23BWOGyokzcwlJALp7UENsMAKKJmVfAZh6c
|
|
|
49
49
|
arelle/ModelValue.py,sha256=t0mVl3-EcE4MaXdRL9F94XaBwBfu1xG2DmFuHOczrEk,39447
|
|
50
50
|
arelle/ModelVersObject.py,sha256=cPD1IzhkCfuV1eMgVFWes88DH_6WkUj5kj7sgGF2M0I,26062
|
|
51
51
|
arelle/ModelVersReport.py,sha256=bXEA9K3qkH57aABn5l-m3CTY0FAcF1yX6O4fo-URjl8,73326
|
|
52
|
-
arelle/ModelXbrl.py,sha256=
|
|
52
|
+
arelle/ModelXbrl.py,sha256=bj-_enkb2AV2KVCRrRf2YPGxOoO9cdqKnVqfy3bGFZk,72125
|
|
53
53
|
arelle/PackageManager.py,sha256=BvPExMcxh8rHMxogOag-PGbX6vXdhCiXAHcDLA6Ypsc,32592
|
|
54
54
|
arelle/PluginManager.py,sha256=foSgWvRI1Ret-6KVRQMFSv4RtpEf_0UB7468N_NjPGU,42116
|
|
55
55
|
arelle/PluginUtils.py,sha256=0vFQ29wVVpU0cTY3YOBL6FhNQhhCTwShBH4qTJGLnvc,2426
|
|
@@ -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=6XCSb3wXvbuwzUZ4u7I9uuIYrvk_rC4_utLxrLm9hX8,515
|
|
127
127
|
arelle/typing.py,sha256=PRe-Fxwr2SBqYYUVPCJ3E7ddDX0_oOISNdT5Q97EbRM,1246
|
|
128
128
|
arelle/api/Session.py,sha256=O8zpg7MJys9uxwwHf8OsSlZxpPdq7A3ONyY39Q4A3Kc,6218
|
|
129
129
|
arelle/archive/CustomLogger.py,sha256=v_JXOCQLDZcfaFWzxC9FRcEf9tQi4rCI4Sx7jCuAVQI,1231
|
|
@@ -230,8 +230,8 @@ arelle/formula/FactAspectsCache.py,sha256=YKEVZSIfP0NRB7Vxweg3ylyxKIDSZMdaTrASjg
|
|
|
230
230
|
arelle/formula/FormulaConsisAsser.py,sha256=hO4GZwozM5cGl1xTU6OwoF3LlaMxAEB5Oy0rJh7uyG0,7567
|
|
231
231
|
arelle/formula/FormulaEvaluator.py,sha256=WKNyJz1Os9gsKedJXLNC9y9u11Ea4_JQ-RAI7gSFmPU,82600
|
|
232
232
|
arelle/formula/ValidateFormula.py,sha256=b_stG7h8RhaSsPt07_x-GRBHOl2uy-JNSMd6v-jkg_w,95942
|
|
233
|
-
arelle/formula/XPathContext.py,sha256=
|
|
234
|
-
arelle/formula/XPathParser.py,sha256=
|
|
233
|
+
arelle/formula/XPathContext.py,sha256=7UsUZqHYaz60SgSoEIQxIyK2wbwRMj3iFFqGbpye-ao,49849
|
|
234
|
+
arelle/formula/XPathParser.py,sha256=__I7KwHjCk7MdvrJFHkHW0eLKgw_sQ5S7B1bt17_YqQ,50410
|
|
235
235
|
arelle/formula/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
236
236
|
arelle/images/arelle-full-word.ico,sha256=jsAzyAJZTtVPafxhgFQtdWJj7r_r0YhX_iWvWnZ4QKg,2430
|
|
237
237
|
arelle/images/arelle-mac-icon-4.gif,sha256=jTXc1dBEgZuXuZVd1XOuLuXfpjNW_pusn0mPhHhkOtk,2619
|
|
@@ -331,30 +331,30 @@ arelle/plugin/streamingExtensions.py,sha256=9W4iQ1u8LFn7-ZEfbqBtuwKiZj-aq8FUXNmj
|
|
|
331
331
|
arelle/plugin/systemInfo.py,sha256=Rv_9HmDwkswwBmhxrkz8uAL65J332r-QItTYMSz2Zbc,1641
|
|
332
332
|
arelle/plugin/unpackSecEisFile.py,sha256=TVdYUKhgAZ0145anRi6kBesOxPJEvC5YROO1j-hcuwU,2631
|
|
333
333
|
arelle/plugin/xuleSaver.py,sha256=3eNZAxziFos0YrC5NWezFPsIxN7Ex8jb-CaOVTd8Gw4,30073
|
|
334
|
-
arelle/plugin/OimTaxonomy/ModelValueMore.py,sha256=
|
|
334
|
+
arelle/plugin/OimTaxonomy/ModelValueMore.py,sha256=tjISOQby294o_N-PMv-GcuKSo-lc2o-hWuRZW6tDegU,637
|
|
335
335
|
arelle/plugin/OimTaxonomy/ValidateDTS.py,sha256=LTI_pTeyK7FLNi560vmZPkPGT8HmGhcalnKiO5T8ccI,32081
|
|
336
|
-
arelle/plugin/OimTaxonomy/ViewXbrlTxmyObj.py,sha256=
|
|
336
|
+
arelle/plugin/OimTaxonomy/ViewXbrlTxmyObj.py,sha256=zIe7dXf5bkY_wdzkS_lWrx31cDjklNiQBBQ44T8_SQo,11147
|
|
337
337
|
arelle/plugin/OimTaxonomy/XbrlAbstract.py,sha256=KCh7IpmjDRA9Qx-XA7DEfL2f-GYLSAzjxpCCZ7YuqwM,781
|
|
338
|
-
arelle/plugin/OimTaxonomy/XbrlConcept.py,sha256=
|
|
338
|
+
arelle/plugin/OimTaxonomy/XbrlConcept.py,sha256=2hPAueqEKUxk9gWY-b2iVjGDg_PEpgk50qGEjLsLIyo,5412
|
|
339
339
|
arelle/plugin/OimTaxonomy/XbrlConst.py,sha256=3w4UHM0IPYBO9xsaO_ULnVUYxqyaGUqzlhkVO6GVlEA,7376
|
|
340
|
-
arelle/plugin/OimTaxonomy/XbrlCube.py,sha256=
|
|
340
|
+
arelle/plugin/OimTaxonomy/XbrlCube.py,sha256=ddvSiv-zbDOjUIdYrh1xLwDJzq9UJNmAgIN8jVDFklA,10434
|
|
341
341
|
arelle/plugin/OimTaxonomy/XbrlDimension.py,sha256=lUMY7x3ERACmgekwW5grHYMyIE7s0XzBhgfbSJFsPeM,4804
|
|
342
|
-
arelle/plugin/OimTaxonomy/XbrlDts.py,sha256=
|
|
342
|
+
arelle/plugin/OimTaxonomy/XbrlDts.py,sha256=lz8buLWemPW6jz5m_B-cKh2XvmNoPQRsHBw6qxRjYYg,7581
|
|
343
343
|
arelle/plugin/OimTaxonomy/XbrlEntity.py,sha256=UZRWqIvj1JkixbwN_H5W1cy02r6st-s6y_X2MENl2pg,796
|
|
344
344
|
arelle/plugin/OimTaxonomy/XbrlGroup.py,sha256=hxPUXNN5kY-O3siVInfIp1KPT1v5oRiERi4vOT_tfs0,1420
|
|
345
|
-
arelle/plugin/OimTaxonomy/XbrlImportedTaxonomy.py,sha256=
|
|
345
|
+
arelle/plugin/OimTaxonomy/XbrlImportedTaxonomy.py,sha256=CO3nN3W3NC_0mAgq-wsoZCagz-sfbdM--YIRe_w-bvY,2456
|
|
346
346
|
arelle/plugin/OimTaxonomy/XbrlLabel.py,sha256=5hqxnXf1d12HrPwQ2ppDJzRIJYq6WOtT7Upe4N6ihNo,1876
|
|
347
|
-
arelle/plugin/OimTaxonomy/XbrlNetwork.py,sha256=
|
|
348
|
-
arelle/plugin/OimTaxonomy/XbrlProperty.py,sha256=
|
|
347
|
+
arelle/plugin/OimTaxonomy/XbrlNetwork.py,sha256=vDuRaDJc0fJaiolDY4NjcmxeUBdDbVaO3V_tr2QKqsw,7509
|
|
348
|
+
arelle/plugin/OimTaxonomy/XbrlProperty.py,sha256=MBAIg0gIwGSGXQr980mX7_yDYrv0RdaWjvDqD1w-HXY,2013
|
|
349
349
|
arelle/plugin/OimTaxonomy/XbrlReference.py,sha256=X6MduupPkeIXyge_boUs2o9dMQ3NT7cj0VCfAS5z7s4,2395
|
|
350
|
-
arelle/plugin/OimTaxonomy/XbrlReport.py,sha256=
|
|
351
|
-
arelle/plugin/OimTaxonomy/XbrlTableTemplate.py,sha256=
|
|
350
|
+
arelle/plugin/OimTaxonomy/XbrlReport.py,sha256=QAJlHShRTCfGcc0chgbEFCQfIwfok2xKRK2WixtKUMY,1398
|
|
351
|
+
arelle/plugin/OimTaxonomy/XbrlTableTemplate.py,sha256=cCIMStv-F6pkliBIBaKFfUsQMdW4B-CEphMVRK68Flk,3085
|
|
352
352
|
arelle/plugin/OimTaxonomy/XbrlTaxonomy.py,sha256=JxucxkZbl7VKhWXvQV7B9mkbXbc-GSvZs_qBnK_xt9M,6846
|
|
353
353
|
arelle/plugin/OimTaxonomy/XbrlTaxonomyObject.py,sha256=UojOSnsIL3XUVEcngm-dvzYl6uXPLXUoJwgXY_HjRzo,7267
|
|
354
354
|
arelle/plugin/OimTaxonomy/XbrlTransform.py,sha256=MrLWk77u3Gn1GUkwj3i3S3exTFWE0Ls3z0tfCM6sTIA,726
|
|
355
|
-
arelle/plugin/OimTaxonomy/XbrlTypes.py,sha256=
|
|
355
|
+
arelle/plugin/OimTaxonomy/XbrlTypes.py,sha256=RIY0Ox2E2Md8RxNizdVwQl5f27iTWSh7m_ExUTdoRA4,820
|
|
356
356
|
arelle/plugin/OimTaxonomy/XbrlUnit.py,sha256=z9HvsdKohrBOacHdNscVWqHRuB67qG722wsIYa7TKTk,1157
|
|
357
|
-
arelle/plugin/OimTaxonomy/__init__.py,sha256=
|
|
357
|
+
arelle/plugin/OimTaxonomy/__init__.py,sha256=8R3Civ-_vJYSMU9rep8LtIvuJvSANsbiMTNyYIYjJH0,62156
|
|
358
358
|
arelle/plugin/OimTaxonomy/resources/iso4217.json,sha256=3a0VvUqH8EtsLImxIzZU6Ta-VXbXyuhCp1Hdpja6UD4,149911
|
|
359
359
|
arelle/plugin/OimTaxonomy/resources/oim-taxonomy-schema.json,sha256=8-OIssr1XEEecJAnDLvtFQy8dcCAHfyuJ_8eBktwBDQ,42637
|
|
360
360
|
arelle/plugin/OimTaxonomy/resources/ref.json,sha256=uSqnsW-YZTJSejg9XGxwoU1Wwt5UMljVDUi7hCDO_mw,11791
|
|
@@ -412,14 +412,14 @@ arelle/plugin/validate/FERC/resources/ferc-utr.xml,sha256=OCRj9IUpdXATCBXKbB71ap
|
|
|
412
412
|
arelle/plugin/validate/NL/DisclosureSystems.py,sha256=kTjpxkgwn58wHCbaLRBInirOy-2cpK9MLWEFJ_193y4,180
|
|
413
413
|
arelle/plugin/validate/NL/PluginValidationDataExtension.py,sha256=3fAYo-rilJHN8I0XVdM3AxGIMF0j8StZ52DNCK_fQdk,17620
|
|
414
414
|
arelle/plugin/validate/NL/ValidationPluginExtension.py,sha256=2qvvOqBkgk2LwERTHDuxtrRupYz3yRyhH71XQLbl9F4,15507
|
|
415
|
-
arelle/plugin/validate/NL/__init__.py,sha256=
|
|
415
|
+
arelle/plugin/validate/NL/__init__.py,sha256=KPqcRHHYjaTQOLzN7vh3GtUhsVAB-aQGtrp_TUsV9LE,3064
|
|
416
416
|
arelle/plugin/validate/NL/resources/config.xml,sha256=i_ns2wHmQYjhkRItevRR8tzfkl31ASfbWlc5t6pDB-w,1117
|
|
417
417
|
arelle/plugin/validate/NL/rules/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
418
418
|
arelle/plugin/validate/NL/rules/br_kvk.py,sha256=0SwKieWzTDm3YMsXPS6zTdgbk7_Z9CzqRkRmCRz1OiQ,15789
|
|
419
419
|
arelle/plugin/validate/NL/rules/fg_nl.py,sha256=4Puq5wAjtK_iNd4wisH_R0Z_EKJ7MT2OCai5g4t1MPE,10714
|
|
420
420
|
arelle/plugin/validate/NL/rules/fr_kvk.py,sha256=-_BLeWGoZ_f56p5VO4X40S45Ny3Ej-WK6Srei1KVSxU,8170
|
|
421
421
|
arelle/plugin/validate/NL/rules/fr_nl.py,sha256=-M1WtXp06khhtkfOVPCa-b8UbC281gk4YfDhvtAVlnI,31424
|
|
422
|
-
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=
|
|
422
|
+
arelle/plugin/validate/NL/rules/nl_kvk.py,sha256=PZoVkuf0aCHtCL30Ye4pavgyyX2GF3ZRpkaezcHwBfw,34690
|
|
423
423
|
arelle/plugin/validate/ROS/DisclosureSystems.py,sha256=rJ81mwQDYTi6JecFZ_zhqjjz3VNQRgjHNSh0wcQWAQE,18
|
|
424
424
|
arelle/plugin/validate/ROS/PluginValidationDataExtension.py,sha256=IV7ILhNvgKwQXqbpSA6HRNt9kEnejCyMADI3wyyIgk0,4036
|
|
425
425
|
arelle/plugin/validate/ROS/ValidationPluginExtension.py,sha256=FBhEp8t396vGdvCbMEimfcxmGiGnhXMen-yVLWnkFaI,758
|
|
@@ -741,7 +741,7 @@ arelle/utils/validate/ValidationUtil.py,sha256=9vmSvShn-EdQy56dfesyV8JjSRVPj7txr
|
|
|
741
741
|
arelle/utils/validate/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
742
742
|
arelle/webserver/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
743
743
|
arelle/webserver/bottle.py,sha256=P-JECd9MCTNcxCnKoDUvGcoi03ezYVOgoWgv2_uH-6M,362
|
|
744
|
-
arelle_release-2.37.
|
|
744
|
+
arelle_release-2.37.20.dist-info/licenses/LICENSE.md,sha256=Q0tn6q0VUbr-NM8916513NCIG8MNzo24Ev-sxMUBRZc,3959
|
|
745
745
|
tests/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
746
746
|
tests/integration_tests/download_cache.py,sha256=jVMIVICsZjcVc9DCPPu3fCjF9_cWSS3tqSynhFs3oAM,4097
|
|
747
747
|
tests/integration_tests/integration_test_util.py,sha256=H7mncbv0T9ZeVyrtk9Hohe3k6jgcYykHkt-LGE-Q9aQ,10270
|
|
@@ -796,7 +796,7 @@ tests/integration_tests/validation/conformance_suite_configurations/kvk_nt16.py,
|
|
|
796
796
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt17.py,sha256=lmEZonthFm0YKFmp1dwXtdJ2T7txUeSpL4mbAo8fl4Y,1292
|
|
797
797
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt18.py,sha256=EG2RQVkvFENhzUF3fl3QvDnH7ZPYS1n1Fo8bhfmSczM,1205
|
|
798
798
|
tests/integration_tests/validation/conformance_suite_configurations/kvk_nt19.py,sha256=FAzf9RhRmn_8yowpplJho2zEspX9FxJiVq8SjZT3Dsc,1199
|
|
799
|
-
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py,sha256=
|
|
799
|
+
tests/integration_tests/validation/conformance_suite_configurations/nl_inline_2024.py,sha256=9cUaoPCo68OshIH8lK4TPdR9dg4Gl0swTHhAkML_Bks,10918
|
|
800
800
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt16.py,sha256=O_LFVBZPkjxmbrU7_C7VTLtrdoCUx2bYXOXw6_MlRtQ,846
|
|
801
801
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt17.py,sha256=aTN3Ez6lPsZsuypHZP84DneOtYxUZSjUiGypHy6ofHQ,846
|
|
802
802
|
tests/integration_tests/validation/conformance_suite_configurations/nl_nt18.py,sha256=sqHLjrHc95dTu0guTgKkphaKM1zNfKGnN4GKkZDLzeU,845
|
|
@@ -1572,7 +1572,7 @@ tests/unit_tests/arelle/test_cntlr.py,sha256=zungezzESXZWNnOfUsoO_qqEqTxLgch7htv
|
|
|
1572
1572
|
tests/unit_tests/arelle/test_frozen_dict.py,sha256=MzboGMIJsqkpPPazaPbCbXFzJAGFIDQQdBjET8mEabI,5450
|
|
1573
1573
|
tests/unit_tests/arelle/test_frozen_ordered_set.py,sha256=5o7F_qrknwZUExVJObcA27wUPnbSrFeNyCKG2wacrFI,8746
|
|
1574
1574
|
tests/unit_tests/arelle/test_functionfn.py,sha256=4pD4-lxI2r0VcriyYyF36MkAz2qVCSgvoLx7r_Q0Kj8,3098
|
|
1575
|
-
tests/unit_tests/arelle/test_import.py,sha256=
|
|
1575
|
+
tests/unit_tests/arelle/test_import.py,sha256=yZthWo7YmiK-itFBESPTvHbiXVhkT7-3C-RF9mKhYi8,1651
|
|
1576
1576
|
tests/unit_tests/arelle/test_locale.py,sha256=u6NrZ6d26E3exHZqVzeDN8pOwoJi2Ryp_4sWkcnK5QY,1825
|
|
1577
1577
|
tests/unit_tests/arelle/test_modelmanager.py,sha256=U-SYe9dOyURAVP2a778VfMUiJ-2SSnHxu1vZkD5_SKM,496
|
|
1578
1578
|
tests/unit_tests/arelle/test_ordered_set.py,sha256=GkJgvdWIME5g5f3MD0tWJmAI6-aej3LOW4Xo61pUews,6527
|
|
@@ -1594,8 +1594,8 @@ tests/unit_tests/arelle/oim/test_load.py,sha256=NxiUauQwJVfWAHbbpsMHGSU2d3Br8Pki
|
|
|
1594
1594
|
tests/unit_tests/arelle/plugin/test_plugin_imports.py,sha256=bdhIs9frAnFsdGU113yBk09_jis-z43dwUItMFYuSYM,1064
|
|
1595
1595
|
tests/unit_tests/arelle/plugin/validate/ESEF/ESEF_Current/test_validate_css_url.py,sha256=XHABmejQt7RlZ0udh7v42f2Xb2STGk_fSaIaJ9i2xo0,878
|
|
1596
1596
|
tests/unit_tests/arelle/utils/validate/test_decorator.py,sha256=ZS8FqIY1g-2FCbjF4UYm609dwViax6qBMRJSi0vfuhY,2482
|
|
1597
|
-
arelle_release-2.37.
|
|
1598
|
-
arelle_release-2.37.
|
|
1599
|
-
arelle_release-2.37.
|
|
1600
|
-
arelle_release-2.37.
|
|
1601
|
-
arelle_release-2.37.
|
|
1597
|
+
arelle_release-2.37.20.dist-info/METADATA,sha256=K7acQC5mcoN1XxT008aOzdJB1bDThOfqEnCVSQ4fAx0,9134
|
|
1598
|
+
arelle_release-2.37.20.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
1599
|
+
arelle_release-2.37.20.dist-info/entry_points.txt,sha256=Uj5niwfwVsx3vaQ3fYj8hrZ1xpfCJyTUA09tYKWbzpo,111
|
|
1600
|
+
arelle_release-2.37.20.dist-info/top_level.txt,sha256=ZYmYGmhW5Jvo3vJ4iXBZPUI29LvYhntom04w90esJvU,13
|
|
1601
|
+
arelle_release-2.37.20.dist-info/RECORD,,
|
|
@@ -29,6 +29,10 @@ config = ConformanceSuiteConfig(
|
|
|
29
29
|
# AND {base} with > 20 characters (3.6.3.1)
|
|
30
30
|
'baseComponentInDocumentNameExceedsTwentyCharacters': 1,
|
|
31
31
|
},
|
|
32
|
+
'G3-7-1_1/index.xml:TC2_invalid': {
|
|
33
|
+
'message:valueKvKIdentifier': 13,
|
|
34
|
+
'nonIdenticalIdentifier': 1,
|
|
35
|
+
},
|
|
32
36
|
'G4-1-2_1/index.xml:TC2_valid': {
|
|
33
37
|
'undefinedLanguageForTextFact': 1,
|
|
34
38
|
'taggedTextFactOnlyInLanguagesOtherThanLanguageOfAReport': 5,
|
|
@@ -81,7 +85,6 @@ config = ConformanceSuiteConfig(
|
|
|
81
85
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_5/index.xml:TC2_invalid',
|
|
82
86
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-5-1_5/index.xml:TC3_invalid',
|
|
83
87
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-6-2_1/index.xml:TC2_invalid',
|
|
84
|
-
'conformance-suite-2024-sbr-domein-handelsregister/tests/G3-7-1_1/index.xml:TC2_invalid',
|
|
85
88
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-1-1_1/index.xml:TC3_invalid',
|
|
86
89
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-1-1_1/index.xml:TC4_invalid',
|
|
87
90
|
'conformance-suite-2024-sbr-domein-handelsregister/tests/G4-1-1_1/index.xml:TC5_invalid',
|
|
@@ -18,36 +18,6 @@ KNOWN_FAILURES = frozenset([
|
|
|
18
18
|
'arelle.formula.FormulaEvaluator',
|
|
19
19
|
])
|
|
20
20
|
|
|
21
|
-
# OIM Taxonomy uses typing features not available in Python 3.9 and earlier.
|
|
22
|
-
# Python 3.9 support will be dropped before this plugin is fully supported.
|
|
23
|
-
if sys.version_info < (3, 10):
|
|
24
|
-
KNOWN_FAILURES |= frozenset([
|
|
25
|
-
'arelle.plugin.OimTaxonomy.__init__',
|
|
26
|
-
'arelle.plugin.OimTaxonomy.ModelValueMore',
|
|
27
|
-
'arelle.plugin.OimTaxonomy.ValidateDTS',
|
|
28
|
-
'arelle.plugin.OimTaxonomy.ViewXbrlTxmyObj',
|
|
29
|
-
'arelle.plugin.OimTaxonomy.XbrlAbstract',
|
|
30
|
-
'arelle.plugin.OimTaxonomy.XbrlConcept',
|
|
31
|
-
'arelle.plugin.OimTaxonomy.XbrlConst',
|
|
32
|
-
'arelle.plugin.OimTaxonomy.XbrlCube',
|
|
33
|
-
'arelle.plugin.OimTaxonomy.XbrlDimension',
|
|
34
|
-
'arelle.plugin.OimTaxonomy.XbrlDts',
|
|
35
|
-
'arelle.plugin.OimTaxonomy.XbrlEntity',
|
|
36
|
-
'arelle.plugin.OimTaxonomy.XbrlGroup',
|
|
37
|
-
'arelle.plugin.OimTaxonomy.XbrlImportedTaxonomy',
|
|
38
|
-
'arelle.plugin.OimTaxonomy.XbrlLabel',
|
|
39
|
-
'arelle.plugin.OimTaxonomy.XbrlNetwork',
|
|
40
|
-
'arelle.plugin.OimTaxonomy.XbrlProperty',
|
|
41
|
-
'arelle.plugin.OimTaxonomy.XbrlReference',
|
|
42
|
-
'arelle.plugin.OimTaxonomy.XbrlReport',
|
|
43
|
-
'arelle.plugin.OimTaxonomy.XbrlTableTemplate',
|
|
44
|
-
'arelle.plugin.OimTaxonomy.XbrlTaxonomy',
|
|
45
|
-
'arelle.plugin.OimTaxonomy.XbrlTaxonomyObject',
|
|
46
|
-
'arelle.plugin.OimTaxonomy.XbrlTransform',
|
|
47
|
-
'arelle.plugin.OimTaxonomy.XbrlTypes',
|
|
48
|
-
'arelle.plugin.OimTaxonomy.XbrlUnit',
|
|
49
|
-
])
|
|
50
|
-
|
|
51
21
|
# Don't test common third party plugins which may be copied into a developer's workspace.
|
|
52
22
|
IGNORE_MODULE_PREFIXES = (
|
|
53
23
|
'arelle.plugin.EDGAR',
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|