feat: implement 4-point demographic synchronization & patient validation
This commit is contained in:
@@ -133,7 +133,7 @@ def parse_contec_hl7_text(raw_text: str, client_ip: str) -> Optional[NormalizedV
|
||||
|
||||
found_any = False
|
||||
|
||||
# Parse PID and OBX segments
|
||||
# Parse PID, PV1 and OBX segments
|
||||
for seg in segments[1:]:
|
||||
fields = seg.split("|")
|
||||
if not fields:
|
||||
@@ -142,10 +142,37 @@ def parse_contec_hl7_text(raw_text: str, client_ip: str) -> Optional[NormalizedV
|
||||
seg_name = fields[0]
|
||||
|
||||
if seg_name == "PID":
|
||||
# PID-3: MRN / Patient ID
|
||||
if len(fields) > 3 and fields[3]:
|
||||
patient_id = fields[3].split("^")[0]
|
||||
patient_id = fields[3].split("^")[0].strip()
|
||||
vitals_dict["patient_id"] = patient_id
|
||||
|
||||
|
||||
# PID-5: Patient Name (format: FamilyName^GivenName^...)
|
||||
if len(fields) > 5 and fields[5]:
|
||||
name_parts = fields[5].split("^")
|
||||
family = name_parts[0].strip() if len(name_parts) > 0 else ""
|
||||
given = name_parts[1].strip() if len(name_parts) > 1 else ""
|
||||
full_name = f"{given} {family}".strip() or family or given
|
||||
if full_name:
|
||||
vitals_dict["patient_name"] = full_name
|
||||
|
||||
# PID-7: Date of Birth (YYYYMMDD or YYYY-MM-DD)
|
||||
if len(fields) > 7 and fields[7]:
|
||||
vitals_dict["patient_dob"] = fields[7].strip()
|
||||
|
||||
# PID-8: Administrative Sex (M / F / U / O)
|
||||
if len(fields) > 8 and fields[8]:
|
||||
vitals_dict["patient_gender"] = fields[8].strip().upper()
|
||||
|
||||
elif seg_name == "PV1":
|
||||
# PV1-3: Assigned Patient Location (Room^Bed^...)
|
||||
if len(fields) > 3 and fields[3]:
|
||||
location_parts = fields[3].split("^")
|
||||
# Use second component (Bed) if present, else first (Room)
|
||||
bed = location_parts[1].strip() if len(location_parts) > 1 else location_parts[0].strip()
|
||||
if bed:
|
||||
vitals_dict["bed_id"] = bed
|
||||
|
||||
elif seg_name == "OBX":
|
||||
if len(fields) > 5:
|
||||
obs_val = fields[5].strip()
|
||||
|
||||
Reference in New Issue
Block a user