Skip to content

Commit 32bd591

Browse files
authored
VED-908: Update immunisation target parameter in Bundle.link URL. (#1008)
1 parent be1c9e4 commit 32bd591

File tree

3 files changed

+42
-37
lines changed

3 files changed

+42
-37
lines changed

lambdas/backend/src/controller/constants.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,4 +28,4 @@ class IdentifierSearchElement(StrEnum):
2828
META = "meta"
2929

3030

31-
IMMUNIZATION_TARGET_LEGACY_KEY_NAME = "immunization-target"
31+
IMMUNIZATION_TARGET_LEGACY_KEY_NAME = "immunization.target"

lambdas/backend/src/service/fhir_service.py

Lines changed: 18 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
import datetime
33
import logging
44
import os
5+
import urllib.parse
56
import uuid
67
from typing import Optional, cast
78
from uuid import uuid4
@@ -366,28 +367,20 @@ def create_url_for_bundle_link(
366367
date_to: Optional[datetime.date],
367368
include: Optional[str],
368369
) -> str:
369-
"""Creates url for the searchset Bundle Link. Existing logic always sorted the parameters in the given order
370-
below, so this has been maintained"""
371-
base_url = f"{get_service_url()}/Immunization?"
372-
date_from_optional_part = (
373-
f"{ImmunizationSearchParameterName.DATE_FROM}={date_from.isoformat()}&" if date_from is not None else ""
374-
)
375-
date_to_optional_part = (
376-
f"{ImmunizationSearchParameterName.DATE_TO}={date_to.isoformat()}&" if date_to is not None else ""
377-
)
378-
379-
# Temporarily maintaining this for backwards compatibility with imms history, but we should remove it
380-
immunization_targets_part = f"{IMMUNIZATION_TARGET_LEGACY_KEY_NAME}={','.join(immunization_targets)}&"
381-
optional_include_part = f"{ImmunizationSearchParameterName.INCLUDE}={include}&" if include is not None else ""
382-
patient_identifier_part = (
383-
f"{ImmunizationSearchParameterName.PATIENT_IDENTIFIER}={PATIENT_IDENTIFIER_SYSTEM}|{patient_nhs_number}"
384-
)
385-
386-
return (
387-
base_url
388-
+ date_from_optional_part
389-
+ date_to_optional_part
390-
+ immunization_targets_part
391-
+ optional_include_part
392-
+ patient_identifier_part
393-
)
370+
"""Creates url for the searchset Bundle Link."""
371+
params = {
372+
# Temporarily maintaining this for backwards compatibility with imms history, but we should remove it
373+
IMMUNIZATION_TARGET_LEGACY_KEY_NAME: ",".join(immunization_targets),
374+
ImmunizationSearchParameterName.IMMUNIZATION_TARGET: ",".join(immunization_targets),
375+
ImmunizationSearchParameterName.PATIENT_IDENTIFIER: f"{PATIENT_IDENTIFIER_SYSTEM}|{patient_nhs_number}",
376+
}
377+
378+
if date_from:
379+
params[ImmunizationSearchParameterName.DATE_FROM] = date_from.isoformat()
380+
if date_to:
381+
params[ImmunizationSearchParameterName.DATE_TO] = date_to.isoformat()
382+
if include:
383+
params[ImmunizationSearchParameterName.INCLUDE] = include
384+
385+
query = urllib.parse.urlencode(params)
386+
return f"{get_service_url()}/Immunization?{query}"

lambdas/backend/tests/service/test_fhir_service.py

Lines changed: 23 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -766,8 +766,10 @@ def test_search_immunizations_returns_results_as_a_search_bundle(self, mock_uuid
766766
result.link[0],
767767
BundleLink.construct(
768768
relation="self",
769-
url="https://internal-dev.api.service.nhs.uk/immunisation-fhir-api/FHIR/R4/Immunization?immunization-target"
770-
"=COVID&patient.identifier=https://fhir.nhs.uk/Id/nhs-number|9990548609",
769+
url="https://internal-dev.api.service.nhs.uk/immunisation-fhir-api/FHIR/R4/Immunization"
770+
"?immunization.target=COVID"
771+
"&-immunization.target=COVID"
772+
"&patient.identifier=https%3A%2F%2Ffhir.nhs.uk%2FId%2Fnhs-number%7C9990548609",
771773
),
772774
)
773775
# Will contain the matched immunization and then the referenced patient resource
@@ -819,9 +821,12 @@ def test_search_immunizations_filters_by_date_and_status(self, mock_uuid):
819821
result.link[0],
820822
BundleLink.construct(
821823
relation="self",
822-
url="https://internal-dev.api.service.nhs.uk/immunisation-fhir-api/FHIR/R4/Immunization?-date.from=2021"
823-
"-02-06&-date.to=2023-01-01&immunization-target=COVID&patient.identifier="
824-
"https://fhir.nhs.uk/Id/nhs-number|9990548609",
824+
url="https://internal-dev.api.service.nhs.uk/immunisation-fhir-api/FHIR/R4/Immunization"
825+
"?immunization.target=COVID"
826+
"&-immunization.target=COVID"
827+
"&patient.identifier=https%3A%2F%2Ffhir.nhs.uk%2FId%2Fnhs-number%7C9990548609"
828+
"&-date.from=2021-02-06"
829+
"&-date.to=2023-01-01",
825830
),
826831
)
827832
# Will contain the matched immunization and then the referenced patient resource
@@ -857,8 +862,11 @@ def test_search_immunizations_adds_include_to_searched_url(self, mock_uuid):
857862
result.link[0],
858863
BundleLink.construct(
859864
relation="self",
860-
url="https://internal-dev.api.service.nhs.uk/immunisation-fhir-api/FHIR/R4/Immunization?immunization-target"
861-
"=COVID&_include=Patient.identifier&patient.identifier=https://fhir.nhs.uk/Id/nhs-number|9990548609",
865+
url="https://internal-dev.api.service.nhs.uk/immunisation-fhir-api/FHIR/R4/Immunization"
866+
"?immunization.target=COVID"
867+
"&-immunization.target=COVID"
868+
"&patient.identifier=https%3A%2F%2Ffhir.nhs.uk%2FId%2Fnhs-number%7C9990548609"
869+
"&_include=Patient.identifier",
862870
),
863871
)
864872
# Will contain the matched immunization and then the referenced patient resource
@@ -889,8 +897,10 @@ def test_search_immunizations_returns_empty_bundle_when_no_results_found(self):
889897
result.link[0],
890898
BundleLink.construct(
891899
relation="self",
892-
url="https://internal-dev.api.service.nhs.uk/immunisation-fhir-api/FHIR/R4/Immunization?immunization-target"
893-
"=FLU&patient.identifier=https://fhir.nhs.uk/Id/nhs-number|9990548609",
900+
url="https://internal-dev.api.service.nhs.uk/immunisation-fhir-api/FHIR/R4/Immunization"
901+
"?immunization.target=FLU"
902+
"&-immunization.target=FLU"
903+
"&patient.identifier=https%3A%2F%2Ffhir.nhs.uk%2FId%2Fnhs-number%7C9990548609",
894904
),
895905
)
896906
self.assertEqual(len(result.entry), 0)
@@ -925,8 +935,10 @@ def test_search_immunizations_includes_an_error_outcome_within_results_if_client
925935
result.link[0],
926936
BundleLink.construct(
927937
relation="self",
928-
url="https://internal-dev.api.service.nhs.uk/immunisation-fhir-api/FHIR/R4/Immunization?immunization-target"
929-
"=COVID&patient.identifier=https://fhir.nhs.uk/Id/nhs-number|9990548609",
938+
url="https://internal-dev.api.service.nhs.uk/immunisation-fhir-api/FHIR/R4/Immunization"
939+
"?immunization.target=COVID"
940+
"&-immunization.target=COVID"
941+
"&patient.identifier=https%3A%2F%2Ffhir.nhs.uk%2FId%2Fnhs-number%7C9990548609",
930942
),
931943
)
932944
# Will contain the matched immunization, the referenced patient resource and an OperationOutcome

0 commit comments

Comments
 (0)