tricc-oo 1.5.7__tar.gz → 1.5.9__tar.gz
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.
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/PKG-INFO +1 -1
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/pyproject.toml +1 -1
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/converters/drawio_type_map.py +2 -2
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/converters/xml_to_tricc.py +0 -11
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/models/base.py +7 -3
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/models/calculate.py +1 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/models/tricc.py +3 -3
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/strategies/input/drawio.py +1 -1
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/strategies/output/xls_form.py +1 -1
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/visitors/tricc.py +73 -81
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo.egg-info/PKG-INFO +1 -1
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/README.md +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/setup.cfg +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tests/build.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tests/test_cql.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tests/to_ocl.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/__init__.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/converters/__init__.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/converters/codesystem_to_ocl.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/converters/cql/cqlLexer.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/converters/cql/cqlListener.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/converters/cql/cqlParser.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/converters/cql/cqlVisitor.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/converters/cql_to_operation.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/converters/datadictionnary.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/converters/tricc_to_xls_form.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/converters/utils.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/models/__init__.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/models/lang.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/models/ocl.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/models/ordered_set.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/parsers/__init__.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/parsers/xml.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/serializers/__init__.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/serializers/planuml.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/serializers/xls_form.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/strategies/__init__.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/strategies/input/__init__.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/strategies/input/base_input_strategy.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/strategies/output/base_output_strategy.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/strategies/output/spice.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/strategies/output/xlsform_cdss.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/strategies/output/xlsform_cht.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/strategies/output/xlsform_cht_hf.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/visitors/__init__.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/visitors/utils.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo/visitors/xform_pd.py +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo.egg-info/SOURCES.txt +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo.egg-info/dependency_links.txt +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo.egg-info/requires.txt +0 -0
- {tricc_oo-1.5.7 → tricc_oo-1.5.9}/tricc_oo.egg-info/top_level.txt +0 -0
|
@@ -202,13 +202,13 @@ TYPE_MAP = {
|
|
|
202
202
|
},
|
|
203
203
|
TriccNodeType.diagnosis: {
|
|
204
204
|
"objects": ["UserObject", "object"],
|
|
205
|
-
"attributes": ["save", "reference","priority"],
|
|
205
|
+
"attributes": ["save", "reference", "priority"],
|
|
206
206
|
"mandatory_attributes": [ "name", 'label'],
|
|
207
207
|
"model": TriccNodeDiagnosis
|
|
208
208
|
},
|
|
209
209
|
TriccNodeType.proposed_diagnosis: {
|
|
210
210
|
"objects": ["UserObject", "object"],
|
|
211
|
-
"attributes": ["save", "reference", "severity"],
|
|
211
|
+
"attributes": ["save", "reference", "severity", "priority"],
|
|
212
212
|
"mandatory_attributes": [ "name", 'label'],
|
|
213
213
|
"model": TriccNodeProposedDiagnosis
|
|
214
214
|
},
|
|
@@ -475,17 +475,6 @@ def get_max_version(dict):
|
|
|
475
475
|
return max_version
|
|
476
476
|
|
|
477
477
|
|
|
478
|
-
def update_calc_version(calculates, name):
|
|
479
|
-
if name in calculates and len(calculates[name]) > 1:
|
|
480
|
-
ordered_list = sorted(list(calculates[name].values()), key=lambda x: x.path_len)
|
|
481
|
-
i = 1
|
|
482
|
-
len_max = len(calculates[name])
|
|
483
|
-
for elm in ordered_list:
|
|
484
|
-
elm.version = i
|
|
485
|
-
elm.last = (i == len_max)
|
|
486
|
-
i += 1
|
|
487
|
-
|
|
488
|
-
|
|
489
478
|
def get_max_named_version(calculates, name):
|
|
490
479
|
max = 0
|
|
491
480
|
if name in calculates:
|
|
@@ -106,7 +106,7 @@ class TriccBaseModel(BaseModel):
|
|
|
106
106
|
external_id: triccId = None
|
|
107
107
|
tricc_type: TriccNodeType
|
|
108
108
|
datatype: str = None
|
|
109
|
-
instance: int =
|
|
109
|
+
instance: int = 0
|
|
110
110
|
base_instance: Optional[TriccBaseModel] = None
|
|
111
111
|
last: bool = None
|
|
112
112
|
version: int = 1
|
|
@@ -123,7 +123,9 @@ class TriccBaseModel(BaseModel):
|
|
|
123
123
|
def to_dict(self):
|
|
124
124
|
return {key: value for key, value in vars(self).items() if not key.startswith('_')}
|
|
125
125
|
|
|
126
|
-
def make_instance(self, nb_instance, **kwargs):
|
|
126
|
+
def make_instance(self, nb_instance=None, **kwargs):
|
|
127
|
+
if nb_instance == None:
|
|
128
|
+
nb_instance = self.get_next_instance()
|
|
127
129
|
instance = self.copy()
|
|
128
130
|
attr_dict = self.to_dict()
|
|
129
131
|
for attr, value in attr_dict.items():
|
|
@@ -257,7 +259,7 @@ class TriccNodeBaseModel(TriccBaseModel):
|
|
|
257
259
|
|
|
258
260
|
|
|
259
261
|
|
|
260
|
-
def make_instance(self, instance_nb, activity=None):
|
|
262
|
+
def make_instance(self, instance_nb=None, activity=None):
|
|
261
263
|
instance = super().make_instance(instance_nb)
|
|
262
264
|
instance.group = activity
|
|
263
265
|
if hasattr(self, 'activity') and activity is not None:
|
|
@@ -630,6 +632,8 @@ def not_clean(a):
|
|
|
630
632
|
# @param list_or
|
|
631
633
|
# @param and elm use upstream
|
|
632
634
|
def clean_or_list(list_or, elm_and=None):
|
|
635
|
+
if len(list_or) == 1:
|
|
636
|
+
return list(list_or)
|
|
633
637
|
if TriccStatic(True) in list_or:
|
|
634
638
|
return [TriccStatic(True)]
|
|
635
639
|
for a in list(list_or):
|
|
@@ -182,6 +182,7 @@ class TriccNodeActivityEnd(TriccNodeFakeCalculateBase):
|
|
|
182
182
|
class TriccNodeEnd(TriccNodeDisplayCalculateBase):
|
|
183
183
|
tricc_type: TriccNodeType = TriccNodeType.end
|
|
184
184
|
process: str = None
|
|
185
|
+
priority: int = 1000
|
|
185
186
|
def __init__(self, **data):
|
|
186
187
|
if data.get('name', None) is None:
|
|
187
188
|
data['name'] = 'tricc_end_' + data.get('process', '')
|
|
@@ -32,8 +32,8 @@ class TriccNodeCalculateBase(TriccNodeBaseModel):
|
|
|
32
32
|
instance.reference = [e.copy() if isinstance(e, (TriccReference, TriccOperation)) else (TriccReference(e.name) if hasattr(e, 'name') else e) for e in self.reference]
|
|
33
33
|
else:
|
|
34
34
|
instance.reference = None
|
|
35
|
-
|
|
36
|
-
|
|
35
|
+
if instance.base_instance != self:
|
|
36
|
+
instance.version = self.version + 1
|
|
37
37
|
return instance
|
|
38
38
|
|
|
39
39
|
def __init__(self, **data):
|
|
@@ -85,7 +85,7 @@ class TriccNodeActivity(TriccNodeBaseModel):
|
|
|
85
85
|
applicability: Optional[Union[Expression, TriccOperation]] = None
|
|
86
86
|
|
|
87
87
|
# redefine
|
|
88
|
-
def make_instance(self, instance_nb, **kwargs):
|
|
88
|
+
def make_instance(self, instance_nb=None, **kwargs):
|
|
89
89
|
from tricc_oo.models.calculate import (
|
|
90
90
|
TriccNodeDisplayBridge,
|
|
91
91
|
TriccNodeBridge,
|
|
@@ -230,7 +230,7 @@ class DrawioStrategy(BaseInputStrategy):
|
|
|
230
230
|
if int(other_page.instance) > int(max_instance):
|
|
231
231
|
max_instance = other_page.instance
|
|
232
232
|
# auto instance starts at 101
|
|
233
|
-
next_page = next_page.make_instance(
|
|
233
|
+
next_page = next_page.make_instance()
|
|
234
234
|
else:
|
|
235
235
|
# return existing instance if any
|
|
236
236
|
next_page = next_page.make_instance(node.instance)
|
|
@@ -227,7 +227,6 @@ class XLSFormStrategy(BaseOutPutStrategy):
|
|
|
227
227
|
**self.get_kwargs()
|
|
228
228
|
)
|
|
229
229
|
# arrange empty group
|
|
230
|
-
|
|
231
230
|
walktrhough_tricc_node_processed_stached(
|
|
232
231
|
s_node,
|
|
233
232
|
self.generate_export,
|
|
@@ -237,6 +236,7 @@ class XLSFormStrategy(BaseOutPutStrategy):
|
|
|
237
236
|
groups=groups,
|
|
238
237
|
cur_group=s_node.group,
|
|
239
238
|
recursive=False,
|
|
239
|
+
process = process,
|
|
240
240
|
**self.get_kwargs()
|
|
241
241
|
)
|
|
242
242
|
# add end group if new node where added OR if the previous end group was removed
|
|
@@ -67,22 +67,22 @@ def get_last_version(name, processed_nodes, _list=None):
|
|
|
67
67
|
# node is the node to calculate
|
|
68
68
|
# processed_nodes are the list of processed nodes
|
|
69
69
|
def get_node_expressions(node, processed_nodes, process=None):
|
|
70
|
-
|
|
70
|
+
get_overall_exp = issubclass(node.__class__, TriccNodeCalculateBase) and not issubclass(node.__class__, (TriccNodeDisplayBridge,TriccNodeBridge))
|
|
71
71
|
expression = None
|
|
72
72
|
# in case of recursive call processed_nodes will be None
|
|
73
73
|
if processed_nodes is None or is_ready_to_process(node, processed_nodes=processed_nodes):
|
|
74
|
-
expression = get_node_expression(node, processed_nodes=processed_nodes,
|
|
74
|
+
expression = get_node_expression(node, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, process=process)
|
|
75
75
|
|
|
76
|
-
if
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
76
|
+
# if get_overall_exp:
|
|
77
|
+
# if expression and (not isinstance(expression, str) or expression != '') and expression is not TriccStatic(True) :
|
|
78
|
+
# num_expression = TriccOperation(
|
|
79
|
+
# TriccOperator.CAST_NUMBER,
|
|
80
|
+
# [expression]
|
|
81
|
+
# )
|
|
82
|
+
# elif expression is TriccStatic(True) or (not expression and get_overall_exp):
|
|
83
|
+
# expression = TriccStatic(True)
|
|
84
|
+
# else:
|
|
85
|
+
# expression = None
|
|
86
86
|
if (
|
|
87
87
|
issubclass(node.__class__, TriccNodeCalculateBase)
|
|
88
88
|
and not isinstance(expression, (TriccStatic, TriccReference, TriccOperation))
|
|
@@ -99,7 +99,7 @@ def set_last_version_false(node, processed_nodes):
|
|
|
99
99
|
last_version = processed_nodes.find_prev(node, version_filter(node_name))
|
|
100
100
|
if last_version and getattr(node, 'process', '') != 'pause':
|
|
101
101
|
# 0-100 for manually specified instance. 100-200 for auto instance
|
|
102
|
-
node.version = get_next_version(node.name, processed_nodes, last_version.version
|
|
102
|
+
node.version = get_next_version(node.name, processed_nodes, last_version.version, 0)
|
|
103
103
|
last_version.last = False
|
|
104
104
|
node.path_len = max(node.path_len, last_version.path_len + 1)
|
|
105
105
|
return last_version
|
|
@@ -194,7 +194,7 @@ def process_calculate(node,processed_nodes, stashed_nodes, calculates, used_calc
|
|
|
194
194
|
last_version = set_last_version_false(node, processed_nodes)
|
|
195
195
|
if last_version:
|
|
196
196
|
last_version = get_version_inheritance(node, last_version, processed_nodes)
|
|
197
|
-
generate_calculates(node,calculates, used_calculates,processed_nodes=processed_nodes)
|
|
197
|
+
generate_calculates(node,calculates, used_calculates,processed_nodes=processed_nodes, process=process)
|
|
198
198
|
|
|
199
199
|
|
|
200
200
|
|
|
@@ -254,8 +254,7 @@ def process_calculate(node,processed_nodes, stashed_nodes, calculates, used_calc
|
|
|
254
254
|
|
|
255
255
|
elif hasattr(node, 'relevance'):
|
|
256
256
|
node.relevance = version_relevance
|
|
257
|
-
|
|
258
|
-
#update_calc_version(calculates,node_name)
|
|
257
|
+
|
|
259
258
|
#if hasattr(node, 'next_nodes'):
|
|
260
259
|
#node.next_nodes=reorder_node_list(node.next_nodes, node.group)
|
|
261
260
|
process_reference(
|
|
@@ -283,16 +282,7 @@ def process_calculate(node,processed_nodes, stashed_nodes, calculates, used_calc
|
|
|
283
282
|
|
|
284
283
|
return False
|
|
285
284
|
|
|
286
|
-
|
|
287
|
-
if name in calculates and len(calculates[name])>1:
|
|
288
|
-
ordered_list = sorted(list(calculates[name].values()), key=lambda x:x.path_len)
|
|
289
|
-
i = 1
|
|
290
|
-
len_max=len(calculates[name])
|
|
291
|
-
for elm in ordered_list:
|
|
292
|
-
elm.version=i
|
|
293
|
-
elm.last= (i == len_max)
|
|
294
|
-
i+=1
|
|
295
|
-
|
|
285
|
+
|
|
296
286
|
|
|
297
287
|
def get_max_named_version(calculates,name):
|
|
298
288
|
max = 0
|
|
@@ -417,7 +407,7 @@ def inject_node_before(before, node, activity):
|
|
|
417
407
|
|
|
418
408
|
|
|
419
409
|
|
|
420
|
-
def generate_calculates(node,calculates, used_calculates,processed_nodes):
|
|
410
|
+
def generate_calculates(node,calculates, used_calculates,processed_nodes, process):
|
|
421
411
|
list_calc = []
|
|
422
412
|
count_node = None
|
|
423
413
|
## add select calcualte
|
|
@@ -473,7 +463,10 @@ def generate_calculates(node,calculates, used_calculates,processed_nodes):
|
|
|
473
463
|
calculate_name=node.save
|
|
474
464
|
if node.name != calculate_name:
|
|
475
465
|
calc_id = generate_id(f"autosave{node.id}")
|
|
476
|
-
|
|
466
|
+
if issubclass(node.__class__, TriccNodeSelect) or isinstance(node, TriccNodeSelectNotAvailable):
|
|
467
|
+
expression = get_count_terms_details( node, processed_nodes, True, False, process)
|
|
468
|
+
else:
|
|
469
|
+
expression = get_node_expression(node,processed_nodes,True,True)
|
|
477
470
|
calc_node = TriccNodeCalculate(
|
|
478
471
|
name=calculate_name,
|
|
479
472
|
id = calc_id,
|
|
@@ -483,7 +476,7 @@ def generate_calculates(node,calculates, used_calculates,processed_nodes):
|
|
|
483
476
|
label = "save: " +node.get_name(),
|
|
484
477
|
path_len=node.path_len+ 1,
|
|
485
478
|
last=True,
|
|
486
|
-
expression=
|
|
479
|
+
expression=expression
|
|
487
480
|
)
|
|
488
481
|
node.activity.calculates.append(calc_node)
|
|
489
482
|
last_version = set_last_version_false(calc_node, processed_nodes)
|
|
@@ -1416,26 +1409,26 @@ def reorder_node_list(list_node, group, processed_nodes):
|
|
|
1416
1409
|
|
|
1417
1410
|
# Define a lambda to assign numeric priorities
|
|
1418
1411
|
def filter_logic(l_node):
|
|
1419
|
-
priority = int(getattr(l_node, "priority", None) or 400)
|
|
1412
|
+
priority = int(getattr(l_node, "priority", None) or 400)
|
|
1420
1413
|
if (
|
|
1421
1414
|
isinstance(l_node, TriccNodeWait)
|
|
1422
1415
|
and any(isinstance(rn, TriccNodeActivity) and any(sn.activity == rn for sn in list_node) for rn in l_node.reference)
|
|
1423
1416
|
):
|
|
1424
1417
|
pass
|
|
1425
1418
|
elif group is not None and hasattr(l_node, 'group') and l_node.group and l_node.group.id == group.id:
|
|
1426
|
-
priority +=
|
|
1419
|
+
priority += 7000 # Highest priority: Same group
|
|
1427
1420
|
elif issubclass(l_node.__class__, TriccRhombusMixIn) :
|
|
1428
|
-
priority +=
|
|
1421
|
+
priority += 1000
|
|
1429
1422
|
elif hasattr(group, 'group') and group.group and l_node.group and l_node.group.id == group.group.id:
|
|
1430
|
-
priority +=
|
|
1423
|
+
priority += 6000 # Second priority: Parent group
|
|
1431
1424
|
elif not isinstance(l_node.activity.root, TriccNodeActivityStart) and l_node.activity in active_activities:
|
|
1432
|
-
priority +=
|
|
1425
|
+
priority += 5000 # Third priority: Active activities
|
|
1433
1426
|
elif not isinstance(l_node.activity.root, TriccNodeActivityStart):
|
|
1434
|
-
priority +=
|
|
1427
|
+
priority += 4000 # Third priority: Active activities
|
|
1435
1428
|
elif l_node.activity in active_activities:
|
|
1436
|
-
priority +=
|
|
1429
|
+
priority += 3000 # Third priority: Active activities
|
|
1437
1430
|
else:
|
|
1438
|
-
priority +=
|
|
1431
|
+
priority += 2000 # Lowest priority: Others
|
|
1439
1432
|
return priority
|
|
1440
1433
|
|
|
1441
1434
|
# Sort list_node in place using filter_logic as the key
|
|
@@ -1478,17 +1471,17 @@ def get_extended_next_nodes(node):
|
|
|
1478
1471
|
|
|
1479
1472
|
|
|
1480
1473
|
# calculate or retrieve a node expression
|
|
1481
|
-
def get_node_expression( in_node, processed_nodes,
|
|
1474
|
+
def get_node_expression( in_node, processed_nodes, get_overall_exp=False, is_prev=False, negate=False, process=None):
|
|
1482
1475
|
# in case of calculate we only use the select multiple if none is not selected
|
|
1483
1476
|
expression = None
|
|
1484
1477
|
negate_expression = None
|
|
1485
1478
|
node = in_node
|
|
1486
1479
|
if isinstance(node, (TriccNodeActivityStart,TriccNodeMainStart)):
|
|
1487
|
-
if is_prev and
|
|
1480
|
+
if is_prev and get_overall_exp:
|
|
1488
1481
|
expression = get_node_expression(
|
|
1489
1482
|
node.activity,
|
|
1490
1483
|
processed_nodes=processed_nodes,
|
|
1491
|
-
|
|
1484
|
+
get_overall_exp=True,
|
|
1492
1485
|
is_prev=is_prev,
|
|
1493
1486
|
negate=negate,
|
|
1494
1487
|
process=process
|
|
@@ -1504,7 +1497,7 @@ def get_node_expression( in_node, processed_nodes, is_calculate=False, is_prev=F
|
|
|
1504
1497
|
return get_node_expression(
|
|
1505
1498
|
node.path,
|
|
1506
1499
|
processed_nodes=processed_nodes,
|
|
1507
|
-
|
|
1500
|
+
get_overall_exp=get_overall_exp,
|
|
1508
1501
|
is_prev=True,
|
|
1509
1502
|
process=process
|
|
1510
1503
|
)
|
|
@@ -1529,7 +1522,7 @@ def get_node_expression( in_node, processed_nodes, is_calculate=False, is_prev=F
|
|
|
1529
1522
|
prev_exp = get_node_expression(
|
|
1530
1523
|
node.path,
|
|
1531
1524
|
processed_nodes=processed_nodes,
|
|
1532
|
-
|
|
1525
|
+
get_overall_exp=get_overall_exp,
|
|
1533
1526
|
is_prev=True,
|
|
1534
1527
|
process=process)
|
|
1535
1528
|
if prev_exp and expression:
|
|
@@ -1547,8 +1540,6 @@ def get_node_expression( in_node, processed_nodes, is_calculate=False, is_prev=F
|
|
|
1547
1540
|
logger.critical(f"Rhombus without expression {node.get_name()}")
|
|
1548
1541
|
elif is_prev and issubclass(node.__class__, TriccNodeDisplayCalculateBase):
|
|
1549
1542
|
expression = TriccOperation(TriccOperator.ISTRUE, [node])
|
|
1550
|
-
elif is_prev and is_calculate and (issubclass(node.__class__, TriccNodeSelect) or isinstance(node, TriccNodeSelectNotAvailable)):
|
|
1551
|
-
expression = get_count_terms_details( node, processed_nodes, is_calculate, negate, process)
|
|
1552
1543
|
elif hasattr(node, 'expression_reference') and isinstance(node.expression_reference, TriccOperation):
|
|
1553
1544
|
# if issubclass(node.__class__, TriccNodeDisplayCalculateBase):
|
|
1554
1545
|
# expression = TriccOperation(
|
|
@@ -1572,17 +1563,17 @@ def get_node_expression( in_node, processed_nodes, is_calculate=False, is_prev=F
|
|
|
1572
1563
|
)
|
|
1573
1564
|
elif issubclass(node.__class__, TriccNodeCalculateBase):
|
|
1574
1565
|
if negate:
|
|
1575
|
-
negate_expression = get_calculation_terms(node, processed_nodes=processed_nodes,
|
|
1566
|
+
negate_expression = get_calculation_terms(node, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, negate=True, process=process)
|
|
1576
1567
|
else:
|
|
1577
|
-
expression = get_calculation_terms(node, processed_nodes=processed_nodes,
|
|
1568
|
+
expression = get_calculation_terms(node, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, process=process)
|
|
1578
1569
|
|
|
1579
1570
|
elif (not is_prev or not ONE_QUESTION_AT_A_TIME) and hasattr(node, 'relevance') and isinstance(node.relevance, (TriccOperation, TriccStatic)):
|
|
1580
1571
|
expression = node.relevance
|
|
1581
|
-
elif ONE_QUESTION_AT_A_TIME and is_prev and not
|
|
1572
|
+
elif ONE_QUESTION_AT_A_TIME and is_prev and not get_overall_exp and hasattr(node, 'required') and node.required:
|
|
1582
1573
|
expression = get_required_node_expression(node)
|
|
1583
1574
|
|
|
1584
1575
|
if expression is None:
|
|
1585
|
-
expression = get_prev_node_expression(node, processed_nodes=processed_nodes,
|
|
1576
|
+
expression = get_prev_node_expression(node, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, process=process)
|
|
1586
1577
|
# in_node not in processed_nodes is need for calculates that can but run after the end of the activity
|
|
1587
1578
|
#if isinstance(node, TriccNodeActivitiy) and not prev:
|
|
1588
1579
|
# expression = get_applicability_expression(node, processed_nodes, process, expression)
|
|
@@ -1625,7 +1616,7 @@ def get_prev_instance_skip_expression(node, processed_nodes, process, expression
|
|
|
1625
1616
|
get_node_expression(
|
|
1626
1617
|
past_instance,
|
|
1627
1618
|
processed_nodes=processed_nodes,
|
|
1628
|
-
|
|
1619
|
+
get_overall_exp=True,
|
|
1629
1620
|
is_prev=True,
|
|
1630
1621
|
process=process
|
|
1631
1622
|
)
|
|
@@ -1809,7 +1800,7 @@ def create_determine_diagnosis_activity(diags):
|
|
|
1809
1800
|
|
|
1810
1801
|
return activity
|
|
1811
1802
|
|
|
1812
|
-
def get_prev_node_expression( node, processed_nodes,
|
|
1803
|
+
def get_prev_node_expression( node, processed_nodes, get_overall_exp=False, excluded_name=None, process=None):
|
|
1813
1804
|
expression = None
|
|
1814
1805
|
if node is None:
|
|
1815
1806
|
pass
|
|
@@ -1826,18 +1817,18 @@ def get_prev_node_expression( node, processed_nodes, is_calculate=False, exclude
|
|
|
1826
1817
|
prev_activities[prev_node.activity.id].append(prev_node)
|
|
1827
1818
|
|
|
1828
1819
|
for act_id in prev_activities:
|
|
1820
|
+
act_expression_inputs = []
|
|
1829
1821
|
for prev_node in prev_activities[act_id]:
|
|
1830
|
-
act_expression_inputs = []
|
|
1831
1822
|
if excluded_name is None or prev_node != excluded_name or (
|
|
1832
1823
|
isinstance(excluded_name, str) and hasattr(prev_node, 'name') and prev_node.name != excluded_name): # or isinstance(prev_node, TriccNodeActivityEnd):
|
|
1833
1824
|
# the rhombus should calculate only reference
|
|
1834
1825
|
sub = get_node_expression(
|
|
1835
1826
|
prev_node,
|
|
1836
1827
|
processed_nodes=processed_nodes,
|
|
1837
|
-
|
|
1828
|
+
get_overall_exp=get_overall_exp,
|
|
1838
1829
|
is_prev=True,
|
|
1839
1830
|
process=process)
|
|
1840
|
-
if isinstance(node, TriccNodeActivity) or
|
|
1831
|
+
if isinstance(node, TriccNodeActivity) or get_overall_exp:
|
|
1841
1832
|
add_sub_expression(act_expression_inputs, sub )
|
|
1842
1833
|
else:
|
|
1843
1834
|
add_sub_expression(expression_inputs, sub )
|
|
@@ -1845,14 +1836,14 @@ def get_prev_node_expression( node, processed_nodes, is_calculate=False, exclude
|
|
|
1845
1836
|
if act_expression_inputs:
|
|
1846
1837
|
act_sub = or_join(act_expression_inputs)
|
|
1847
1838
|
if act_sub == TriccStatic(True):
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1839
|
+
act_sub = get_node_expression(
|
|
1840
|
+
prev_node.activity,
|
|
1841
|
+
processed_nodes=processed_nodes,
|
|
1842
|
+
get_overall_exp=True,
|
|
1843
|
+
is_prev=True,
|
|
1844
|
+
negate=False,
|
|
1845
|
+
process=process
|
|
1846
|
+
)
|
|
1856
1847
|
add_sub_expression(expression_inputs, act_sub )
|
|
1857
1848
|
# avoid void is there is not conditions to avoid looping too much itme
|
|
1858
1849
|
# expression_inputs = clean_or_list(
|
|
@@ -1882,17 +1873,17 @@ def get_activity_end_terms( node, processed_nodes, process=None):
|
|
|
1882
1873
|
get_node_expression(
|
|
1883
1874
|
end_node,
|
|
1884
1875
|
processed_nodes=processed_nodes,
|
|
1885
|
-
|
|
1876
|
+
get_overall_exp=False,
|
|
1886
1877
|
is_prev=True,
|
|
1887
1878
|
process=process))
|
|
1888
1879
|
|
|
1889
1880
|
return or_join(expression_inputs)
|
|
1890
1881
|
|
|
1891
|
-
def get_count_terms( node, processed_nodes,
|
|
1882
|
+
def get_count_terms( node, processed_nodes, get_overall_exp, negate=False, process=None):
|
|
1892
1883
|
terms = []
|
|
1893
1884
|
|
|
1894
1885
|
for prev_node in node.prev_nodes:
|
|
1895
|
-
term = get_count_terms_details( prev_node, processed_nodes,
|
|
1886
|
+
term = get_count_terms_details( prev_node, processed_nodes, get_overall_exp, negate, process)
|
|
1896
1887
|
if term:
|
|
1897
1888
|
terms.append(term)
|
|
1898
1889
|
if len(terms) == 1:
|
|
@@ -1911,7 +1902,7 @@ def get_count_terms( node, processed_nodes, is_calculate, negate=False, process=
|
|
|
1911
1902
|
]
|
|
1912
1903
|
)
|
|
1913
1904
|
|
|
1914
|
-
def get_count_terms_details( prev_node, processed_nodes,
|
|
1905
|
+
def get_count_terms_details( prev_node, processed_nodes, get_overall_exp, negate=False, process=None):
|
|
1915
1906
|
operation_none = TriccOperation(
|
|
1916
1907
|
TriccOperator.SELECTED,
|
|
1917
1908
|
[
|
|
@@ -1974,7 +1965,7 @@ def get_count_terms_details( prev_node, processed_nodes, is_calculate, negate=Fa
|
|
|
1974
1965
|
get_node_expression(
|
|
1975
1966
|
prev_node,
|
|
1976
1967
|
processed_nodes=processed_nodes,
|
|
1977
|
-
|
|
1968
|
+
get_overall_exp=True,
|
|
1978
1969
|
is_prev=True,
|
|
1979
1970
|
process=process)
|
|
1980
1971
|
]),
|
|
@@ -1991,7 +1982,7 @@ def get_count_terms_details( prev_node, processed_nodes, is_calculate, negate=Fa
|
|
|
1991
1982
|
get_node_expression(
|
|
1992
1983
|
prev_node,
|
|
1993
1984
|
processed_nodes=processed_nodes,
|
|
1994
|
-
|
|
1985
|
+
get_overall_exp=True,
|
|
1995
1986
|
is_prev=True,
|
|
1996
1987
|
process=process)
|
|
1997
1988
|
]
|
|
@@ -1999,7 +1990,7 @@ def get_count_terms_details( prev_node, processed_nodes, is_calculate, negate=Fa
|
|
|
1999
1990
|
|
|
2000
1991
|
|
|
2001
1992
|
|
|
2002
|
-
def get_add_terms( node, processed_nodes,
|
|
1993
|
+
def get_add_terms( node, processed_nodes, get_overall_exp=False, negate=False, process=None):
|
|
2003
1994
|
if negate:
|
|
2004
1995
|
logger.warning("negate not supported for Add node {}".format(node.get_name()))
|
|
2005
1996
|
terms = []
|
|
@@ -2022,7 +2013,7 @@ def get_add_terms( node, processed_nodes, is_calculate=False, negate=False, proc
|
|
|
2022
2013
|
get_node_expression(
|
|
2023
2014
|
prev_node,
|
|
2024
2015
|
processed_nodes=processed_nodes,
|
|
2025
|
-
|
|
2016
|
+
get_overall_exp=True,
|
|
2026
2017
|
is_prev=True,
|
|
2027
2018
|
process=process)
|
|
2028
2019
|
]
|
|
@@ -2041,7 +2032,7 @@ def get_add_terms( node, processed_nodes, is_calculate=False, negate=False, proc
|
|
|
2041
2032
|
)
|
|
2042
2033
|
return operation
|
|
2043
2034
|
|
|
2044
|
-
def get_rhombus_terms( node, processed_nodes,
|
|
2035
|
+
def get_rhombus_terms( node, processed_nodes, get_overall_exp=False, negate=False, process=None):
|
|
2045
2036
|
expression = None
|
|
2046
2037
|
left_term = None
|
|
2047
2038
|
operator = None
|
|
@@ -2059,7 +2050,7 @@ def get_rhombus_terms( node, processed_nodes, is_calculate=False, negate=False,
|
|
|
2059
2050
|
expression = get_node_expression(
|
|
2060
2051
|
ref,
|
|
2061
2052
|
processed_nodes=processed_nodes,
|
|
2062
|
-
|
|
2053
|
+
get_overall_exp=True,
|
|
2063
2054
|
is_prev=True,
|
|
2064
2055
|
process=process
|
|
2065
2056
|
)
|
|
@@ -2099,7 +2090,7 @@ def get_rhombus_terms( node, processed_nodes, is_calculate=False, negate=False,
|
|
|
2099
2090
|
get_node_expression(
|
|
2100
2091
|
expression,
|
|
2101
2092
|
processed_nodes=processed_nodes,
|
|
2102
|
-
|
|
2093
|
+
get_overall_exp=True,
|
|
2103
2094
|
is_prev=True,
|
|
2104
2095
|
process=process
|
|
2105
2096
|
)
|
|
@@ -2129,9 +2120,9 @@ def get_rhombus_terms( node, processed_nodes, is_calculate=False, negate=False,
|
|
|
2129
2120
|
# function that generate the calculation terms return by calculate node
|
|
2130
2121
|
# @param node calculate node to assess
|
|
2131
2122
|
# @param processed_nodes list of node already processed, importnat because only processed node could be use
|
|
2132
|
-
# @param
|
|
2123
|
+
# @param get_overall_exp used when this funciton is called in the evaluation of another calculate
|
|
2133
2124
|
# @param negate use to retriece the negation of a calculation
|
|
2134
|
-
def get_calculation_terms( node, processed_nodes,
|
|
2125
|
+
def get_calculation_terms( node, processed_nodes, get_overall_exp=False, negate=False, process=None):
|
|
2135
2126
|
# returns something directly only if the negate is managed
|
|
2136
2127
|
expression = None
|
|
2137
2128
|
if isinstance(node, TriccNodeAdd):
|
|
@@ -2142,7 +2133,7 @@ def get_calculation_terms( node, processed_nodes, is_calculate=False, negate=Fal
|
|
|
2142
2133
|
return get_rhombus_terms(
|
|
2143
2134
|
node,
|
|
2144
2135
|
processed_nodes=processed_nodes,
|
|
2145
|
-
|
|
2136
|
+
get_overall_exp=False,
|
|
2146
2137
|
negate=negate,
|
|
2147
2138
|
process=process
|
|
2148
2139
|
)
|
|
@@ -2151,11 +2142,11 @@ def get_calculation_terms( node, processed_nodes, is_calculate=False, negate=Fal
|
|
|
2151
2142
|
expression = None
|
|
2152
2143
|
# in case of calulate expression evaluation, we need to get the relevance of the activity
|
|
2153
2144
|
# because calculate are not the the activity group
|
|
2154
|
-
elif isinstance(node, (TriccNodeActivityStart)) and
|
|
2155
|
-
expression = get_prev_node_expression(node.activity, processed_nodes=processed_nodes,
|
|
2145
|
+
elif isinstance(node, (TriccNodeActivityStart)) and get_overall_exp:
|
|
2146
|
+
expression = get_prev_node_expression(node.activity, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, negate=negate, process=process)
|
|
2156
2147
|
elif isinstance(node, (TriccNodeActivityStart, TriccNodeActivityEnd)):
|
|
2157
2148
|
# the group have the relevance for the activity, not needed to replicate it
|
|
2158
|
-
expression = None #return get_prev_node_expression(node.activity, processed_nodes,
|
|
2149
|
+
expression = None #return get_prev_node_expression(node.activity, processed_nodes, get_overall_exp=False, excluded_name=None)
|
|
2159
2150
|
elif isinstance(node, TriccNodeExclusive):
|
|
2160
2151
|
if len(node.prev_nodes) == 1:
|
|
2161
2152
|
iterator = iter(node.prev_nodes)
|
|
@@ -2167,6 +2158,7 @@ def get_calculation_terms( node, processed_nodes, is_calculate=False, negate=Fal
|
|
|
2167
2158
|
return get_node_expression(
|
|
2168
2159
|
node_to_negate,
|
|
2169
2160
|
processed_nodes=processed_nodes,
|
|
2161
|
+
get_overall_exp=True,
|
|
2170
2162
|
is_prev=True,
|
|
2171
2163
|
negate=True,
|
|
2172
2164
|
process=process
|
|
@@ -2175,7 +2167,7 @@ def get_calculation_terms( node, processed_nodes, is_calculate=False, negate=Fal
|
|
|
2175
2167
|
return get_node_expression(
|
|
2176
2168
|
node_to_negate,
|
|
2177
2169
|
processed_nodes=processed_nodes,
|
|
2178
|
-
|
|
2170
|
+
get_overall_exp=True,
|
|
2179
2171
|
is_prev=True,
|
|
2180
2172
|
negate=True,
|
|
2181
2173
|
process=process
|
|
@@ -2191,14 +2183,14 @@ def get_calculation_terms( node, processed_nodes, is_calculate=False, negate=Fal
|
|
|
2191
2183
|
if isinstance(node.expression_reference, (TriccOperation, TriccStatic)):
|
|
2192
2184
|
expression = node.expression_reference
|
|
2193
2185
|
elif node.reference is not None and node.expression_reference is not None :
|
|
2194
|
-
expression = get_prev_node_expression(node, processed_nodes=processed_nodes,
|
|
2186
|
+
expression = get_prev_node_expression(node, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, process=process)
|
|
2195
2187
|
ref_expression = node.expression_reference.format(*[get_export_name(ref) for ref in node.reference])
|
|
2196
2188
|
if expression is not None and expression != '':
|
|
2197
2189
|
expression = and_join([expression,ref_expression])
|
|
2198
2190
|
else:
|
|
2199
2191
|
expression = ref_expression
|
|
2200
2192
|
elif expression is None:
|
|
2201
|
-
expression = get_prev_node_expression(node, processed_nodes=processed_nodes,
|
|
2193
|
+
expression = get_prev_node_expression(node, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, process=process)
|
|
2202
2194
|
|
|
2203
2195
|
# manage the generic negation
|
|
2204
2196
|
if negate:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|