from sqlalchemy import Column, Integer, String, Float, Boolean, DateTime from datetime import datetime, timezone from database import Base class Device(Base): __tablename__ = "devices" id = Column(Integer, primary_key=True, index=True) device_id = Column(String, unique=True, index=True) ip_address = Column(String) status = Column(String, default="active") last_seen = Column(DateTime, default=lambda: datetime.now(timezone.utc)) class Patient(Base): __tablename__ = "patients" id = Column(Integer, primary_key=True, index=True) patient_id = Column(String, unique=True, index=True) # MRN from monitor PID-3 mrn = Column(String, index=True, nullable=True) # explicit MRN (same as patient_id) name = Column(String, nullable=True) # full name from PID-5 gender = Column(String, nullable=True) # M/F/U from PID-8 dob = Column(String, nullable=True) # YYYYMMDD from PID-7 bed_id = Column(String, nullable=True) # bed from PV1-3 class VitalReading(Base): __tablename__ = "vital_readings" id = Column(Integer, primary_key=True, index=True) device_id = Column(String, index=True) patient_id = Column(String, index=True) timestamp = Column(DateTime, index=True) heart_rate = Column(Float, nullable=True) spo2 = Column(Float, nullable=True) systolic_bp = Column(Float, nullable=True) diastolic_bp = Column(Float, nullable=True) map_bp = Column(Float, nullable=True) respiratory_rate = Column(Float, nullable=True) temperature = Column(Float, nullable=True) transmitted = Column(Boolean, default=False, index=True) class TransmissionLog(Base): __tablename__ = "transmission_logs" id = Column(Integer, primary_key=True, index=True) reading_id = Column(Integer, index=True) status = Column(String) response_code = Column(Integer, nullable=True) error_message = Column(String, nullable=True) timestamp = Column(DateTime, default=lambda: datetime.now(timezone.utc))