Skip to content

Commit 55cbf76

Browse files
authored
Merge pull request #353 from NHSDigital/VED-73-Read-S-flag-obfuscation
VED-73- drop obfuscation for s-flag-patient
2 parents 8324e54 + f29facd commit 55cbf76

File tree

7 files changed

+91
-55
lines changed

7 files changed

+91
-55
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.12
1+
layout pyenv 3.10.16
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: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -85,26 +85,19 @@ 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-
# 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", {}))
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 {}
9091

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")
9992

10093
return {
10194
"Version": imms_resp.get("Version", ""),
102-
"Resource": Immunization.parse_obj(imms_filtered_for_read_and_s_flag),
95+
"Resource": Immunization.parse_obj(imms_filtered_for_read),
10396
}
10497

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

backend/tests/test_fhir_service.py

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

205205
# Then
206206
self.assertEqual(actual_output["Resource"], expected_output)
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-
207+
224208
def test_pre_validation_failed(self):
225209
"""it should throw exception if Immunization is not valid"""
226210
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: 81 additions & 7 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: 0 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,6 @@ 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-
4126
def test_get_not_s_flagged_imms(self):
4227
"""Test that sensitive data is not filtered out for a READ when the patient is not s-flagged"""
4328
for imms_api in self.imms_apis:

0 commit comments

Comments
 (0)