import uuid from datetime import date, datetime from typing import Optional from pydantic import BaseModel, ConfigDict class AECreate(BaseModel): site_id: Optional[uuid.UUID] = None subject_id: Optional[uuid.UUID] = None visit_id: Optional[uuid.UUID] = None term: str onset_date: Optional[date] = None seriousness: str severity: str causality: Optional[str] = None description: Optional[str] = None outcome: Optional[str] = None class AEUpdate(BaseModel): subject_id: Optional[uuid.UUID] = None term: Optional[str] = None onset_date: Optional[date] = None resolution_date: Optional[date] = None seriousness: Optional[str] = None severity: Optional[str] = None causality: Optional[str] = None action_taken: Optional[str] = None outcome: Optional[str] = None reported_to_sponsor: Optional[bool] = None status: Optional[str] = None description: Optional[str] = None class AERead(BaseModel): id: uuid.UUID study_id: uuid.UUID site_id: Optional[uuid.UUID] subject_id: Optional[uuid.UUID] visit_id: Optional[uuid.UUID] term: str onset_date: Optional[date] resolution_date: Optional[date] seriousness: str severity: str causality: Optional[str] action_taken: Optional[str] outcome: Optional[str] reported_to_sponsor: bool report_due_date: Optional[date] status: str description: Optional[str] created_by: uuid.UUID created_at: datetime updated_at: datetime is_overdue: bool | None = None model_config = ConfigDict(from_attributes=True)