-
Notifications
You must be signed in to change notification settings - Fork 16
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add pre-pop queries to value[x] items
- Loading branch information
Showing
7 changed files
with
232 additions
and
150 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
# Convert structure definition type codes to appropriate questionnaire item types | ||
def convert_to_appropriate_type(item_type): | ||
# convert id to string | ||
if item_type == "id": | ||
return "string" | ||
|
||
# convert uri to url | ||
if item_type == "uri": | ||
return "url" | ||
|
||
return item_type |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
def add_item_initial(item, element): | ||
if element.get("fixedUri") is not None and element.get("fixedUri") != "": | ||
item["initial"] = [{"valueString": element["fixedUri"]}] | ||
|
||
return item | ||
|
||
|
||
def add_initial_expression(item, element, structure_definition_url=None): | ||
# skip adding initial expression if item has item.initial | ||
if item.get("initial") is not None: | ||
return item | ||
|
||
if item.get("extension", None) is None: | ||
item["extension"] = [] | ||
|
||
initialExpressionString = "" | ||
if element["path"].startswith("Extension") and structure_definition_url is not None: | ||
preInitialExpressionExtensionString = ( | ||
item["linkId"].lower().split("extension")[0].replace(":", ".") + "extension" | ||
) | ||
|
||
initialExpressionString = f"%{preInitialExpressionExtensionString}.where(url='{structure_definition_url}').value" | ||
else: | ||
initialExpressionString = f"%{item['linkId'].lower()}" | ||
|
||
item = add_display_instructions(item, initialExpressionString) | ||
|
||
item["extension"].append( | ||
{ | ||
"url": "http://hl7.org/fhir/uv/sdc/StructureDefinition/sdc-questionnaire-initialExpression", | ||
"valueExpression": { | ||
"language": "text/fhirpath", | ||
"expression": initialExpressionString, | ||
}, | ||
} | ||
) | ||
|
||
return item | ||
|
||
|
||
def add_display_instructions(item, displayInstructionString): | ||
if item.get("type") != "group": | ||
item["item"] = [ | ||
{ | ||
"extension": [ | ||
{ | ||
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-displayCategory", | ||
"valueCodeableConcept": { | ||
"coding": [ | ||
{ | ||
"system": "http://hl7.org/fhir/questionnaire-display-category", | ||
"code": "instructions", | ||
} | ||
] | ||
}, | ||
} | ||
], | ||
"linkId": f"{item['linkId']}-display-instructions", | ||
"text": displayInstructionString, | ||
"type": "display", | ||
} | ||
] | ||
|
||
return item |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
77 changes: 77 additions & 0 deletions
77
packages/structure-def-to-questionnaire/resolveProfiles.py
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,77 @@ | ||
import re | ||
|
||
|
||
def get_all_profile_links(table_element): | ||
profile_links = [] | ||
# get links with 'http' in them | ||
for value_i in table_element.values(): | ||
for value_j in value_i.values(): | ||
if value_j is not None and "http" in value_j: | ||
if value_j.startswith("http"): | ||
profile_links.append(value_j) | ||
else: | ||
profile_links.append("http" + value_j.split("http")[-1]) | ||
|
||
# clean links that does not start with 'http' | ||
return profile_links | ||
|
||
|
||
def get_first_profile_link(table_element): | ||
# retrieve links from table element | ||
profile_links = get_all_profile_links(table_element) | ||
|
||
# not root level, resolve via appending profie name to end of base url (hardcoded) | ||
for link in profile_links: | ||
if "extension" in link: | ||
return link | ||
|
||
if "StructureDefinition" in link: | ||
try: | ||
# Split the URL by "StructureDefinition-" and ".html" | ||
re_match = re.search( | ||
r"(?:StructureDefinition[/\-])(.*?)(?:\.html|\/|$)", link | ||
) | ||
if re_match: | ||
profile_name = re_match.group(1) | ||
|
||
return ( | ||
"https://build.fhir.org/ig/hl7au/au-fhir-base/StructureDefinition-" | ||
+ profile_name | ||
+ ".json" | ||
) | ||
|
||
print("Fail to get profile link ", link) | ||
return None | ||
except IndexError: | ||
print("Fail to get profile link ", link) | ||
return None | ||
|
||
return None | ||
|
||
|
||
def is_value_set_link(key, value): | ||
if key in value and value[key] is not None and "ValueSet" in value[key]: | ||
return True | ||
|
||
return False | ||
|
||
|
||
def get_all_valueset_links(table_element): | ||
profile_links = [] | ||
for value in table_element.values(): | ||
if is_value_set_link(key="title", value=value): | ||
profile_links.append(value["title"]) | ||
elif is_value_set_link(key="href", value=value): | ||
profile_links.append(value["href"]) | ||
|
||
return profile_links | ||
|
||
|
||
def get_coding_terminology_binding(table_element): | ||
if "Coding" in table_element: | ||
valueset_links = get_all_valueset_links(table_element) | ||
|
||
if len(valueset_links) > 0: | ||
return valueset_links[0] | ||
|
||
return None |
Oops, something went wrong.