from sqlalchemy import Column, Integer, String, DateTime, Float, ForeignKey, Enum from sqlalchemy.orm import relationship from sqlalchemy.sql import func import enum from app.db.base import Base class PolicyType(str, enum.Enum): AUTO = "auto" HOME = "home" LIFE = "life" HEALTH = "health" TRAVEL = "travel" class PolicyStatus(str, enum.Enum): ACTIVE = "active" EXPIRED = "expired" CANCELLED = "cancelled" PENDING = "pending" class Policy(Base): __tablename__ = "policies" id = Column(Integer, primary_key=True, index=True) policy_number = Column(String, unique=True, index=True, nullable=False) customer_id = Column(Integer, ForeignKey("customers.id"), nullable=False) policy_type = Column(Enum(PolicyType), nullable=False) status = Column(Enum(PolicyStatus), default=PolicyStatus.PENDING, nullable=False) start_date = Column(DateTime, nullable=False) end_date = Column(DateTime, nullable=False) premium_amount = Column(Float, nullable=False) coverage_amount = Column(Float, nullable=False) deductible_amount = Column(Float, nullable=True) description = Column(String, nullable=True) created_at = Column(DateTime(timezone=True), server_default=func.now()) updated_at = Column(DateTime(timezone=True), onupdate=func.now()) # Relationships customer = relationship("Customer", back_populates="policies") claims = relationship("Claim", back_populates="policy", cascade="all, delete-orphan")