tricc-oo 1.6.16__py3-none-any.whl → 1.6.18__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.
tests/test_cql.py CHANGED
@@ -26,6 +26,15 @@ class TestCql(unittest.TestCase):
26
26
  )
27
27
  self.assertEqual(str(dg_operation), str(dg_expected))
28
28
 
29
+ def test_diagnosis_list(self):
30
+ if_cql = 'DiagnosisList("final.TRIAGE_YELLOW", "triage_RED")'
31
+ dg_operation = transform_cql_to_operation(if_cql)
32
+ dg_expected = TriccOperation(
33
+ operator=TriccOperator.DIAGNOSIS_LIST,
34
+ reference=[TriccReference(value="final.TRIAGE_YELLOW"), TriccReference(value="triage_RED")],
35
+ )
36
+ self.assertEqual(str(dg_operation), str(dg_expected))
37
+
29
38
  def test_implied_concat(self):
30
39
  if_cql = "'A' & \"B\" & 'C'"
31
40
  cc_operation = transform_cql_to_operation(if_cql)
@@ -37,6 +37,7 @@ FUNCTION_MAP = {
37
37
  "HasQualifier": TriccOperator.HAS_QUALIFIER,
38
38
  "DateTimeToDecimal": TriccOperator.DATETIME_TO_DECIMAL,
39
39
  "Count": TriccOperator.COUNT,
40
+ "DiagnosisList": TriccOperator.DIAGNOSIS_LIST,
40
41
  }
41
42
  # TODO
42
43
  # Min
tricc_oo/models/base.py CHANGED
@@ -377,6 +377,7 @@ class TriccOperator(StrEnum):
377
377
  PARENTHESIS = "parenthesis"
378
378
  CONCATENATE = "concatenate"
379
379
  DATETIME_TO_DECIMAL = "datetime_to_decimal"
380
+ DIAGNOSIS_LIST = "diagnosis_list"
380
381
 
381
382
 
