from sqlalchemy import Column, Integer, String, Date, DateTime, Float, ForeignKey, Text
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from app.database.base import Base
class InsurancePlan(Base):
__tablename__ = "insurance_plans"
id = Column(Integer, primary_key=True, index=True)
name = Column(String(100), nullable=False)
provider = Column(String(100), nullable=False)
coverage_details = Column(Text)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
claims = relationship("InsuranceClaim", back_populates="plan")
class InsuranceClaim(Base):
__tablename__ = "insurance_claims"
id = Column(Integer, primary_key=True, index=True)
patient_id = Column(Integer, ForeignKey("patients.id"), nullable=False)
plan_id = Column(Integer, ForeignKey("insurance_plans.id"), nullable=False)
claim_date = Column(Date, nullable=False)
amount = Column(Float, nullable=False)
status = Column(String(50), default="pending")
details = Column(Text)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
plan = relationship("InsurancePlan", back_populates="claims")
class Payment(Base):
__tablename__ = "payments"
id = Column(Integer, primary_key=True, index=True)
patient_id = Column(Integer, ForeignKey("patients.id"), nullable=False)
amount = Column(Float, nullable=False)
payment_date = Column(Date, nullable=False)
method = Column(String(50))
invoice_id = Column(Integer, ForeignKey("invoices.id"))
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
class Invoice(Base):
__tablename__ = "invoices"
id = Column(Integer, primary_key=True, index=True)
patient_id = Column(Integer, ForeignKey("patients.id"), nullable=False)
total_amount = Column(Float, nullable=False)
issue_date = Column(Date, nullable=False)
due_date = Column(Date)
status = Column(String(50), default="unpaid")
details = Column(Text)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
payments = relationship("Payment", backref="invoice")