"""# Summary Appointments domain — scheduled visits linking a pet, a vet and a treatment. """ from pydantic import BaseModel from domain.parents.models import Metadata class ProcedureNote(BaseModel): """A single procedure note; ``noteType`` selects the shape. Attributes: noteType (str): Discriminator (basic, heart_rate, dental, vaccine, preop, surgery). summary (str | None): Short summary. Defaults to None. details (str | None): Longer details. Defaults to None. """ noteType: str summary: str | None = None details: str | None = None model_config = {"extra": "ignore"} class Procedure(BaseModel): """A procedure performed during an appointment. Attributes: name (str): Procedure name. description (str | None): Procedure description. Defaults to None. cost (float | None): Cost of the procedure. Defaults to None. notes (ProcedureNote | None): Typed procedure note. Defaults to None. """ name: str description: str | None = None cost: float | None = None notes: ProcedureNote | None = None model_config = {"extra": "ignore"} class Appointment(BaseModel): """A scheduled appointment. Attributes: id (int | None): Server-assigned identifier. Defaults to None. date (str): ISO date-time of the appointment. notes (str | None): Additional notes. Defaults to None. procedures (list[Procedure]): Procedures performed. Defaults to empty. pet (dict | int | None): Embedded pet object or pet id. vet (dict | int | None): Embedded vet object or vet id. treatment (dict | int | None): Embedded treatment or treatment id. metadata (Metadata | None): Presentation metadata. Defaults to None. """ id: int | None = None date: str notes: str | None = None procedures: list[Procedure] = [] pet: dict | int | None = None vet: dict | int | None = None treatment: dict | int | None = None metadata: Metadata | None = None model_config = {"extra": "ignore"}