import uuid from datetime import date, datetime from typing import Optional from pydantic import BaseModel, ConfigDict class SubjectCreate(BaseModel): site_id: uuid.UUID subject_no: str screening_date: Optional[date] = None consent_date: Optional[date] = None enrollment_date: Optional[date] = None baseline_date: Optional[date] = None class SubjectUpdate(BaseModel): status: Optional[str] = None consent_date: Optional[date] = None enrollment_date: Optional[date] = None baseline_date: Optional[date] = None completion_date: Optional[date] = None actual_medication_count: Optional[int] = None drop_reason: Optional[str] = None class SubjectRead(BaseModel): id: uuid.UUID study_id: uuid.UUID site_id: uuid.UUID subject_no: str status: str screening_date: Optional[date] consent_date: Optional[date] enrollment_date: Optional[date] baseline_date: Optional[date] completion_date: Optional[date] actual_medication_count: Optional[int] drop_reason: Optional[str] created_at: datetime updated_at: datetime has_ae: Optional[bool] = None has_sae: Optional[bool] = None has_susar: Optional[bool] = None model_config = ConfigDict(from_attributes=True)