diff --git a/fiveparaminte-main/routers/dashboard.py b/fiveparaminte-main/routers/dashboard.py index 069331b..a4db439 100644 --- a/fiveparaminte-main/routers/dashboard.py +++ b/fiveparaminte-main/routers/dashboard.py @@ -349,6 +349,80 @@ def _calculate_age(dob_str: str) -> Optional[int]: except Exception: return None +@router.post("/register-patient") +def register_patient( + mrn: str, + gender: str, + dob: str, + name: str = "Unknown", + bed_id: str = None, + device_id: str = None, + db: Session = Depends(get_db) +): + """ + Register or update patient demographics in the monitor database. + + Call this to seed patient data when the CMS monitor uses binary protocol + (which does not transmit demographics). + + Example: + POST /api/register-patient?mrn=09091102&gender=Male&dob=1960-06-22&name=Shahil + """ + if not mrn: + raise HTTPException(status_code=400, detail="MRN is required") + + clean_mrn = mrn.strip().upper() + + # Check if patient already exists + patient = db.query(Patient).filter( + (Patient.mrn == clean_mrn) | (Patient.patient_id == clean_mrn) + ).first() + + if patient: + # Update existing record + patient.mrn = clean_mrn + patient.name = name or patient.name + patient.gender = gender or patient.gender + patient.dob = dob or patient.dob + if bed_id: + patient.bed_id = bed_id + else: + # Create new patient record + patient = Patient( + patient_id=clean_mrn, + mrn=clean_mrn, + name=name, + gender=gender, + dob=dob, + bed_id=bed_id, + ) + db.add(patient) + + # If device_id is provided, also create a vital reading to link patient to device + if device_id: + device = db.query(Device).filter(Device.device_id == device_id).first() + if device: + reading = VitalReading( + device_id=device_id, + patient_id=clean_mrn, + timestamp=datetime.now(timezone.utc), + transmitted=True, + ) + db.add(reading) + + db.commit() + db.refresh(patient) + + return { + "status": "ok", + "patient_id": patient.patient_id, + "mrn": patient.mrn, + "name": patient.name, + "gender": patient.gender, + "dob": patient.dob, + "bed_id": patient.bed_id, + } + @router.get("/match-patient") def match_patient( mrn: str = None,