Skip to content

Commit 9ef221b

Browse files
committed
refactor search by identifer and parse with fhirbundles
1 parent 837965b commit 9ef221b

File tree

3 files changed

+29
-29
lines changed

3 files changed

+29
-29
lines changed

backend/src/fhir_service.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
from uuid import uuid4
33
import datetime
44
import os
5+
import json
56
from enum import Enum
67
from typing import Optional, Union
78

backend/src/models/utils/generic_utils.py

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import datetime
44

5-
from typing import Literal, Union, Optional
5+
from typing import Literal, Union, Optional, Dict, Any
66
from fhir.resources.R4B.bundle import (
77
Bundle as FhirBundle,
88
BundleEntry,
@@ -141,44 +141,44 @@ def create_diagnostics_error(value):
141141
exp_error = {"diagnostics": diagnostics}
142142
return exp_error
143143

144+
def empty_bundle(self_url: str) -> Dict[str, Any]:
145+
return {
146+
"resourceType": "Bundle",
147+
"type": "searchset",
148+
"link": [{"relation": "self", "url": self_url}],
149+
"total": 0,
150+
"entry": [],
151+
}
144152

145153
def form_json(response, _element, identifier, baseurl):
146154
self_url = f"{baseurl}?identifier={identifier}" + (f"&_elements={_element}" if _element else "")
147-
meta = {"versionId": response["version"]} if response and "version" in response else {}
148-
fhir_bundle = FhirBundle(resourceType="Bundle", type="searchset", link = [BundleLink(relation="self", url=self_url)], entry=[],
149-
total=0)
150155

151156
if not response:
152-
return fhir_bundle.dict(by_alias=True)
157+
return empty_bundle(self_url)
158+
159+
meta = {"versionId": response["version"]} if "version" in response else {}
153160

154161
# Full Immunization payload to be returned if only the identifier parameter was provided
155-
if identifier and not _element:
162+
if _element:
163+
element = {e.strip().lower() for e in _element.split(",") if e.strip()}
164+
resource = {"resourceType": "Immunization"}
165+
if "id" in element: resource["id"] = response["id"]
166+
if "meta" in element and meta: resource["meta"] = meta
167+
168+
else:
156169
resource = response["resource"]
157170
resource["meta"] = meta
158171

159-
imms = Immunization.construct(**resource)
160-
161-
elif identifier and _element:
162-
element = {e.strip().lower() for e in _element.split(",") if e.strip()}
163-
resource = {"resourceType": "Immunization"}
164-
if "id" in element:
165-
resource["id"] = response["id"]
166-
167-
# Add 'meta' if specified
168-
if "meta" in element:
169-
resource["id"] = response["id"]
170-
resource["meta"] = meta
171-
172-
imms = Immunization.construct(**resource)
173-
174-
entry = BundleEntry(
175-
fullUrl=f"{baseurl}/{response['id']}",
176-
resource=imms,
177-
search=BundleEntrySearch.construct(mode="match"),
172+
entry = BundleEntry(fullUrl=f"{baseurl}/{response['id']}",
173+
resource=Immunization.construct(**resource),
174+
search=BundleEntrySearch.construct(mode="match") if not _element else None,
178175
)
179-
180-
fhir_bundle.entry = [entry]
181-
fhir_bundle.total = 1
176+
177+
fhir_bundle = FhirBundle(
178+
resourceType="Bundle", type="searchset",
179+
link = [BundleLink(relation="self", url=self_url)],
180+
entry=[entry], total=1)
181+
182182
return fhir_bundle.dict(by_alias=True)
183183

184184

backend/tests/utils/test_generic_utils.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,6 @@ def test_identifier_with_meta_element_truncates_to_meta(self):
4545
self.assertEqual(out["total"], 1)
4646
self.assertEqual(out["link"][0]["url"], f"{self.baseurl}?identifier={self.identifier}&_elements=meta")
4747
self.assertEqual(res["resourceType"], "Immunization")
48-
self.assertEqual(res["id"], self.response["id"])
4948
self.assertIn("meta", res)
5049
self.assertEqual(res["meta"]["versionId"], self.response["version"])
5150

0 commit comments

Comments
 (0)