382
383
  RETURNS_BOOLEAN = [
@@ -423,6 +424,8 @@ RETURNS_NUMBER = [
423
424
 
424
425
  RETURNS_DATE = [TriccOperator.CAST_DATE]
425
426
 
427
+ RETURNS_STRING = [TriccOperator.DIAGNOSIS_LIST]
428
+
426
429
  OPERATION_LIST = {
427
430
  ">=": TriccOperator.MORE_OR_EQUAL,
428
431
  "<=": TriccOperator.LESS_OR_EQUAL,
@@ -480,6 +483,8 @@ class TriccOperation(BaseModel):
480
483
  return "number"
481
484
  elif self.operator in RETURNS_DATE:
482
485
  return "date"
486
+ elif self.operator in RETURNS_STRING:
487
+ return "string"
483
488
  elif self.operator == TriccOperator.CONCATENATE:
484
489
  return "string"
485
490
  elif self.operator == TriccOperator.PARENTHESIS:
@@ -694,6 +694,7 @@ class XLSFormStrategy(BaseOutPutStrategy):
694
694
  # @param left part
695
695
  # @param right part
696
696
  def generate_xls_form_calculate(self, node, processed_nodes, stashed_nodes, calculates, **kwargs):
697
+ self.codesystems = kwargs.get("codesystems", {})
697
698
  if is_ready_to_process(node, processed_nodes, strict=False) and process_reference(
698
699
  node,
699
700
  processed_nodes,
@@ -749,6 +750,36 @@ class XLSFormStrategy(BaseOutPutStrategy):
749
750
  def tricc_operation_concatenate(self, ref_expressions):
750
751
  return f"concat({','.join(map(str, ref_expressions))})"
751
752
 
753
+ def tricc_operation_diagnosis_list(self, ref_expressions):
754
+ from tricc_oo.converters.datadictionnary import lookup_codesystems_code
755
+ parts = []
756
+ for expr in ref_expressions:
757
+ if isinstance(expr, str):
758
+ # expr is the variable reference like "final.TRIAGE_YELLOW" or "${var}"
759
+ if expr.startswith("${") and expr.endswith("}"):
760
+ var_path = expr[2:-1]
761
+ else:
762
+ var_path = expr
763
+ # Handle final. prefix
764
+ code = var_path[6:] if var_path.startswith("final.") else var_path
765
+ concept = lookup_codesystems_code(self.codesystems, code)
766
+ if concept:
767
+ display = concept.get("display", code)
768
+ else:
769
+ logger.warning(f"Diagnosis code '{code}' not found in codesystems")
770
+ display = code
771
+ if expr.startswith("${"):
772
+ condition = f"{expr} = 1"
773
+ else:
774
+ condition = f"${{{expr}}} = 1"
775
+ # Always include comma after diagnosis name
776
+ parts.append(f"if({condition}, '{display},', '')")
777
+ else:
778
+ logger.warning(f"Unexpected expression type: {type(expr)}, value: {expr}")
779
+ if parts:
780
+ return f"concat({','.join(parts)})"
781
+ return "''"
782
+
752
783
  def validate(self):
753
784
  """Validate the generated XLS form using pyxform."""
754
785
  try:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tricc-oo
3
- Version: 1.6.16
3
+ Version: 1.6.18
4
4
  Summary: Python library that converts CDSS L2 in L3
5
5
  Project-URL: Homepage, https://github.com/SwissTPH/tricc
6
6
  Project-URL: Issues, https://github.com/SwissTPH/tricc/issues
@@ -1,10 +1,10 @@
1
1
  tests/build.py,sha256=Qbxvjkj_Wk2nQ-WjaMGiE1FIe3SRmJMRIgeoMoxqlfQ,6748
2
- tests/test_cql.py,sha256=dAsLMqVaS6qxnq62fg5KqTFu6UG6pHO6Ab3NZ1c9T3Y,5248
2
+ tests/test_cql.py,sha256=IRfjrmcxMn60XlAQLUur-7OUELs1NioqxRXWcOf8QcQ,5678
3
3
  tests/to_ocl.py,sha256=4e-i65K3UM6wHgdVcrZcM9AyL1bahIsXJiZTXhhHgQk,2048
4
4
  tricc_oo/__init__.py,sha256=oWCE1ubmC_6iqaWOMgTei4eXVQgV202Ia-tXS1NnW_4,139
5
5
  tricc_oo/converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
6
6
  tricc_oo/converters/codesystem_to_ocl.py,sha256=V_oZNVUVaYHgzJtDiBMSrvIJnBWmDNFBDTTHEkOfpXk,6151
7
- tricc_oo/converters/cql_to_operation.py,sha256=PUyV_YpUY98Ox0H_F_CN3UUf_I-BhFZVOcWWKTtwecM,14492
7
+ tricc_oo/converters/cql_to_operation.py,sha256=1vNmGkI9OhGNTH6EH5hC1SnVVbIG5ps8dksGhZ0Vgw8,14543
8
8
  tricc_oo/converters/datadictionnary.py,sha256=JasqlLKiZzKdidsA1xc2SJ_Af1Xr6A3sKfzDynto8Ho,3686
9
9
  tricc_oo/converters/drawio_type_map.py,sha256=Zp8J9iHNSJkIVrmRSM0_d4vA1X8wFPLKb8nCMPUMXKU,9114
10
10
  tricc_oo/converters/tricc_to_xls_form.py,sha256=39hwWgYNitGE-AuKtjUwNLz39tEpwc7nd9gT_gw5wjc,3842
@@ -15,7 +15,7 @@ tricc_oo/converters/cql/cqlListener.py,sha256=fA7-8DcS2Q69ckwjdg57-OfFHBxjTZFdoS
15
15
  tricc_oo/converters/cql/cqlParser.py,sha256=x3KdrwX9nwENSEJ5Ex7_l5NMnu3kWBO0uLdYu4moTq0,414745
16
16
  tricc_oo/converters/cql/cqlVisitor.py,sha256=iHuup2S7OGSVWLEcI4H3oecRqgXztC1sKnew_1P2iGY,33880
17
17
  tricc_oo/models/__init__.py,sha256=CgS52LLqdDIaXHvZy08hhu_VaYw80OEdfL_llM9ICBA,108
18
- tricc_oo/models/base.py,sha256=saMpSiXnvQe_xkQ4PKJbNLqPkzZaiEGwb42HJ1CtwfM,25937
18
+ tricc_oo/models/base.py,sha256=QR4HlseB3_pjd-O7foACQHiyzJdzYTyOYILvQD1VrhU,26098
19
19
  tricc_oo/models/calculate.py,sha256=uNP0IDUqPQcJq9Co05H8eX5wbR_DikSxuOHxfVE5Dxg,8018
20
20
  tricc_oo/models/lang.py,sha256=ZMRwdoPWe01wEDhOM0uRk-6rt3BkoAAZM8mZ61--s3A,2265
21
21
  tricc_oo/models/ocl.py,sha256=MybSeB6fgCOUVJ4aektff0vrrTZsyfwZ2Gt_pPBu_FY,8728
@@ -36,7 +36,7 @@ tricc_oo/strategies/output/fhir_form.py,sha256=hbL921pe1Doun4IQrJuZ_Sq2fCh98G3gr
36
36
  tricc_oo/strategies/output/html_form.py,sha256=qSleEZOMV_-Z04y-i-ucyd5rgAYWAyjPwMrw0IHtCRM,8604
37
37
  tricc_oo/strategies/output/openmrs_form.py,sha256=ne6TwAyhafR-WDs27QTKKFl85VD5sij_VEJtK6ZjOIE,28996
38
38
  tricc_oo/strategies/output/spice.py,sha256=QMeoismVC3PdbvwTK0PtUjWX9jl9780fbQIXn76fMXw,10761
39
- tricc_oo/strategies/output/xls_form.py,sha256=_pNTND7n-55EjRphJ1hSVtRYa-UkXlmwpam2OKQ8o_w,30860
39
+ tricc_oo/strategies/output/xls_form.py,sha256=93NEv8bZGWZWn28FxE_hwLf0yAGnL7ds6bS3rEDwcGQ,32319
40
40
  tricc_oo/strategies/output/xlsform_cdss.py,sha256=X00Lt5MzV8TX14dR4dFI1MqllI5S1e13bKbeysWM9uA,17435
41
41
  tricc_oo/strategies/output/xlsform_cht.py,sha256=0wrZ_Ez41D-SciXoBq4Pn4o1bK1ofUxXqbTjDoQuCGE,28597
42
42
  tricc_oo/strategies/output/xlsform_cht_hf.py,sha256=xm6SKirV3nMZvM2w54_zJcXAeAgAkq-EEqGEjnOWv6c,988
@@ -44,8 +44,8 @@ tricc_oo/visitors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU
44
44
  tricc_oo/visitors/tricc.py,sha256=ArvDNcuzIQNJpYyT1vB_B9Gxc2m5YAxg9ss_orpMqK0,111780
45
45
  tricc_oo/visitors/utils.py,sha256=j83aAq5s5atXi3OC0jc_uJd54a8XrHHmizeeEbWZQJg,421
46
46
  tricc_oo/visitors/xform_pd.py,sha256=ryAnI3V9x3eTmJ2LNsUZfvl0_yfCqo6oBgeSu-WPqaE,9613
47
- tricc_oo-1.6.16.dist-info/licenses/LICENSE,sha256=Pz2eACSxkhsGfW9_iN60pgy-enjnbGTj8df8O3ebnQQ,16726
48
- tricc_oo-1.6.16.dist-info/METADATA,sha256=9eOqHUBcjhaviC0zU-JT-NYWTY-yc6kq3r8iv6qbGoE,8600
49
- tricc_oo-1.6.16.dist-info/WHEEL,sha256=qELbo2s1Yzl39ZmrAibXA2jjPLUYfnVhUNTlyF1rq0Y,92
50
- tricc_oo-1.6.16.dist-info/top_level.txt,sha256=NvbfMNAiy9m4b1unBsqpeOQWh4IgA1Xa33BtKA4abxk,15
51
- tricc_oo-1.6.16.dist-info/RECORD,,
47
+ tricc_oo-1.6.18.dist-info/licenses/LICENSE,sha256=Pz2eACSxkhsGfW9_iN60pgy-enjnbGTj8df8O3ebnQQ,16726
48
+ tricc_oo-1.6.18.dist-info/METADATA,sha256=1nSbfCahrDBUlqaiuuarTmrJY9zgHmYgJKvG7_spR3s,8600
49
+ tricc_oo-1.6.18.dist-info/WHEEL,sha256=wUyA8OaulRlbfwMtmQsvNngGrxQHAvkKcvRmdizlJi0,92
50
+ tricc_oo-1.6.18.dist-info/top_level.txt,sha256=NvbfMNAiy9m4b1unBsqpeOQWh4IgA1Xa33BtKA4abxk,15
51
+ tricc_oo-1.6.18.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (80.10.1)
2
+ Generator: setuptools (80.10.2)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any
5
5