tricc-oo 1.5.22__py3-none-any.whl → 1.5.23__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/build.py +13 -23
- tests/test_cql.py +37 -108
- tests/to_ocl.py +15 -17
- tricc_oo/__init__.py +0 -6
- tricc_oo/converters/codesystem_to_ocl.py +51 -40
- tricc_oo/converters/cql/cqlLexer.py +1 -0
- tricc_oo/converters/cql/cqlListener.py +1 -0
- tricc_oo/converters/cql/cqlParser.py +1 -0
- tricc_oo/converters/cql/cqlVisitor.py +1 -0
- tricc_oo/converters/cql_to_operation.py +125 -123
- tricc_oo/converters/datadictionnary.py +39 -53
- tricc_oo/converters/drawio_type_map.py +143 -61
- tricc_oo/converters/tricc_to_xls_form.py +14 -24
- tricc_oo/converters/utils.py +3 -3
- tricc_oo/converters/xml_to_tricc.py +286 -231
- tricc_oo/models/__init__.py +2 -1
- tricc_oo/models/base.py +300 -308
- tricc_oo/models/calculate.py +63 -49
- tricc_oo/models/lang.py +26 -27
- tricc_oo/models/ocl.py +146 -161
- tricc_oo/models/ordered_set.py +15 -19
- tricc_oo/models/tricc.py +144 -88
- tricc_oo/parsers/xml.py +15 -30
- tricc_oo/serializers/planuml.py +4 -6
- tricc_oo/serializers/xls_form.py +81 -135
- tricc_oo/strategies/input/base_input_strategy.py +28 -32
- tricc_oo/strategies/input/drawio.py +57 -69
- tricc_oo/strategies/output/base_output_strategy.py +108 -67
- tricc_oo/strategies/output/spice.py +106 -127
- tricc_oo/strategies/output/xls_form.py +275 -200
- tricc_oo/strategies/output/xlsform_cdss.py +623 -142
- tricc_oo/strategies/output/xlsform_cht.py +106 -114
- tricc_oo/strategies/output/xlsform_cht_hf.py +13 -24
- tricc_oo/visitors/tricc.py +1191 -1021
- tricc_oo/visitors/utils.py +16 -16
- tricc_oo/visitors/xform_pd.py +91 -89
- {tricc_oo-1.5.22.dist-info → tricc_oo-1.5.23.dist-info}/METADATA +3 -1
- tricc_oo-1.5.23.dist-info/RECORD +47 -0
- tricc_oo-1.5.23.dist-info/licenses/LICENSE +373 -0
- tricc_oo-1.5.22.dist-info/RECORD +0 -46
- {tricc_oo-1.5.22.dist-info → tricc_oo-1.5.23.dist-info}/WHEEL +0 -0
- {tricc_oo-1.5.22.dist-info → tricc_oo-1.5.23.dist-info}/top_level.txt +0 -0
tricc_oo/visitors/utils.py
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
PROCESSES = [
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
2
|
+
"triage",
|
|
3
|
+
"emergency-care",
|
|
4
|
+
"registration",
|
|
5
|
+
"history-and-physical",
|
|
6
|
+
"local-urgent-care",
|
|
7
|
+
"acute-tertiary-care",
|
|
8
|
+
"diagnostic-testing",
|
|
9
|
+
"determine-diagnosis",
|
|
10
|
+
"provide-counseling",
|
|
11
|
+
"dispense-medications",
|
|
12
|
+
"monitor-and-follow-up-of-patient",
|
|
13
|
+
"alerts-reminders-education",
|
|
14
|
+
"discharge-referral-of-patient",
|
|
15
|
+
"charge-for-service",
|
|
16
|
+
"record-and-report",
|
|
17
|
+
]
|
tricc_oo/visitors/xform_pd.py
CHANGED
|
@@ -4,15 +4,16 @@ Created on Thu Sep 1 11:21:39 2022
|
|
|
4
4
|
|
|
5
5
|
@author: kluera
|
|
6
6
|
|
|
7
|
-
Make subforms that allow to be releoaded seperately as a 'task' in CHT,
|
|
8
|
-
allowing to simulate a pause functionality.
|
|
7
|
+
Make subforms that allow to be releoaded seperately as a 'task' in CHT,
|
|
8
|
+
allowing to simulate a pause functionality.
|
|
9
9
|
"""
|
|
10
10
|
|
|
11
11
|
import pandas as pd
|
|
12
|
-
|
|
12
|
+
|
|
13
13
|
|
|
14
14
|
def remove_dots(s):
|
|
15
|
-
|
|
15
|
+
return s.replace(".", "_")
|
|
16
|
+
|
|
16
17
|
|
|
17
18
|
def chf_clean_name(s, remove_dots=False):
|
|
18
19
|
# Check if there is a dot in the string
|
|
@@ -24,159 +25,161 @@ def chf_clean_name(s, remove_dots=False):
|
|
|
24
25
|
# If no dot is present, return None or handle it as needed
|
|
25
26
|
return s
|
|
26
27
|
|
|
28
|
+
|
|
27
29
|
# df is the dataframe to be split
|
|
28
30
|
# pausepoint is the index of the row after which the form should pause
|
|
29
31
|
def make_breakpoints(df, pausepoint, calculate_name=None, replace_dots=False):
|
|
30
32
|
"""
|
|
31
33
|
Creates a dataframe for a follow-up questionnaire while preserving previous inputs.
|
|
32
|
-
|
|
34
|
+
|
|
33
35
|
Args:
|
|
34
36
|
df: Input dataframe containing the questionnaire
|
|
35
37
|
pausepoint: Point where the questionnaire should pause
|
|
36
38
|
calculate_name: Optional name for calculation fields
|
|
37
39
|
"""
|
|
38
|
-
|
|
40
|
+
|
|
39
41
|
# Get data points collected before break
|
|
40
|
-
if
|
|
42
|
+
if "input end" not in df["name"].values:
|
|
41
43
|
raise ValueError("input end field not found in input dataframe")
|
|
42
|
-
end_inputs_loc = df.index[df[
|
|
43
|
-
next_begin_group_loc = min([i for i in df.index[df[
|
|
44
|
-
next_pause_point_begin_group_loc = min([i for i in df.index[df[
|
|
45
|
-
|
|
44
|
+
end_inputs_loc = df.index[df["name"] == "input end"][0]
|
|
45
|
+
next_begin_group_loc = min([i for i in df.index[df["type"] == "begin group"] if i > end_inputs_loc])
|
|
46
|
+
next_pause_point_begin_group_loc = min([i for i in df.index[df["type"] == "begin group"] if i > pausepoint])
|
|
47
|
+
|
|
46
48
|
df_input = df.loc[next_begin_group_loc:next_pause_point_begin_group_loc]
|
|
47
|
-
|
|
49
|
+
|
|
48
50
|
# Define field types to handle
|
|
49
|
-
typesconvert = [
|
|
50
|
-
typeskeep = [
|
|
51
|
-
|
|
51
|
+
typesconvert = ["integer", "decimal", "select_", "text"]
|
|
52
|
+
typeskeep = ["hidden", "calculate", "string"]
|
|
53
|
+
|
|
52
54
|
# Create masks for filtering
|
|
53
|
-
type_mask = df_input[
|
|
54
|
-
optin_mask = ~df_input[
|
|
55
|
-
|
|
55
|
+
type_mask = df_input["type"].str.contains("|".join(typeskeep + typesconvert))
|
|
56
|
+
optin_mask = ~df_input["name"].str.contains("more_info_optin", na=False)
|
|
57
|
+
|
|
56
58
|
# Filter dataframe keeping important fields
|
|
57
59
|
df_input = df_input.loc[type_mask & optin_mask]
|
|
58
|
-
|
|
60
|
+
|
|
59
61
|
# Preserve existing hidden fields and their calculations
|
|
60
|
-
existing_hidden = df_input[df_input[
|
|
61
|
-
|
|
62
|
+
existing_hidden = df_input[df_input["type"] == "hidden"].copy()
|
|
63
|
+
|
|
62
64
|
# Convert specified types to hidden while preserving their data
|
|
63
|
-
mask_indices = df_input.index[df_input[
|
|
65
|
+
mask_indices = df_input.index[df_input["type"].str.contains("|".join(typesconvert))]
|
|
64
66
|
# Get hidden field names
|
|
65
67
|
|
|
66
|
-
df_input.loc[mask_indices,
|
|
67
|
-
df_input.loc[mask_indices,
|
|
68
|
+
df_input.loc[mask_indices, "type"] = "hidden"
|
|
69
|
+
df_input.loc[mask_indices, "appearance"] = "hidden"
|
|
68
70
|
|
|
69
71
|
# Handle label columns while preserving existing labels where needed
|
|
70
|
-
label_cols = [col for col in df.columns if
|
|
71
|
-
df_input.loc[mask_indices, label_cols] =
|
|
72
|
-
|
|
72
|
+
label_cols = [col for col in df.columns if "label" in col]
|
|
73
|
+
df_input.loc[mask_indices, label_cols] = "NO_LABEL"
|
|
74
|
+
|
|
73
75
|
# Clear non-essential columns while preserving crucial data
|
|
74
|
-
essential_cols = [
|
|
76
|
+
essential_cols = ["name", "type", "calculation"] + label_cols
|
|
75
77
|
other_cols = df_input.columns.drop(essential_cols)
|
|
76
|
-
df_input[other_cols] =
|
|
77
|
-
|
|
78
|
+
df_input[other_cols] = ""
|
|
79
|
+
|
|
78
80
|
# Preserve calculations for existing hidden fields
|
|
79
|
-
df_input.update(existing_hidden[[
|
|
81
|
+
df_input.update(existing_hidden[["calculation"]])
|
|
80
82
|
# SAVE THE INPUT NAMES
|
|
81
|
-
hidden_names = list(df_input.loc[df_input[
|
|
83
|
+
hidden_names = list(df_input.loc[df_input["type"] == "hidden", "name"])
|
|
82
84
|
if replace_dots:
|
|
83
|
-
df_input[
|
|
85
|
+
df_input["name"] = df_input["name"].map(remove_dots)
|
|
84
86
|
# Handle indexing and grouping
|
|
85
87
|
df_input.index = df_input.index.map(str)
|
|
86
|
-
hidden_ids = df_input.loc[df_input[
|
|
87
|
-
inputs_group_index =
|
|
88
|
-
new_hidden_ids = inputs_group_index +
|
|
89
|
-
|
|
88
|
+
hidden_ids = df_input.loc[df_input["type"] == "hidden"].index
|
|
89
|
+
inputs_group_index = "0"
|
|
90
|
+
new_hidden_ids = inputs_group_index + "." + hidden_ids
|
|
91
|
+
|
|
90
92
|
# Update indices
|
|
91
93
|
index_map = dict(zip(hidden_ids, new_hidden_ids))
|
|
92
94
|
df_input.rename(index=index_map, inplace=True)
|
|
93
95
|
df_input.sort_index(inplace=True)
|
|
94
96
|
df_input.reset_index(drop=True, inplace=True)
|
|
95
|
-
|
|
97
|
+
|
|
96
98
|
if remove_dots:
|
|
97
99
|
# Precompute replacement dictionary
|
|
98
|
-
replacement_dict = {f
|
|
100
|
+
replacement_dict = {f"${old_name}": f"${remove_dots(old_name)}" for old_name in hidden_names if "." in old_name}
|
|
99
101
|
|
|
100
102
|
# Apply replacements to entire DataFrame
|
|
101
103
|
df_input = df_input.astype(str).replace(replacement_dict, regex=False)
|
|
102
|
-
|
|
103
104
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
# put all together
|
|
108
|
-
if 'data_load' not in df['name'].values:
|
|
105
|
+
# put all together
|
|
106
|
+
if "data_load" not in df["name"].values:
|
|
109
107
|
raise ValueError("data_load field not found in input dataframe")
|
|
110
|
-
data_load_loc = df.index[df[
|
|
111
|
-
|
|
108
|
+
data_load_loc = df.index[df["name"] == "data_load"][0]
|
|
109
|
+
|
|
112
110
|
# Split the dataframe into three parts
|
|
113
111
|
df_before_data_load = df.loc[:data_load_loc] # Everything up to data_load
|
|
114
|
-
df_until_begin_group = df.loc[data_load_loc+1:next_begin_group_loc-1] # From data_load to next begin_group
|
|
115
|
-
|
|
112
|
+
df_until_begin_group = df.loc[data_load_loc + 1: next_begin_group_loc - 1] # From data_load to next begin_group
|
|
113
|
+
|
|
116
114
|
# Reset indices for proper concatenation
|
|
117
115
|
df_input = df_input.reset_index(drop=True)
|
|
118
116
|
df_before_data_load = df_before_data_load.reset_index(drop=True)
|
|
119
117
|
df_until_begin_group = df_until_begin_group.reset_index(drop=True)
|
|
120
|
-
|
|
118
|
+
|
|
121
119
|
# Concatenate in the correct order
|
|
122
|
-
df_combined = pd.concat(
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
120
|
+
df_combined = pd.concat(
|
|
121
|
+
[
|
|
122
|
+
df_before_data_load, # First part until data_load
|
|
123
|
+
df_input, # Injected converted fields
|
|
124
|
+
df_until_begin_group, # Remaining part until next begin_group
|
|
125
|
+
]
|
|
126
|
+
).reset_index(drop=True)
|
|
127
|
+
|
|
128
128
|
# Handle post-break section
|
|
129
129
|
df_after = df.loc[next_pause_point_begin_group_loc:].reset_index(drop=True)
|
|
130
130
|
|
|
131
|
-
|
|
132
131
|
# Final concatenation
|
|
133
132
|
final_df = pd.concat([df_combined, df_after])
|
|
134
133
|
if calculate_name:
|
|
135
|
-
final_df.loc[final_df[
|
|
136
|
-
|
|
137
|
-
final_df.fillna(
|
|
134
|
+
final_df.loc[final_df["name"] == "hidden", "calculation"] = "0"
|
|
135
|
+
|
|
136
|
+
final_df.fillna("", inplace=True)
|
|
138
137
|
final_df.reset_index(inplace=True, drop=True)
|
|
139
|
-
|
|
140
|
-
return final_df, hidden_names
|
|
141
138
|
|
|
139
|
+
return final_df, hidden_names
|
|
142
140
|
|
|
143
141
|
|
|
144
142
|
def get_tasksstrings(hidden_names, df_survey):
|
|
145
|
-
|
|
146
|
-
|
|
143
|
+
"""This function makes a list of strings of hidden fields that will be loaded
|
|
144
|
+
into a form that continues the consultation.
|
|
145
|
+
This is very handy as this string must be pasted into the tasks.js file in CHT.
|
|
147
146
|
@hidden_names: are the names of the 'hidden' fields in the input group of the follow up form
|
|
148
147
|
@df_survey: is the survey tab of the complete (original) form without breaks, going from A to Z
|
|
149
|
-
@tasks_strings: is the string that has to be pasted into tasks.js
|
|
150
|
-
|
|
148
|
+
@tasks_strings: is the string that has to be pasted into tasks.js"""
|
|
149
|
+
|
|
151
150
|
task_string_template = "content['{variableName}'] = getField(report, '{full_path}')"
|
|
152
151
|
task_strings = {}
|
|
153
152
|
for s in hidden_names:
|
|
154
|
-
df_above_s = df_survey.iloc[:df_survey.loc[df_survey[
|
|
155
|
-
df_above_s_groups = df_above_s.loc[df_above_s[
|
|
153
|
+
df_above_s = df_survey.iloc[: df_survey.loc[df_survey["name"] == s].index[0]]
|
|
154
|
+
df_above_s_groups = df_above_s.loc[df_above_s["type"].isin(["begin group", "end group"])]
|
|
156
155
|
above_s_grouprows = df_above_s_groups.index
|
|
157
156
|
fullpath = []
|
|
158
157
|
for i in above_s_grouprows:
|
|
159
|
-
if df_above_s.iloc[i][
|
|
160
|
-
fullpath.append(df_above_s.iloc[i][
|
|
161
|
-
else:
|
|
158
|
+
if df_above_s.iloc[i]["type"] == "begin group":
|
|
159
|
+
fullpath.append(df_above_s.iloc[i]["name"])
|
|
160
|
+
else:
|
|
162
161
|
fullpath = fullpath[:-1]
|
|
163
|
-
if len(fullpath)>0:
|
|
164
|
-
line = task_string_template.format(
|
|
165
|
-
variableName=s, full_path='.'.join(fullpath) + chf_clean_name(s)
|
|
166
|
-
)
|
|
162
|
+
if len(fullpath) > 0:
|
|
163
|
+
line = task_string_template.format(variableName=s, full_path=".".join(fullpath) + chf_clean_name(s))
|
|
167
164
|
else:
|
|
168
|
-
line = task_string_template.format(
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
165
|
+
line = task_string_template.format(variableName=s, full_path=chf_clean_name(s))
|
|
166
|
+
task_strings[s] = line
|
|
167
|
+
return list(task_strings.values())
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def get_task_js(
|
|
171
|
+
form_id,
|
|
172
|
+
calculate_name,
|
|
173
|
+
title,
|
|
174
|
+
form_types,
|
|
175
|
+
hidden_names,
|
|
176
|
+
df_survey,
|
|
177
|
+
repalce_dots=False,
|
|
178
|
+
task_title="id: '+getField(report, 'g_registration.p_id')+';age: '+getField(report, 'p_age')+getField(report, 'g_registration.p_gender')+' months; '+getField(report, 'p_weight') + 'kg; ' + getField(report, 'g_fever.p_temp')+'°'", # noqa: E501
|
|
179
|
+
):
|
|
176
180
|
task_name = f"{form_id}"
|
|
177
181
|
task_name_upper = task_name.upper()
|
|
178
182
|
|
|
179
|
-
|
|
180
183
|
return f"""
|
|
181
184
|
/* eslint-disable no-use-before-define */
|
|
182
185
|
/* eslint-disable */
|
|
@@ -185,7 +188,7 @@ const {{injectDataFromForm, isFormArrayHasSourceId}} = require('./stph-extras');
|
|
|
185
188
|
const {{getField}} = require("./nools-extras");
|
|
186
189
|
|
|
187
190
|
const CASE_DATA = ['{"','".join(hidden_names)}'];
|
|
188
|
-
|
|
191
|
+
|
|
189
192
|
|
|
190
193
|
const {task_name_upper}_FORMS = ['{"','".join(form_types)}'];
|
|
191
194
|
|
|
@@ -195,7 +198,7 @@ const {task_name_upper}_TASK_FORM = '{form_id}';
|
|
|
195
198
|
|
|
196
199
|
const {task_name}Content = function (content, contact, report){{
|
|
197
200
|
|
|
198
|
-
injectDataFromForm(content, '', CASE_DATA, {task_name_upper}_FORMS, [report], {'true' if repalce_dots else
|
|
201
|
+
injectDataFromForm(content, '', CASE_DATA, {task_name_upper}_FORMS, [report], {'true' if repalce_dots else 'false'});
|
|
199
202
|
content['patient_id'] = report.contact._id;
|
|
200
203
|
content['source_id'] = report._id;
|
|
201
204
|
console.log(content);
|
|
@@ -230,7 +233,7 @@ module.exports = {{
|
|
|
230
233
|
{task_name}ResolveIf,
|
|
231
234
|
{task_name}AppliesIf,
|
|
232
235
|
}}
|
|
233
|
-
//
|
|
236
|
+
//
|
|
234
237
|
//// to be copied in task
|
|
235
238
|
//
|
|
236
239
|
//const {{
|
|
@@ -238,7 +241,7 @@ module.exports = {{
|
|
|
238
241
|
// {task_name_upper}_FORMS,
|
|
239
242
|
// {task_name}Content,
|
|
240
243
|
// {task_name}ContactLabel,
|
|
241
|
-
// {task_name}ResolveIf,
|
|
244
|
+
// {task_name}ResolveIf,
|
|
242
245
|
// {task_name}AppliesIf, }} = require('./{task_name}');
|
|
243
246
|
//
|
|
244
247
|
//module.exports = [
|
|
@@ -270,4 +273,3 @@ module.exports = {{
|
|
|
270
273
|
// }}
|
|
271
274
|
//];
|
|
272
275
|
"""
|
|
273
|
-
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tricc-oo
|
|
3
|
-
Version: 1.5.
|
|
3
|
+
Version: 1.5.23
|
|
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
|
|
@@ -9,6 +9,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
9
9
|
Classifier: Operating System :: OS Independent
|
|
10
10
|
Requires-Python: >=3.8
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
|
+
License-File: LICENSE
|
|
12
13
|
Requires-Dist: lxml
|
|
13
14
|
Requires-Dist: markdownify
|
|
14
15
|
Requires-Dist: pydantic
|
|
@@ -23,6 +24,7 @@ Requires-Dist: antlr4-python3-runtime==4.13.2
|
|
|
23
24
|
Requires-Dist: antlr4-tools==0.2.1
|
|
24
25
|
Requires-Dist: beautifulsoup4
|
|
25
26
|
Requires-Dist: ocldev
|
|
27
|
+
Dynamic: license-file
|
|
26
28
|
|
|
27
29
|
# design rules tricc_oo
|
|
28
30
|
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
tests/build.py,sha256=cfIjHza30cHlIByMxPWR-1-47UdqUDkSHf5YxzUfP6Q,6366
|
|
2
|
+
tests/test_cql.py,sha256=R6rLrkw4587vvR38XwI3XnuTTYI1ft1XNmBPCxyOif4,5252
|
|
3
|
+
tests/to_ocl.py,sha256=4e-i65K3UM6wHgdVcrZcM9AyL1bahIsXJiZTXhhHgQk,2048
|
|
4
|
+
tricc_oo/__init__.py,sha256=oWCE1ubmC_6iqaWOMgTei4eXVQgV202Ia-tXS1NnW_4,139
|
|
5
|
+
tricc_oo/converters/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
6
|
+
tricc_oo/converters/codesystem_to_ocl.py,sha256=Fh7Vk73OsxljZKu1k6H9uzYwz334tpQTMZBjWWbamYE,6151
|
|
7
|
+
tricc_oo/converters/cql_to_operation.py,sha256=PUyV_YpUY98Ox0H_F_CN3UUf_I-BhFZVOcWWKTtwecM,14492
|
|
8
|
+
tricc_oo/converters/datadictionnary.py,sha256=I_1P3ws-8MmGLjiwbLtPG4m1h-uuLSvO46TlHMRukx4,3465
|
|
9
|
+
tricc_oo/converters/drawio_type_map.py,sha256=UCPiGs7Lw0bigKScmZUnmOhACBz-FiDq92jHkI7RTSQ,9113
|
|
10
|
+
tricc_oo/converters/tricc_to_xls_form.py,sha256=NwBOBy_tuEWd6d0ig9XzIm84dGDmRj-bATPB_D7HcHQ,1999
|
|
11
|
+
tricc_oo/converters/utils.py,sha256=Lc9oOgkuiAHA95rb9s-RCbguhPfkinNcsuwQ1cxKvSc,1675
|
|
12
|
+
tricc_oo/converters/xml_to_tricc.py,sha256=cDoLTwIMHIqyyNqZGwQte9YdX4y5j1Ac6r7M-zuKWZc,39403
|
|
13
|
+
tricc_oo/converters/cql/cqlLexer.py,sha256=8HArbRphcrpnAG4uogJ2rHv4tc1WLzjN0B1uFeYILAc,49141
|
|
14
|
+
tricc_oo/converters/cql/cqlListener.py,sha256=fA7-8DcS2Q69ckwjdg57-OfFHBxjTZFdoSKrtw7Hffc,57538
|
|
15
|
+
tricc_oo/converters/cql/cqlParser.py,sha256=x3KdrwX9nwENSEJ5Ex7_l5NMnu3kWBO0uLdYu4moTq0,414745
|
|
16
|
+
tricc_oo/converters/cql/cqlVisitor.py,sha256=iHuup2S7OGSVWLEcI4H3oecRqgXztC1sKnew_1P2iGY,33880
|
|
17
|
+
tricc_oo/models/__init__.py,sha256=CgS52LLqdDIaXHvZy08hhu_VaYw80OEdfL_llM9ICBA,108
|
|
18
|
+
tricc_oo/models/base.py,sha256=4mkAYAfvtdnTiLpUrttqQgIgfw1q_GkEgbVDKP8Txno,25849
|
|
19
|
+
tricc_oo/models/calculate.py,sha256=uNP0IDUqPQcJq9Co05H8eX5wbR_DikSxuOHxfVE5Dxg,8018
|
|
20
|
+
tricc_oo/models/lang.py,sha256=ZMRwdoPWe01wEDhOM0uRk-6rt3BkoAAZM8mZ61--s3A,2265
|
|
21
|
+
tricc_oo/models/ocl.py,sha256=MybSeB6fgCOUVJ4aektff0vrrTZsyfwZ2Gt_pPBu_FY,8728
|
|
22
|
+
tricc_oo/models/ordered_set.py,sha256=BpXLW8plRAy4te25PIUPvVXPnLPcypvKg3iNPhtPulA,3833
|
|
23
|
+
tricc_oo/models/tricc.py,sha256=I5870ekIFZ2XM57_PvdBF21Ot_cOR-MyBgnxInTaDNk,17419
|
|
24
|
+
tricc_oo/parsers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
25
|
+
tricc_oo/parsers/xml.py,sha256=uzkb1y18MHfqVFmZqVh0sKT4cx6u0-NcAT_lV_gHBt8,4208
|
|
26
|
+
tricc_oo/serializers/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
27
|
+
tricc_oo/serializers/planuml.py,sha256=t57587-6L3aDncpHh58lS77Zft8yxDE9DPtXx2BeUSU,132
|
|
28
|
+
tricc_oo/serializers/xls_form.py,sha256=iPF-Is8EAGkgwi-I_1Opxr59KM1mhw0kihO9b2KY3U4,21750
|
|
29
|
+
tricc_oo/strategies/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
30
|
+
tricc_oo/strategies/input/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
31
|
+
tricc_oo/strategies/input/base_input_strategy.py,sha256=BEODXS74na1QRRcJVQ4cxiD8F7uRqaLyhE3QzKpGVvk,3891
|
|
32
|
+
tricc_oo/strategies/input/drawio.py,sha256=qzMU-6ryUiqUpv2-HosEd5hS7UvkTVZM4zD_wAVmoBg,12773
|
|
33
|
+
tricc_oo/strategies/output/base_output_strategy.py,sha256=-EzrC_2xwz4beMdnGLcA_435bx_yT9-N-d5AKiJCqjE,7558
|
|
34
|
+
tricc_oo/strategies/output/spice.py,sha256=QMeoismVC3PdbvwTK0PtUjWX9jl9780fbQIXn76fMXw,10761
|
|
35
|
+
tricc_oo/strategies/output/xls_form.py,sha256=ZtzOJ5-9JgGJmr807zke6nPiM9Wqqo1r8krBqJnPFlk,32590
|
|
36
|
+
tricc_oo/strategies/output/xlsform_cdss.py,sha256=X00Lt5MzV8TX14dR4dFI1MqllI5S1e13bKbeysWM9uA,17435
|
|
37
|
+
tricc_oo/strategies/output/xlsform_cht.py,sha256=JZbVCdJbwoZpLRB_9rIl0DiwxEcx_Pe70eSMoSURNiQ,23096
|
|
38
|
+
tricc_oo/strategies/output/xlsform_cht_hf.py,sha256=xm6SKirV3nMZvM2w54_zJcXAeAgAkq-EEqGEjnOWv6c,988
|
|
39
|
+
tricc_oo/visitors/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
40
|
+
tricc_oo/visitors/tricc.py,sha256=TnXWKeU8vmOvw63SXAMH_SEGOo79MrWARLNRLNkJoDc,102180
|
|
41
|
+
tricc_oo/visitors/utils.py,sha256=j83aAq5s5atXi3OC0jc_uJd54a8XrHHmizeeEbWZQJg,421
|
|
42
|
+
tricc_oo/visitors/xform_pd.py,sha256=ryAnI3V9x3eTmJ2LNsUZfvl0_yfCqo6oBgeSu-WPqaE,9613
|
|
43
|
+
tricc_oo-1.5.23.dist-info/licenses/LICENSE,sha256=Pz2eACSxkhsGfW9_iN60pgy-enjnbGTj8df8O3ebnQQ,16726
|
|
44
|
+
tricc_oo-1.5.23.dist-info/METADATA,sha256=K4UFDbnNBdPgUHwzpCLPRJCdnBMSizMsD3eOcAer1d0,7922
|
|
45
|
+
tricc_oo-1.5.23.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
46
|
+
tricc_oo-1.5.23.dist-info/top_level.txt,sha256=NvbfMNAiy9m4b1unBsqpeOQWh4IgA1Xa33BtKA4abxk,15
|
|
47
|
+
tricc_oo-1.5.23.dist-info/RECORD,,
|