Skip to content

Commit 48fd9e2

Browse files
authored
Revert "VED-73- drop obfuscation for s-flag-patient"
1 parent 55cbf76 commit 48fd9e2

File tree

7 files changed

+55
-91
lines changed

7 files changed

+55
-91
lines changed

backend/.envrc.default

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
1-
layout pyenv 3.10.16
1+
layout pyenv 3.10.12
22

3-
dotenv
3+
dotenv

backend/.gitignore

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
build
2-
.venv
2+
.venv

backend/src/fhir_service.py

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,19 +85,26 @@ def get_immunization_by_id(self, imms_id: str, imms_vax_type_perms: str) -> Opti
8585
if not (imms_resp := self.immunization_repo.get_immunization_by_id(imms_id, imms_vax_type_perms)):
8686
return None
8787

88-
# Returns the Immunisation full resource with no obfuscation
89-
resource = imms_resp.get("Resource", {})
90-
imms_filtered_for_read = Filter.read(resource) if resource else {}
88+
# Remove fields rom the imms resource which are not to be returned for read
89+
imms_filtered_for_read = Filter.read(imms_resp.get("Resource", {}))
9190

91+
# Handle s-flag filtering, where applicable
92+
if not (nhs_number := obtain_field_value(imms_filtered_for_read, FieldNames.patient_identifier_value)):
93+
imms_filtered_for_read_and_s_flag = imms_filtered_for_read
94+
else:
95+
if patient := self.pds_service.get_patient_details(nhs_number):
96+
imms_filtered_for_read_and_s_flag = handle_s_flag(imms_filtered_for_read, patient)
97+
else:
98+
raise UnhandledResponseError("unable to validate NHS number with downstream service")
9299

93100
return {
94101
"Version": imms_resp.get("Version", ""),
95-
"Resource": Immunization.parse_obj(imms_filtered_for_read),
102+
"Resource": Immunization.parse_obj(imms_filtered_for_read_and_s_flag),
96103
}
97104

98105
def get_immunization_by_id_all(self, imms_id: str, imms: dict) -> Optional[dict]:
99106
"""
100-
Get an Immunization by its ID. Return None if it is not found. If the patient doesn't have an NHS number,
107+
Get an Immunization by its ID. Return None if not found. If the patient doesn't have an NHS number,
101108
return the Immunization without calling PDS or checking S flag.
102109
"""
103110
imms["id"] = imms_id

backend/tests/test_fhir_service.py

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -204,7 +204,23 @@ def test_get_immunization_by_id_patient_not_restricted(self):
204204

205205
# Then
206206
self.assertEqual(actual_output["Resource"], expected_output)
207-
207+
208+
def test_get_immunization_by_id_patient_restricted(self):
209+
"""it should return a filtered Immunization when patient is restricted"""
210+
imms_id = "restricted_id"
211+
immunization_data = load_json_data("completed_covid19_immunization_event.json")
212+
filtered_immunization = load_json_data("completed_covid19_immunization_event_filtered_for_s_flag_and_read.json")
213+
self.imms_repo.get_immunization_by_id.return_value = {"Resource": immunization_data}
214+
patient_data = {"meta": {"security": [{"code": "R"}]}}
215+
self.fhir_service.pds_service.get_patient_details.return_value = patient_data
216+
217+
# When
218+
resp_imms = self.fhir_service.get_immunization_by_id(imms_id, "COVID19:read")
219+
act_res = resp_imms["Resource"]
220+
filtered_immunization_res = Immunization.parse_obj(filtered_immunization)
221+
# Then
222+
self.assertEqual(act_res, filtered_immunization_res)
223+
208224
def test_pre_validation_failed(self):
209225
"""it should throw exception if Immunization is not valid"""
210226
imms_id = "an-id"

devtools/.terraform.lock.hcl

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

e2e/poetry.lock

Lines changed: 7 additions & 81 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

e2e/test_s_flag_immunization.py

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,21 @@ def store_imms(self, imms_api: ImmunisationApi, patient_is_restricted: bool) ->
2323

2424
class TestGetSFlagImmunization(SFlagBaseTest):
2525
"""Test that sensitive data is filtered out for a READ if and only if the patient is s-flagged"""
26+
27+
def test_get_s_flagged_imms(self):
28+
"""Test that sensitive data is filtered out for a READ when the patient is s-flagged"""
29+
for imms_api in self.imms_apis:
30+
with self.subTest(imms_api):
31+
imms_id = self.store_imms(imms_api, patient_is_restricted=True)
32+
read_imms = imms_api.get_immunization_by_id(imms_id).json(parse_float=Decimal)
33+
expected_response = generate_filtered_imms_resource(
34+
crud_operation_to_filter_for="READ",
35+
filter_for_s_flag=True,
36+
nhs_number=valid_nhs_number_with_s_flag,
37+
)
38+
expected_response["id"] = read_imms["id"]
39+
self.assertEqual(read_imms, expected_response)
40+
2641
def test_get_not_s_flagged_imms(self):
2742
"""Test that sensitive data is not filtered out for a READ when the patient is not s-flagged"""
2843
for imms_api in self.imms_apis:

0 commit comments

Comments
 (0)