Skip to content

Commit 13610c5

Browse files
committed
VED-755: refactoring record_processor
1 parent bc9f4bc commit 13610c5

File tree

2 files changed

+33
-29
lines changed

2 files changed

+33
-29
lines changed

lambdas/id_sync/src/record_processor.py

Lines changed: 29 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,12 @@
66
import ast
77

88

9-
def process_record(event_record) -> Dict[str, Any]:
9+
def process_record(event_record: Dict[str, Any]) -> Dict[str, Any]:
1010

1111
logger.info("process_record. Processing record: %s", event_record)
1212
body_text = event_record.get('body', '')
13+
14+
# convert body to json (try JSON first, then fall back to Python literal)
1315
if isinstance(body_text, str):
1416
try:
1517
body = json.loads(body_text)
@@ -21,39 +23,41 @@ def process_record(event_record) -> Dict[str, Any]:
2123
return {"status": "error", "message": "Invalid body format"}
2224
else:
2325
body = body_text
26+
2427
nhs_number = body.get("subject")
2528
logger.info("process record NHS number: %s", nhs_number)
2629
if nhs_number:
27-
if not _is_valid_nhs(nhs_number):
28-
logger.error("Invalid NHS number format: %s", nhs_number)
29-
return {"status": "error", "message": "Invalid NHS number format", "nhs_number": nhs_number}
3030
return process_nhs_number(nhs_number)
31-
else:
32-
logger.info("No NHS number found in event record")
33-
return {"status": "error", "message": "No NHS number found in event record"}
31+
32+
logger.info("No NHS number found in event record")
33+
return {"status": "error", "message": "No NHS number found in event record"}
3434

3535

3636
def process_nhs_number(nhs_number: str) -> Dict[str, Any]:
3737
# get patient details from PDS
3838
new_nhs_number = pds_get_patient_id(nhs_number)
3939

40-
base_log_data = {"nhs_number": nhs_number}
41-
if new_nhs_number:
42-
if new_nhs_number != nhs_number:
43-
logger.info("process_nhs_number. Update patient ID from %s to %s", nhs_number, new_nhs_number)
44-
if ieds_check_exist(nhs_number):
45-
response = ieds_update_patient_id(nhs_number, new_nhs_number)
46-
else:
47-
logger.info("process_nhs_number. No ieds record found for: %s", nhs_number)
48-
response = {"status": "success", "message": f"No records returned for ID: {nhs_number}"}
49-
else:
50-
response = {"status": "success", "message": "No update required"}
40+
if not new_nhs_number:
41+
return {
42+
"status": "success",
43+
"message": "No patient ID found for NHS number",
44+
"nhs_number": nhs_number,
45+
}
46+
47+
if new_nhs_number == nhs_number:
48+
return {
49+
"status": "success",
50+
"message": "No update required",
51+
"nhs_number": nhs_number,
52+
}
53+
54+
logger.info("Update patient ID from %s to %s", nhs_number, new_nhs_number)
55+
56+
if ieds_check_exist(nhs_number):
57+
response = ieds_update_patient_id(nhs_number, new_nhs_number)
5158
else:
52-
response = {"status": "success", "message": f"No patient ID found for NHS number: {nhs_number}"}
53-
response.update(base_log_data)
54-
return response
55-
59+
logger.info("No IEDS record found for: %s", nhs_number)
60+
response = {"status": "success", "message": f"No records returned for ID: {nhs_number}"}
5661

57-
def _is_valid_nhs(nhs: str) -> bool:
58-
"""Basic validation: NHS number must be 10 digits. (Optional: add MOD11 check later)"""
59-
return isinstance(nhs, str) and nhs.isdigit() and len(nhs) == 10
62+
response["nhs_number"] = nhs_number
63+
return response

lambdas/id_sync/tests/test_record_processor.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,16 +45,16 @@ def test_process_record_success_no_update_required(self):
4545
def test_process_record_success_update_required(self):
4646
"""Test successful processing when patient ID differs"""
4747
# Arrange
48-
pds_id = "pds-id-1"
49-
nhs_number = "nhs-number-1"
48+
pds_id = "9000000008"
49+
nhs_number = "9000000009"
5050

5151
test_sqs_record = {"body": {"subject": nhs_number}}
5252
self.mock_pds_get_patient_id.return_value = pds_id
5353
success_response = {"status": "success"}
5454
self.mock_ieds_update_patient_id.return_value = success_response
5555
# Act
5656
result = process_record(test_sqs_record)
57-
57+
self.maxDiff = None
5858
# Assert
5959
expected_result = success_response
6060
self.assertEqual(result, expected_result)
@@ -89,7 +89,7 @@ def test_process_record_pds_returns_none_id(self):
8989
# Act & Assert
9090
result = process_record(test_record)
9191
self.assertEqual(result["status"], "success")
92-
self.assertEqual(result["message"], f"No patient ID found for NHS number: {test_id}")
92+
self.assertEqual(result["message"], f"No patient ID found for NHS number")
9393
self.mock_ieds_check_exist.assert_not_called()
9494
self.mock_ieds_update_patient_id.assert_not_called()
9595

0 commit comments

Comments
 (0)