"""Doctor and Patient DTOs — Phase 13.0.""" from __future__ import annotations from datetime import datetime from uuid import UUID from pydantic import BaseModel, ConfigDict, Field from app.models.types import ProfileStatus from app.schemas.common import ORMBase _FORBID = ConfigDict(extra="forbid") class DoctorCreate(BaseModel): model_config = _FORBID user_id: str = Field(max_length=100) clinic_id: UUID | None = None department_id: UUID | None = None code: str = Field(max_length=50) display_name: str = Field(max_length=255) specialty: str | None = Field(default=None, max_length=100) license_number: str | None = Field(default=None, max_length=100) status: ProfileStatus = ProfileStatus.ACTIVE contact: dict | None = None metadata_json: dict | None = None class DoctorUpdate(BaseModel): model_config = _FORBID clinic_id: UUID | None = None department_id: UUID | None = None display_name: str | None = Field(default=None, max_length=255) specialty: str | None = Field(default=None, max_length=100) license_number: str | None = Field(default=None, max_length=100) status: ProfileStatus | None = None contact: dict | None = None metadata_json: dict | None = None version: int = Field(ge=1) class DoctorRead(ORMBase): id: UUID tenant_id: UUID user_id: str clinic_id: UUID | None department_id: UUID | None code: str display_name: str specialty: str | None license_number: str | None status: ProfileStatus contact: dict | None metadata_json: dict | None version: int is_deleted: bool created_by: str | None updated_by: str | None created_at: datetime updated_at: datetime class PatientCreate(BaseModel): model_config = _FORBID user_id: str = Field(max_length=100) code: str = Field(max_length=50) display_name: str = Field(max_length=255) status: ProfileStatus = ProfileStatus.ACTIVE date_of_birth: str | None = Field(default=None, max_length=32) gender: str | None = Field(default=None, max_length=32) contact: dict | None = None emergency_contact: dict | None = None metadata_json: dict | None = None class PatientUpdate(BaseModel): model_config = _FORBID display_name: str | None = Field(default=None, max_length=255) status: ProfileStatus | None = None date_of_birth: str | None = Field(default=None, max_length=32) gender: str | None = Field(default=None, max_length=32) contact: dict | None = None emergency_contact: dict | None = None metadata_json: dict | None = None version: int = Field(ge=1) class PatientRead(ORMBase): id: UUID tenant_id: UUID user_id: str code: str display_name: str status: ProfileStatus date_of_birth: str | None gender: str | None contact: dict | None emergency_contact: dict | None metadata_json: dict | None version: int is_deleted: bool created_by: str | None updated_by: str | None created_at: datetime updated_at: datetime