from typing import Optional from datetime import datetime, date from pydantic import BaseModel, Field from app.models.policy import PolicyType, PolicyStatus # Shared properties class PolicyBase(BaseModel): policy_number: str customer_id: int policy_type: PolicyType status: PolicyStatus = PolicyStatus.PENDING start_date: date end_date: date premium_amount: float = Field(..., gt=0) coverage_amount: float = Field(..., gt=0) deductible_amount: Optional[float] = Field(None, ge=0) description: Optional[str] = None # Properties to receive via API on creation class PolicyCreate(PolicyBase): pass # Properties to receive via API on update class PolicyUpdate(BaseModel): policy_type: Optional[PolicyType] = None status: Optional[PolicyStatus] = None start_date: Optional[date] = None end_date: Optional[date] = None premium_amount: Optional[float] = Field(None, gt=0) coverage_amount: Optional[float] = Field(None, gt=0) deductible_amount: Optional[float] = Field(None, ge=0) description: Optional[str] = None # Properties shared by models stored in DB class PolicyInDBBase(PolicyBase): id: int created_at: datetime updated_at: Optional[datetime] = None class Config: from_attributes = True # Additional properties to return via API class Policy(PolicyInDBBase): pass # Additional properties stored in DB class PolicyInDB(PolicyInDBBase): pass