66import 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
3636def 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
0 commit comments