CoolFace
Apppublic

stellar413/AI_adjudication

sourceHugging Faceupdated 4mo agoView on Hugging Face
0likes
models.py78 linesDownload Raw Back to models
1import datetime2from sqlalchemy import Column, String, Integer, Float, Date, DateTime, Boolean, ForeignKey, JSON, Text3from sqlalchemy.orm import relationship4from backend.database.database import Base5 6class Member(Base):7    __tablename__ = "members"8 9    id = Column(String, primary_key=True, index=True) # e.g. EMP00110    name = Column(String, nullable=False)11    policy_number = Column(String, nullable=False, default="PLUM_OPD_2024")12    join_date = Column(Date, nullable=False)13    annual_limit_remaining = Column(Float, nullable=False, default=50000.0)14    status = Column(String, nullable=False, default="ACTIVE") # ACTIVE, INACTIVE15 16    claims = relationship("Claim", back_populates="member")17 18class Claim(Base):19    __tablename__ = "claims"20 21    id = Column(String, primary_key=True, index=True) # e.g. CLM_1234522    member_id = Column(String, ForeignKey("members.id"), nullable=False)23    patient_name = Column(String, nullable=False)24    claim_amount = Column(Float, nullable=False)25    status = Column(String, nullable=False, default="PENDING") # PENDING, PROCESSING, APPROVED, REJECTED, PARTIAL, MANUAL_REVIEW, APPEALED26    hospital_name = Column(String, nullable=True)27    cashless_request = Column(Boolean, nullable=False, default=False)28    treatment_date = Column(Date, nullable=False)29    submitted_at = Column(DateTime, nullable=False, default=datetime.datetime.utcnow)30    updated_at = Column(DateTime, nullable=False, default=datetime.datetime.utcnow, onupdate=datetime.datetime.utcnow)31 32    member = relationship("Member", back_populates="claims")33    documents = relationship("ClaimDocument", back_populates="claim", cascade="all, delete-orphan")34    adjudication_result = relationship("AdjudicationResult", back_populates="claim", uselist=False, cascade="all, delete-orphan")35    audit_logs = relationship("AuditLog", back_populates="claim", cascade="all, delete-orphan")36 37class ClaimDocument(Base):38    __tablename__ = "claim_documents"39 40    id = Column(Integer, primary_key=True, autoincrement=True)41    claim_id = Column(String, ForeignKey("claims.id"), nullable=False)42    document_type = Column(String, nullable=False) # PRESCRIPTION, BILL, LAB_REPORT, OTHER43    file_path = Column(String, nullable=False)44    file_name = Column(String, nullable=False)45    file_size = Column(Integer, nullable=False)46    extracted_data = Column(JSON, nullable=True) # JSON of parsed fields47    raw_llm_response = Column(Text, nullable=True) # raw model output48 49    claim = relationship("Claim", back_populates="documents")50 51class AdjudicationResult(Base):52    __tablename__ = "adjudication_results"53 54    id = Column(Integer, primary_key=True, autoincrement=True)55    claim_id = Column(String, ForeignKey("claims.id"), unique=True, nullable=False)56    decision = Column(String, nullable=False) # APPROVED, REJECTED, PARTIAL, MANUAL_REVIEW57    approved_amount = Column(Float, nullable=False, default=0.0)58    confidence_score = Column(Float, nullable=False, default=0.0)59    reasons = Column(JSON, nullable=False, default=list) # List[str]60    flags = Column(JSON, nullable=False, default=list) # List[str]61    notes = Column(Text, nullable=True)62    next_steps = Column(Text, nullable=True)63    policy_engine_log = Column(JSON, nullable=True) # details of check results64    created_at = Column(DateTime, nullable=False, default=datetime.datetime.utcnow)65 66    claim = relationship("Claim", back_populates="adjudication_result")67 68class AuditLog(Base):69    __tablename__ = "audit_logs"70 71    id = Column(Integer, primary_key=True, autoincrement=True)72    claim_id = Column(String, ForeignKey("claims.id"), nullable=False)73    action = Column(String, nullable=False) # e.g. "CLAIM_SUBMITTED", "OCR_EXTRACTED", "POLICY_VAL_SUCCESS"74    timestamp = Column(DateTime, nullable=False, default=datetime.datetime.utcnow)75    details = Column(Text, nullable=True)76 77    claim = relationship("Claim", back_populates="audit_logs")78