From 60da868a3a5b0eda3110f82a3304093bfab2dafb Mon Sep 17 00:00:00 2001 From: Arun Date: Tue, 15 Sep 2026 10:07:14 +0530 Subject: [PATCH] feat: multi-point patient verification (MRN, Name, DOB) via URL parameters --- fiveparaminte-main/routers/dashboard.py | 26 ++-- fiveparaminte-main/static/dashboard.html | 182 +++++++++++++++-------- routers/dashboard.py | 26 ++-- static/dashboard.html | 182 +++++++++++++++-------- 4 files changed, 266 insertions(+), 150 deletions(-) diff --git a/fiveparaminte-main/routers/dashboard.py b/fiveparaminte-main/routers/dashboard.py index acffcb2..3b43f32 100644 --- a/fiveparaminte-main/routers/dashboard.py +++ b/fiveparaminte-main/routers/dashboard.py @@ -112,26 +112,30 @@ def get_latest_readings( if device_id: query = query.filter(VitalReading.device_id == device_id) - patient_filters = [] + patient_criteria = [] if mrn: mrn_clean = mrn.strip() - patient_filters.append(Patient.mrn == mrn_clean) - patient_filters.append(Patient.patient_id == mrn_clean) + patient_criteria.append(or_(Patient.mrn == mrn_clean, Patient.patient_id == mrn_clean)) if name: name_clean = name.strip() - patient_filters.append(Patient.name.ilike(f"%{name_clean}%")) + patient_criteria.append(Patient.name.ilike(f"%{name_clean}%")) if dob: - dob_clean = dob.strip() - patient_filters.append(Patient.dob.ilike(f"%{dob_clean}%")) + dob_clean = dob.strip().replace("-", "").replace("/", "") + patient_criteria.append(or_( + Patient.dob.ilike(f"%{dob.strip()}%"), + Patient.dob.ilike(f"%{dob_clean}%"), + Patient.dob.ilike(f"%{dob.strip()[:4]}%") if len(dob.strip()) >= 4 else False + )) - if patient_filters: - matching_patients = db.query(Patient).filter(or_(*patient_filters)).all() + if patient_criteria: + from sqlalchemy import and_ + matching_patients = db.query(Patient).filter(and_(*patient_criteria)).all() + if not matching_patients: + return [] matching_dev_ids = [p.device_id for p in matching_patients if p.device_id] matching_mrns = [p.mrn for p in matching_patients if p.mrn] + [p.patient_id for p in matching_patients if p.patient_id] conds = [] - if mrn: - conds.append(VitalReading.patient_id == mrn.strip()) if matching_mrns: conds.append(VitalReading.patient_id.in_(matching_mrns)) if matching_dev_ids: @@ -139,6 +143,8 @@ def get_latest_readings( if conds: query = query.filter(or_(*conds)) + else: + return [] readings = query.order_by(VitalReading.timestamp.desc()).limit(limit).all() return readings diff --git a/fiveparaminte-main/static/dashboard.html b/fiveparaminte-main/static/dashboard.html index 18a6f21..3ffdc4f 100644 --- a/fiveparaminte-main/static/dashboard.html +++ b/fiveparaminte-main/static/dashboard.html @@ -1425,13 +1425,14 @@