sanjeevani-api / backend /app /models /document.py
Sivaneshakumar's picture
V1
151ec26
Raw History Blame Contribute Delete
2.01 kB
from sqlalchemy import Column, String, Integer, ForeignKey, Text, DateTime
from sqlalchemy.orm import relationship
from backend.app.models.base import BaseModel, utc_now
class MedicalDocument(BaseModel):
__tablename__ = "medical_documents"
user_id = Column(String(36), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, index=True)
filename = Column(String(255), nullable=False)
original_filename = Column(String(255), nullable=False)
file_path = Column(String(500), nullable=False)
file_type = Column(String(50), nullable=False)
file_size = Column(Integer, nullable=False)
file_hash = Column(String(64), nullable=False)
status = Column(String(50), default="PENDING", nullable=False) # PENDING, PROCESSING, COMPLETED, FAILED
error_message = Column(Text, nullable=True)
# Relationships
user = relationship("User", back_populates="documents", lazy="selectin")
analysis = relationship("DocumentAnalysis", back_populates="document", uselist=False, cascade="all, delete-orphan", lazy="selectin")
class DocumentAnalysis(BaseModel):
__tablename__ = "document_analyses"
document_id = Column(String(36), ForeignKey("medical_documents.id", ondelete="CASCADE"), unique=True, nullable=False, index=True)
raw_text = Column(Text, nullable=False)
cleaned_text = Column(Text, nullable=True)
summary = Column(Text, nullable=True)
important_findings = Column(Text, nullable=True) # JSON-encoded array or text
detected_conditions = Column(Text, nullable=True) # JSON-encoded array
detected_medications = Column(Text, nullable=True) # JSON-encoded array
clinical_recommendations = Column(Text, nullable=True)
processed_at = Column(DateTime(timezone=True), default=utc_now, nullable=False)
# Relationships
document = relationship("MedicalDocument", back_populates="analysis", lazy="selectin")
entities = relationship("MedicalEntity", back_populates="analysis", cascade="all, delete-orphan", lazy="selectin")