tricc-oo 1.5.8__py3-none-any.whl → 1.5.10__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.
- tricc_oo/converters/drawio_type_map.py +1 -1
- tricc_oo/converters/xml_to_tricc.py +0 -11
- tricc_oo/models/base.py +7 -3
- tricc_oo/models/calculate.py +1 -2
- tricc_oo/models/tricc.py +4 -3
- tricc_oo/serializers/xls_form.py +2 -2
- tricc_oo/strategies/input/drawio.py +1 -1
- tricc_oo/strategies/output/xlsform_cht.py +478 -306
- tricc_oo/visitors/tricc.py +146 -131
- {tricc_oo-1.5.8.dist-info → tricc_oo-1.5.10.dist-info}/METADATA +1 -1
- {tricc_oo-1.5.8.dist-info → tricc_oo-1.5.10.dist-info}/RECORD +13 -13
- {tricc_oo-1.5.8.dist-info → tricc_oo-1.5.10.dist-info}/WHEEL +0 -0
- {tricc_oo-1.5.8.dist-info → tricc_oo-1.5.10.dist-info}/top_level.txt +0 -0
tricc_oo/visitors/tricc.py
CHANGED
|
@@ -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)
|
|
@@ -816,8 +809,6 @@ def walktrhough_tricc_node_processed_stached(node, callback, processed_nodes, st
|
|
|
816
809
|
# put the stached node from that group first
|
|
817
810
|
# if has next, walkthrough them (support options)
|
|
818
811
|
# if len(stashed_nodes)>1:
|
|
819
|
-
if not recursive:
|
|
820
|
-
reorder_node_list(stashed_nodes, node.group, processed_nodes)
|
|
821
812
|
if isinstance(node, (TriccNodeActivityStart, TriccNodeMainStart)):
|
|
822
813
|
if recursive:
|
|
823
814
|
for gp in node.activity.groups.values():
|
|
@@ -901,6 +892,9 @@ def walktrhough_tricc_node_processed_stached(node, callback, processed_nodes, st
|
|
|
901
892
|
for nn in node.next_nodes:
|
|
902
893
|
if nn not in stashed_nodes:
|
|
903
894
|
stashed_nodes.insert_at_top(nn)
|
|
895
|
+
if not recursive:
|
|
896
|
+
reorder_node_list(stashed_nodes, node.group, processed_nodes)
|
|
897
|
+
|
|
904
898
|
|
|
905
899
|
|
|
906
900
|
else:
|
|
@@ -1410,37 +1404,52 @@ def replace_next_node(prev_node,next_node,old_node):
|
|
|
1410
1404
|
for n_p_node in list_nodes:
|
|
1411
1405
|
if n_p_node == old_node :
|
|
1412
1406
|
set_prev_next_node(prev_node, next_node, old_node)
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1420
|
-
|
|
1421
|
-
|
|
1422
|
-
|
|
1423
|
-
|
|
1424
|
-
|
|
1425
|
-
|
|
1426
|
-
|
|
1427
|
-
|
|
1428
|
-
|
|
1429
|
-
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
priority +=
|
|
1407
|
+
|
|
1408
|
+
|
|
1409
|
+
# Priority constants
|
|
1410
|
+
SAME_GROUP_PRIORITY = 7000
|
|
1411
|
+
PARENT_GROUP_PRIORITY = 6000
|
|
1412
|
+
ACTIVE_ACTIVITY_PRIORITY = 5000
|
|
1413
|
+
NON_START_ACTIVITY_PRIORITY = 4000
|
|
1414
|
+
ACTIVE_ACTIVITY_LOWER_PRIORITY = 3000
|
|
1415
|
+
RHOMBUS_PRIORITY = 1000
|
|
1416
|
+
DEFAULT_PRIORITY = 2000
|
|
1417
|
+
|
|
1418
|
+
def reorder_node_list(node_list, group, processed_nodes):
|
|
1419
|
+
# Cache active activities for O(1) lookup
|
|
1420
|
+
active_activities = {n.activity for n in processed_nodes}
|
|
1421
|
+
|
|
1422
|
+
def get_priority(node):
|
|
1423
|
+
# Cache attributes to avoid repeated getattr calls
|
|
1424
|
+
priority = int(getattr(node, "priority", 0) or 0)
|
|
1425
|
+
node_group = getattr(node, "group", None)
|
|
1426
|
+
activity = getattr(node, "activity", None)
|
|
1427
|
+
|
|
1428
|
+
# Check for same group
|
|
1429
|
+
if group is not None and node_group and node_group.id == group.id:
|
|
1430
|
+
priority += SAME_GROUP_PRIORITY
|
|
1431
|
+
# Check for parent group
|
|
1432
|
+
elif hasattr(group, "group") and group.group and node_group and node_group.id == group.group.id:
|
|
1433
|
+
priority += PARENT_GROUP_PRIORITY
|
|
1434
|
+
# Check for active activities (not start nodes)
|
|
1435
|
+
elif activity and not isinstance(activity.root, TriccNodeActivityStart) and activity in active_activities:
|
|
1436
|
+
priority += ACTIVE_ACTIVITY_PRIORITY
|
|
1437
|
+
# Check for non-start activities
|
|
1438
|
+
elif activity and not isinstance(activity.root, TriccNodeActivityStart):
|
|
1439
|
+
priority += NON_START_ACTIVITY_PRIORITY
|
|
1440
|
+
# Check for active activities (lower priority)
|
|
1441
|
+
elif activity and activity in active_activities:
|
|
1442
|
+
priority += ACTIVE_ACTIVITY_LOWER_PRIORITY
|
|
1443
|
+
# Check for rhombus nodes
|
|
1444
|
+
elif issubclass(node.__class__, TriccRhombusMixIn):
|
|
1445
|
+
priority += RHOMBUS_PRIORITY
|
|
1437
1446
|
else:
|
|
1438
|
-
priority +=
|
|
1447
|
+
priority += DEFAULT_PRIORITY
|
|
1448
|
+
|
|
1439
1449
|
return priority
|
|
1440
|
-
|
|
1441
|
-
# Sort
|
|
1442
|
-
|
|
1443
|
-
return None
|
|
1450
|
+
|
|
1451
|
+
# Sort in place, highest priority first
|
|
1452
|
+
node_list.sort(key=get_priority, reverse=True)
|
|
1444
1453
|
|
|
1445
1454
|
def loop_info(loop, **kwargs):
|
|
1446
1455
|
logger.critical("dependency details")
|
|
@@ -1478,17 +1487,17 @@ def get_extended_next_nodes(node):
|
|
|
1478
1487
|
|
|
1479
1488
|
|
|
1480
1489
|
# calculate or retrieve a node expression
|
|
1481
|
-
def get_node_expression( in_node, processed_nodes,
|
|
1490
|
+
def get_node_expression( in_node, processed_nodes, get_overall_exp=False, is_prev=False, negate=False, process=None):
|
|
1482
1491
|
# in case of calculate we only use the select multiple if none is not selected
|
|
1483
1492
|
expression = None
|
|
1484
1493
|
negate_expression = None
|
|
1485
1494
|
node = in_node
|
|
1486
1495
|
if isinstance(node, (TriccNodeActivityStart,TriccNodeMainStart)):
|
|
1487
|
-
if is_prev and
|
|
1496
|
+
if is_prev and get_overall_exp:
|
|
1488
1497
|
expression = get_node_expression(
|
|
1489
1498
|
node.activity,
|
|
1490
1499
|
processed_nodes=processed_nodes,
|
|
1491
|
-
|
|
1500
|
+
get_overall_exp=True,
|
|
1492
1501
|
is_prev=is_prev,
|
|
1493
1502
|
negate=negate,
|
|
1494
1503
|
process=process
|
|
@@ -1504,7 +1513,7 @@ def get_node_expression( in_node, processed_nodes, is_calculate=False, is_prev=F
|
|
|
1504
1513
|
return get_node_expression(
|
|
1505
1514
|
node.path,
|
|
1506
1515
|
processed_nodes=processed_nodes,
|
|
1507
|
-
|
|
1516
|
+
get_overall_exp=get_overall_exp,
|
|
1508
1517
|
is_prev=True,
|
|
1509
1518
|
process=process
|
|
1510
1519
|
)
|
|
@@ -1529,7 +1538,7 @@ def get_node_expression( in_node, processed_nodes, is_calculate=False, is_prev=F
|
|
|
1529
1538
|
prev_exp = get_node_expression(
|
|
1530
1539
|
node.path,
|
|
1531
1540
|
processed_nodes=processed_nodes,
|
|
1532
|
-
|
|
1541
|
+
get_overall_exp=get_overall_exp,
|
|
1533
1542
|
is_prev=True,
|
|
1534
1543
|
process=process)
|
|
1535
1544
|
if prev_exp and expression:
|
|
@@ -1547,8 +1556,6 @@ def get_node_expression( in_node, processed_nodes, is_calculate=False, is_prev=F
|
|
|
1547
1556
|
logger.critical(f"Rhombus without expression {node.get_name()}")
|
|
1548
1557
|
elif is_prev and issubclass(node.__class__, TriccNodeDisplayCalculateBase):
|
|
1549
1558
|
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
1559
|
elif hasattr(node, 'expression_reference') and isinstance(node.expression_reference, TriccOperation):
|
|
1553
1560
|
# if issubclass(node.__class__, TriccNodeDisplayCalculateBase):
|
|
1554
1561
|
# expression = TriccOperation(
|
|
@@ -1572,17 +1579,17 @@ def get_node_expression( in_node, processed_nodes, is_calculate=False, is_prev=F
|
|
|
1572
1579
|
)
|
|
1573
1580
|
elif issubclass(node.__class__, TriccNodeCalculateBase):
|
|
1574
1581
|
if negate:
|
|
1575
|
-
negate_expression = get_calculation_terms(node, processed_nodes=processed_nodes,
|
|
1582
|
+
negate_expression = get_calculation_terms(node, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, negate=True, process=process)
|
|
1576
1583
|
else:
|
|
1577
|
-
expression = get_calculation_terms(node, processed_nodes=processed_nodes,
|
|
1584
|
+
expression = get_calculation_terms(node, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, process=process)
|
|
1578
1585
|
|
|
1579
1586
|
elif (not is_prev or not ONE_QUESTION_AT_A_TIME) and hasattr(node, 'relevance') and isinstance(node.relevance, (TriccOperation, TriccStatic)):
|
|
1580
1587
|
expression = node.relevance
|
|
1581
|
-
elif ONE_QUESTION_AT_A_TIME and is_prev and not
|
|
1588
|
+
elif ONE_QUESTION_AT_A_TIME and is_prev and not get_overall_exp and hasattr(node, 'required') and node.required:
|
|
1582
1589
|
expression = get_required_node_expression(node)
|
|
1583
1590
|
|
|
1584
1591
|
if expression is None:
|
|
1585
|
-
expression = get_prev_node_expression(node, processed_nodes=processed_nodes,
|
|
1592
|
+
expression = get_prev_node_expression(node, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, process=process)
|
|
1586
1593
|
# in_node not in processed_nodes is need for calculates that can but run after the end of the activity
|
|
1587
1594
|
#if isinstance(node, TriccNodeActivitiy) and not prev:
|
|
1588
1595
|
# expression = get_applicability_expression(node, processed_nodes, process, expression)
|
|
@@ -1625,7 +1632,7 @@ def get_prev_instance_skip_expression(node, processed_nodes, process, expression
|
|
|
1625
1632
|
get_node_expression(
|
|
1626
1633
|
past_instance,
|
|
1627
1634
|
processed_nodes=processed_nodes,
|
|
1628
|
-
|
|
1635
|
+
get_overall_exp=True,
|
|
1629
1636
|
is_prev=True,
|
|
1630
1637
|
process=process
|
|
1631
1638
|
)
|
|
@@ -1686,7 +1693,7 @@ def export_proposed_diags(activity, diags=None, **kwargs):
|
|
|
1686
1693
|
return diags
|
|
1687
1694
|
|
|
1688
1695
|
|
|
1689
|
-
def get_accept_diagnostic_node(code, display, severity, activity):
|
|
1696
|
+
def get_accept_diagnostic_node(code, display, severity, priority, activity):
|
|
1690
1697
|
node = TriccNodeAcceptDiagnostic(
|
|
1691
1698
|
id=generate_id("pre_final." + code),
|
|
1692
1699
|
name="pre_final." + code,
|
|
@@ -1694,24 +1701,28 @@ def get_accept_diagnostic_node(code, display, severity, activity):
|
|
|
1694
1701
|
list_name="acc_rej",
|
|
1695
1702
|
activity=activity,
|
|
1696
1703
|
group=activity,
|
|
1697
|
-
severity=severity
|
|
1704
|
+
severity=severity,
|
|
1705
|
+
priority=priority
|
|
1698
1706
|
)
|
|
1699
1707
|
node.options = get_select_accept_reject_options(node, node.activity)
|
|
1700
1708
|
return node
|
|
1701
1709
|
|
|
1702
1710
|
def get_diagnostic_node(code, display, severity, priority, activity):
|
|
1703
|
-
node =
|
|
1711
|
+
node = TriccNodeCalculate(
|
|
1704
1712
|
id=generate_id("final." + code),
|
|
1705
1713
|
name="final." + code,
|
|
1706
1714
|
label=display,
|
|
1707
|
-
list_name="acc_rej",
|
|
1708
1715
|
activity=activity,
|
|
1709
1716
|
group=activity,
|
|
1710
|
-
|
|
1711
|
-
|
|
1712
|
-
|
|
1717
|
+
priority=priority,
|
|
1718
|
+
expression_reference=or_join([
|
|
1719
|
+
TriccOperation(TriccOperator.ISTRUE, [TriccReference("pre_final." + code)]),
|
|
1720
|
+
TriccOperation(
|
|
1721
|
+
TriccOperator.SELECTED,
|
|
1722
|
+
[TriccReference('tricc.manual.diag'), TriccStatic(code)]
|
|
1723
|
+
)
|
|
1724
|
+
])
|
|
1713
1725
|
)
|
|
1714
|
-
node.options = get_select_accept_reject_options(node, node.activity)
|
|
1715
1726
|
return node
|
|
1716
1727
|
|
|
1717
1728
|
def get_select_accept_reject_options(node, group):
|
|
@@ -1752,7 +1763,6 @@ def create_determine_diagnosis_activity(diags):
|
|
|
1752
1763
|
start.activity = activity
|
|
1753
1764
|
start.group = activity
|
|
1754
1765
|
diags_conf = []
|
|
1755
|
-
r_diags_conf = []
|
|
1756
1766
|
end = TriccNodeActivityEnd(
|
|
1757
1767
|
id=generate_id("end.determine-diagnosis"),
|
|
1758
1768
|
name="end.determine-diagnosis",
|
|
@@ -1760,10 +1770,23 @@ def create_determine_diagnosis_activity(diags):
|
|
|
1760
1770
|
group=activity,
|
|
1761
1771
|
)
|
|
1762
1772
|
activity.nodes[end.id]=end
|
|
1773
|
+
|
|
1774
|
+
f = TriccNodeSelectMultiple(
|
|
1775
|
+
name="tricc.manual.diag",
|
|
1776
|
+
label="Add diagnosis",
|
|
1777
|
+
list_name='manual_diag',
|
|
1778
|
+
id=generate_id("tricc.manual.diag"),
|
|
1779
|
+
activity=activity,
|
|
1780
|
+
group=activity,
|
|
1781
|
+
required=TriccStatic(False),
|
|
1782
|
+
|
|
1783
|
+
)
|
|
1763
1784
|
for proposed in diags:
|
|
1764
|
-
d =
|
|
1785
|
+
d = get_accept_diagnostic_node(proposed.name, proposed.label, proposed.severity, proposed.priority, activity)
|
|
1786
|
+
c = get_diagnostic_node(proposed.name, proposed.label, proposed.severity, proposed.priority, activity)
|
|
1765
1787
|
diags_conf.append(d)
|
|
1766
1788
|
r = TriccNodeRhombus(
|
|
1789
|
+
path=start,
|
|
1767
1790
|
id=generate_id(f"proposed-rhombus{proposed.id}"),
|
|
1768
1791
|
expression_reference=TriccOperation(
|
|
1769
1792
|
TriccOperator.ISTRUE,
|
|
@@ -1771,26 +1794,19 @@ def create_determine_diagnosis_activity(diags):
|
|
|
1771
1794
|
),
|
|
1772
1795
|
reference=[TriccReference(proposed.name)],
|
|
1773
1796
|
activity=activity,
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1797
|
+
priority=proposed.priority,
|
|
1798
|
+
group=activity)
|
|
1799
|
+
activity.calculates.append(r)
|
|
1800
|
+
activity.calculates.append(c)
|
|
1777
1801
|
set_prev_next_node(r, d, edge_only=False)
|
|
1778
|
-
set_prev_next_node(d,
|
|
1802
|
+
set_prev_next_node(d, f, edge_only=False)
|
|
1779
1803
|
activity.nodes[d.options[0].id] = d.options[0]
|
|
1780
1804
|
activity.nodes[d.options[1].id] = d.options[1]
|
|
1781
1805
|
activity.nodes[d.id]=d
|
|
1782
1806
|
activity.nodes[r.id]=r
|
|
1807
|
+
activity.nodes[c.id]=c
|
|
1783
1808
|
# fallback
|
|
1784
|
-
|
|
1785
|
-
name="tricc.manual.diag",
|
|
1786
|
-
label="Add diagnosis",
|
|
1787
|
-
list_name='manual_diag',
|
|
1788
|
-
id=generate_id("tricc.manual.diag"),
|
|
1789
|
-
activity=activity,
|
|
1790
|
-
group=activity,
|
|
1791
|
-
required=TriccStatic(False),
|
|
1792
|
-
|
|
1793
|
-
)
|
|
1809
|
+
|
|
1794
1810
|
options = [
|
|
1795
1811
|
TriccNodeSelectOption(
|
|
1796
1812
|
id=generate_id(d.name),
|
|
@@ -1802,14 +1818,12 @@ def create_determine_diagnosis_activity(diags):
|
|
|
1802
1818
|
) for d in diags
|
|
1803
1819
|
]
|
|
1804
1820
|
f.options=dict(zip(range(0, len(options)), options))
|
|
1805
|
-
wait2 = get_activity_wait([activity.root], diags_conf, [f], edge_only=False)
|
|
1806
|
-
activity.nodes[wait2.id]=wait2
|
|
1807
1821
|
activity.nodes[f.id]=f
|
|
1808
|
-
|
|
1822
|
+
set_prev_next_node(f, end, edge_only=False)
|
|
1809
1823
|
|
|
1810
1824
|
return activity
|
|
1811
1825
|
|
|
1812
|
-
def get_prev_node_expression( node, processed_nodes,
|
|
1826
|
+
def get_prev_node_expression( node, processed_nodes, get_overall_exp=False, excluded_name=None, process=None):
|
|
1813
1827
|
expression = None
|
|
1814
1828
|
if node is None:
|
|
1815
1829
|
pass
|
|
@@ -1826,18 +1840,18 @@ def get_prev_node_expression( node, processed_nodes, is_calculate=False, exclude
|
|
|
1826
1840
|
prev_activities[prev_node.activity.id].append(prev_node)
|
|
1827
1841
|
|
|
1828
1842
|
for act_id in prev_activities:
|
|
1843
|
+
act_expression_inputs = []
|
|
1829
1844
|
for prev_node in prev_activities[act_id]:
|
|
1830
|
-
act_expression_inputs = []
|
|
1831
1845
|
if excluded_name is None or prev_node != excluded_name or (
|
|
1832
1846
|
isinstance(excluded_name, str) and hasattr(prev_node, 'name') and prev_node.name != excluded_name): # or isinstance(prev_node, TriccNodeActivityEnd):
|
|
1833
1847
|
# the rhombus should calculate only reference
|
|
1834
1848
|
sub = get_node_expression(
|
|
1835
1849
|
prev_node,
|
|
1836
1850
|
processed_nodes=processed_nodes,
|
|
1837
|
-
|
|
1851
|
+
get_overall_exp=get_overall_exp,
|
|
1838
1852
|
is_prev=True,
|
|
1839
1853
|
process=process)
|
|
1840
|
-
if isinstance(node, TriccNodeActivity) or
|
|
1854
|
+
if isinstance(node, TriccNodeActivity) or get_overall_exp:
|
|
1841
1855
|
add_sub_expression(act_expression_inputs, sub )
|
|
1842
1856
|
else:
|
|
1843
1857
|
add_sub_expression(expression_inputs, sub )
|
|
@@ -1845,14 +1859,14 @@ def get_prev_node_expression( node, processed_nodes, is_calculate=False, exclude
|
|
|
1845
1859
|
if act_expression_inputs:
|
|
1846
1860
|
act_sub = or_join(act_expression_inputs)
|
|
1847
1861
|
if act_sub == TriccStatic(True):
|
|
1848
|
-
|
|
1849
|
-
|
|
1850
|
-
|
|
1851
|
-
|
|
1852
|
-
|
|
1853
|
-
|
|
1854
|
-
|
|
1855
|
-
|
|
1862
|
+
act_sub = get_node_expression(
|
|
1863
|
+
prev_node.activity,
|
|
1864
|
+
processed_nodes=processed_nodes,
|
|
1865
|
+
get_overall_exp=True,
|
|
1866
|
+
is_prev=True,
|
|
1867
|
+
negate=False,
|
|
1868
|
+
process=process
|
|
1869
|
+
)
|
|
1856
1870
|
add_sub_expression(expression_inputs, act_sub )
|
|
1857
1871
|
# avoid void is there is not conditions to avoid looping too much itme
|
|
1858
1872
|
# expression_inputs = clean_or_list(
|
|
@@ -1882,17 +1896,17 @@ def get_activity_end_terms( node, processed_nodes, process=None):
|
|
|
1882
1896
|
get_node_expression(
|
|
1883
1897
|
end_node,
|
|
1884
1898
|
processed_nodes=processed_nodes,
|
|
1885
|
-
|
|
1899
|
+
get_overall_exp=False,
|
|
1886
1900
|
is_prev=True,
|
|
1887
1901
|
process=process))
|
|
1888
1902
|
|
|
1889
1903
|
return or_join(expression_inputs)
|
|
1890
1904
|
|
|
1891
|
-
def get_count_terms( node, processed_nodes,
|
|
1905
|
+
def get_count_terms( node, processed_nodes, get_overall_exp, negate=False, process=None):
|
|
1892
1906
|
terms = []
|
|
1893
1907
|
|
|
1894
1908
|
for prev_node in node.prev_nodes:
|
|
1895
|
-
term = get_count_terms_details( prev_node, processed_nodes,
|
|
1909
|
+
term = get_count_terms_details( prev_node, processed_nodes, get_overall_exp, negate, process)
|
|
1896
1910
|
if term:
|
|
1897
1911
|
terms.append(term)
|
|
1898
1912
|
if len(terms) == 1:
|
|
@@ -1911,7 +1925,7 @@ def get_count_terms( node, processed_nodes, is_calculate, negate=False, process=
|
|
|
1911
1925
|
]
|
|
1912
1926
|
)
|
|
1913
1927
|
|
|
1914
|
-
def get_count_terms_details( prev_node, processed_nodes,
|
|
1928
|
+
def get_count_terms_details( prev_node, processed_nodes, get_overall_exp, negate=False, process=None):
|
|
1915
1929
|
operation_none = TriccOperation(
|
|
1916
1930
|
TriccOperator.SELECTED,
|
|
1917
1931
|
[
|
|
@@ -1974,7 +1988,7 @@ def get_count_terms_details( prev_node, processed_nodes, is_calculate, negate=Fa
|
|
|
1974
1988
|
get_node_expression(
|
|
1975
1989
|
prev_node,
|
|
1976
1990
|
processed_nodes=processed_nodes,
|
|
1977
|
-
|
|
1991
|
+
get_overall_exp=True,
|
|
1978
1992
|
is_prev=True,
|
|
1979
1993
|
process=process)
|
|
1980
1994
|
]),
|
|
@@ -1991,7 +2005,7 @@ def get_count_terms_details( prev_node, processed_nodes, is_calculate, negate=Fa
|
|
|
1991
2005
|
get_node_expression(
|
|
1992
2006
|
prev_node,
|
|
1993
2007
|
processed_nodes=processed_nodes,
|
|
1994
|
-
|
|
2008
|
+
get_overall_exp=True,
|
|
1995
2009
|
is_prev=True,
|
|
1996
2010
|
process=process)
|
|
1997
2011
|
]
|
|
@@ -1999,7 +2013,7 @@ def get_count_terms_details( prev_node, processed_nodes, is_calculate, negate=Fa
|
|
|
1999
2013
|
|
|
2000
2014
|
|
|
2001
2015
|
|
|
2002
|
-
def get_add_terms( node, processed_nodes,
|
|
2016
|
+
def get_add_terms( node, processed_nodes, get_overall_exp=False, negate=False, process=None):
|
|
2003
2017
|
if negate:
|
|
2004
2018
|
logger.warning("negate not supported for Add node {}".format(node.get_name()))
|
|
2005
2019
|
terms = []
|
|
@@ -2022,7 +2036,7 @@ def get_add_terms( node, processed_nodes, is_calculate=False, negate=False, proc
|
|
|
2022
2036
|
get_node_expression(
|
|
2023
2037
|
prev_node,
|
|
2024
2038
|
processed_nodes=processed_nodes,
|
|
2025
|
-
|
|
2039
|
+
get_overall_exp=True,
|
|
2026
2040
|
is_prev=True,
|
|
2027
2041
|
process=process)
|
|
2028
2042
|
]
|
|
@@ -2041,7 +2055,7 @@ def get_add_terms( node, processed_nodes, is_calculate=False, negate=False, proc
|
|
|
2041
2055
|
)
|
|
2042
2056
|
return operation
|
|
2043
2057
|
|
|
2044
|
-
def get_rhombus_terms( node, processed_nodes,
|
|
2058
|
+
def get_rhombus_terms( node, processed_nodes, get_overall_exp=False, negate=False, process=None):
|
|
2045
2059
|
expression = None
|
|
2046
2060
|
left_term = None
|
|
2047
2061
|
operator = None
|
|
@@ -2059,7 +2073,7 @@ def get_rhombus_terms( node, processed_nodes, is_calculate=False, negate=False,
|
|
|
2059
2073
|
expression = get_node_expression(
|
|
2060
2074
|
ref,
|
|
2061
2075
|
processed_nodes=processed_nodes,
|
|
2062
|
-
|
|
2076
|
+
get_overall_exp=True,
|
|
2063
2077
|
is_prev=True,
|
|
2064
2078
|
process=process
|
|
2065
2079
|
)
|
|
@@ -2099,7 +2113,7 @@ def get_rhombus_terms( node, processed_nodes, is_calculate=False, negate=False,
|
|
|
2099
2113
|
get_node_expression(
|
|
2100
2114
|
expression,
|
|
2101
2115
|
processed_nodes=processed_nodes,
|
|
2102
|
-
|
|
2116
|
+
get_overall_exp=True,
|
|
2103
2117
|
is_prev=True,
|
|
2104
2118
|
process=process
|
|
2105
2119
|
)
|
|
@@ -2129,9 +2143,9 @@ def get_rhombus_terms( node, processed_nodes, is_calculate=False, negate=False,
|
|
|
2129
2143
|
# function that generate the calculation terms return by calculate node
|
|
2130
2144
|
# @param node calculate node to assess
|
|
2131
2145
|
# @param processed_nodes list of node already processed, importnat because only processed node could be use
|
|
2132
|
-
# @param
|
|
2146
|
+
# @param get_overall_exp used when this funciton is called in the evaluation of another calculate
|
|
2133
2147
|
# @param negate use to retriece the negation of a calculation
|
|
2134
|
-
def get_calculation_terms( node, processed_nodes,
|
|
2148
|
+
def get_calculation_terms( node, processed_nodes, get_overall_exp=False, negate=False, process=None):
|
|
2135
2149
|
# returns something directly only if the negate is managed
|
|
2136
2150
|
expression = None
|
|
2137
2151
|
if isinstance(node, TriccNodeAdd):
|
|
@@ -2142,7 +2156,7 @@ def get_calculation_terms( node, processed_nodes, is_calculate=False, negate=Fal
|
|
|
2142
2156
|
return get_rhombus_terms(
|
|
2143
2157
|
node,
|
|
2144
2158
|
processed_nodes=processed_nodes,
|
|
2145
|
-
|
|
2159
|
+
get_overall_exp=False,
|
|
2146
2160
|
negate=negate,
|
|
2147
2161
|
process=process
|
|
2148
2162
|
)
|
|
@@ -2151,11 +2165,11 @@ def get_calculation_terms( node, processed_nodes, is_calculate=False, negate=Fal
|
|
|
2151
2165
|
expression = None
|
|
2152
2166
|
# in case of calulate expression evaluation, we need to get the relevance of the activity
|
|
2153
2167
|
# 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,
|
|
2168
|
+
elif isinstance(node, (TriccNodeActivityStart)) and get_overall_exp:
|
|
2169
|
+
expression = get_prev_node_expression(node.activity, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, negate=negate, process=process)
|
|
2156
2170
|
elif isinstance(node, (TriccNodeActivityStart, TriccNodeActivityEnd)):
|
|
2157
2171
|
# 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,
|
|
2172
|
+
expression = None #return get_prev_node_expression(node.activity, processed_nodes, get_overall_exp=False, excluded_name=None)
|
|
2159
2173
|
elif isinstance(node, TriccNodeExclusive):
|
|
2160
2174
|
if len(node.prev_nodes) == 1:
|
|
2161
2175
|
iterator = iter(node.prev_nodes)
|
|
@@ -2167,6 +2181,7 @@ def get_calculation_terms( node, processed_nodes, is_calculate=False, negate=Fal
|
|
|
2167
2181
|
return get_node_expression(
|
|
2168
2182
|
node_to_negate,
|
|
2169
2183
|
processed_nodes=processed_nodes,
|
|
2184
|
+
get_overall_exp=True,
|
|
2170
2185
|
is_prev=True,
|
|
2171
2186
|
negate=True,
|
|
2172
2187
|
process=process
|
|
@@ -2175,7 +2190,7 @@ def get_calculation_terms( node, processed_nodes, is_calculate=False, negate=Fal
|
|
|
2175
2190
|
return get_node_expression(
|
|
2176
2191
|
node_to_negate,
|
|
2177
2192
|
processed_nodes=processed_nodes,
|
|
2178
|
-
|
|
2193
|
+
get_overall_exp=True,
|
|
2179
2194
|
is_prev=True,
|
|
2180
2195
|
negate=True,
|
|
2181
2196
|
process=process
|
|
@@ -2191,14 +2206,14 @@ def get_calculation_terms( node, processed_nodes, is_calculate=False, negate=Fal
|
|
|
2191
2206
|
if isinstance(node.expression_reference, (TriccOperation, TriccStatic)):
|
|
2192
2207
|
expression = node.expression_reference
|
|
2193
2208
|
elif node.reference is not None and node.expression_reference is not None :
|
|
2194
|
-
expression = get_prev_node_expression(node, processed_nodes=processed_nodes,
|
|
2209
|
+
expression = get_prev_node_expression(node, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, process=process)
|
|
2195
2210
|
ref_expression = node.expression_reference.format(*[get_export_name(ref) for ref in node.reference])
|
|
2196
2211
|
if expression is not None and expression != '':
|
|
2197
2212
|
expression = and_join([expression,ref_expression])
|
|
2198
2213
|
else:
|
|
2199
2214
|
expression = ref_expression
|
|
2200
2215
|
elif expression is None:
|
|
2201
|
-
expression = get_prev_node_expression(node, processed_nodes=processed_nodes,
|
|
2216
|
+
expression = get_prev_node_expression(node, processed_nodes=processed_nodes, get_overall_exp=get_overall_exp, process=process)
|
|
2202
2217
|
|
|
2203
2218
|
# manage the generic negation
|
|
2204
2219
|
if negate:
|