from datetime import datetime from pydantic import BaseModel, ConfigDict class PatientCreate(BaseModel): first_name: str last_name: str birth_date: str | None = None phone: str | None = None email: str | None = None procedure: str | None = None status: str | None = "actif" consent_signed: str | None = "non" notes: str | None = None class PatientUpdate(BaseModel): first_name: str | None = None last_name: str | None = None birth_date: str | None = None phone: str | None = None email: str | None = None procedure: str | None = None status: str | None = None consent_signed: str | None = None notes: str | None = None class PatientOut(BaseModel): id: int first_name: str last_name: str birth_date: str | None phone: str | None = None email: str | None = None procedure: str | None = None status: str | None = None consent_signed: str | None = None notes: str | None immich_album_id: str | None created_at: datetime model_config = ConfigDict(from_attributes=True) class PhotoOut(BaseModel): id: int patient_id: int immich_asset_id: str immich_album_id: str kind: str filename: str notes: str | None created_at: datetime model_config = ConfigDict(from_attributes=True) class PhotoUpdate(BaseModel): kind: str | None = None notes: str | None = None class ImmichPersonOut(BaseModel): id: str name: str | None = None thumbnail_url: str is_hidden: bool | None = None class ImmichAssetOut(BaseModel): id: str filename: str | None = None thumbnail_url: str file_url: str taken_at: str | None = None type: str | None = None class ConsultationCreate(BaseModel): consultation_date: str | None = None procedure: str | None = None reason: str | None = None plan: str | None = None follow_up: str | None = None status: str | None = "prévu" notes: str | None = None class ConsultationUpdate(BaseModel): consultation_date: str | None = None procedure: str | None = None reason: str | None = None plan: str | None = None follow_up: str | None = None status: str | None = None notes: str | None = None class ConsultationOut(BaseModel): id: int patient_id: int consultation_date: str | None = None procedure: str | None = None reason: str | None = None plan: str | None = None follow_up: str | None = None status: str | None = None notes: str | None = None created_at: datetime model_config = ConfigDict(from_attributes=True) class DocumentCreate(BaseModel): consultation_id: int | None = None document_type: str | None = "consentement_photo" title: str status: str | None = "brouillon" content: str | None = None signed_by: str | None = None signed_at: str | None = None class DocumentUpdate(BaseModel): consultation_id: int | None = None document_type: str | None = None title: str | None = None status: str | None = None content: str | None = None signed_by: str | None = None signed_at: str | None = None class DocumentOut(BaseModel): id: int patient_id: int consultation_id: int | None = None document_type: str title: str status: str content: str | None = None signed_by: str | None = None signed_at: str | None = None created_at: datetime model_config = ConfigDict(from_attributes=True)