Skip to content

Commit

Permalink
Map C-CDA Allergy Intolerance to FHIR Allergy Intolerance Category
Browse files Browse the repository at this point in the history
  • Loading branch information
chaseastewart committed Feb 28, 2024
1 parent 760583f commit c0f1873
Show file tree
Hide file tree
Showing 4 changed files with 64 additions and 43 deletions.
4 changes: 2 additions & 2 deletions fhir_converter/filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -247,11 +247,11 @@ def get_property(
mapping = context.resolve("code_mapping", default={}).get(str_arg(mapping_key), None)
if mapping:
code_mapping = mapping.get(code, None)
if not code_mapping:
if not code_mapping or property not in code_mapping:
code_mapping = mapping.get("__default__", {})

mapped_code = code_mapping.get(property, None)
if mapped_code:
if mapped_code is not None:
return mapped_code

return code if property in ("code", "display") else ""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
}
]
},
"category": "{{ allergyEntry.value.code | get_property: 'ValueSet/AllergyCategory' }}",
"reaction":
[
{
Expand Down
26 changes: 10 additions & 16 deletions fhir_converter/templates/ccda/ValueSet/ValueSet.json
Original file line number Diff line number Diff line change
Expand Up @@ -21,29 +21,23 @@
}
},
"ValueSet/AllergyCategory": {
"416098002": {
"code": "medication"
},
"59037007": {
"code": "medication"
},
"419511003": {
"code": "medication"
"235719002": {
"code": "food"
},
"414285001": {
"code": "food"
},
"232347008": {
"code": "environment"
"418471000": {
"code": "food"
},
"420134006": {
"code": "other"
"416098002": {
"code": "medication"
},
"418038007": {
"code": "other"
"419511003": {
"code": "medication"
},
"419199007": {
"code": "other"
"59037007": {
"code": "medication"
},
"__default__": {
"code": ""
Expand Down
76 changes: 51 additions & 25 deletions tests/test_filters.py
Original file line number Diff line number Diff line change
Expand Up @@ -477,7 +477,9 @@ class GetPropertTest(TestCase, FilterTest):
"code_mapping": {
"RequestStatus": {
"fatal": {"code": "severe", "display": "very severe"},
"retry": {"other": "retrying"},
"retry": {"other": "retrying", "code": "", "display": ""},
"unknown": {"other": ""},
"timeout": {},
"__default__": {
"code": "bad",
"display": "very bad",
Expand All @@ -494,78 +496,102 @@ def test_undefined(self) -> None:
result = self.bound_template.render()
self.assertEqual(result, "")

def test_undefined_property(self) -> None:
def test_undefined_valueset_code(self) -> None:
result = self.bound_template.render(status="undefined", key="Undefined")
self.assertEqual(result, "undefined")

def test_undefined_property_code(self) -> None:
result = self.bound_template.render(
status="undefined", key="Undefined", property="code"
)
self.assertEqual(result, "undefined")

def test_undefined_property_display(self) -> None:
def test_undefined_valueset_display(self) -> None:
result = self.bound_template.render(
status="undefined", key="Undefined", property="display"
)
self.assertEqual(result, "undefined")

def test_undefined_property_other(self) -> None:
def test_undefined_valueset_other(self) -> None:
result = self.bound_template.render(
status="undefined", key="Undefined", property="other"
)
self.assertEqual(result, "")

def test_default_property(self) -> None:
def test_valueset_default_code(self) -> None:
result = self.bound_template.render(status="aborted", key="RequestStatus")
self.assertEqual(result, "bad")

def test_default_property_code(self) -> None:
result = self.bound_template.render(
status="aborted", key="RequestStatus", property="code"
)
self.assertEqual(result, "bad")

def test_default_property_display(self) -> None:
def test_valueset_default_display(self) -> None:
result = self.bound_template.render(
status="aborted", key="RequestStatus", property="display"
)
self.assertEqual(result, "very bad")

def test_default_property_other(self) -> None:
def test_valueset_default_other(self) -> None:
result = self.bound_template.render(
status="aborted", key="RequestStatus", property="other"
)
self.assertEqual(result, "could be worse")

def test_default_property_undefined(self) -> None:
def test_valueset_undefined(self) -> None:
result = self.bound_template.render(
status="aborted", key="RequestStatus", property="undefined"
)
self.assertEqual(result, "")

def test_property(self) -> None:
def test_valueset_code(self) -> None:
result = self.bound_template.render(status="fatal", key="RequestStatus")
self.assertEqual(result, "severe")

def test_property_display(self) -> None:
def test_valueset_display(self) -> None:
result = self.bound_template.render(
status="fatal", key="RequestStatus", property="display"
)
self.assertEqual(result, "very severe")

def test_property_other(self) -> None:
def test_valueset_other(self) -> None:
result = self.bound_template.render(
status="retry", key="RequestStatus", property="other"
)
self.assertEqual(result, "retrying")

def test_property_undefined(self) -> None:
def test_valueset_code_blank(self) -> None:
result = self.bound_template.render(
status="retry", key="RequestStatus", property="code"
)
self.assertEqual(result, "")

def test_valueset_display_blank(self) -> None:
result = self.bound_template.render(
status="retry", key="RequestStatus", property="display"
)
self.assertEqual(result, "")

def test_valueset_other_blank(self) -> None:
result = self.bound_template.render(
status="fatal", key="RequestStatus", property="other"
status="unknown", key="RequestStatus", property="other"
)
self.assertEqual(result, "")

def test_valueset_code_undefined_default(self) -> None:
result = self.bound_template.render(
status="unknown", key="RequestStatus", property="code"
)
self.assertEqual(result, "bad")

def test_valueset_display_undefined_default(self) -> None:
result = self.bound_template.render(
status="unknown", key="RequestStatus", property="display"
)
self.assertEqual(result, "very bad")

def test_valueset_empty_default_code(self) -> None:
result = self.bound_template.render(
status="timeout", key="RequestStatus", property="code"
)
self.assertEqual(result, "bad")

def test_valueset_empty_default_display(self) -> None:
result = self.bound_template.render(
status="timeout", key="RequestStatus", property="display"
)
self.assertEqual(result, "very bad")


class GetFirstCcdaSectionsByTemplateIdTest(TestCase, FilterTest):
template = """{{ msg | get_first_ccda_sections_by_template_id: template_ids }}"""
Expand Down

0 comments on commit c0f1873

Please sign in to comment.