# schemas.py from datetime import datetime from typing import List, Optional from pydantic import BaseModel, EmailStr from enums.enums import AppointmentStatus, ClinicDoctorStatus, ClinicDoctorType, ClinicUserRoles, UserType, Integration # Base schemas (shared attributes for create/read operations) class ClinicBase(BaseModel): name: str address: Optional[str] = None phone: str email: Optional[EmailStr] = None integration: Integration pms_id: str practice_name: str logo: Optional[str] = None country: Optional[str] = None postal_code: Optional[str] = None city: Optional[str] = None state: Optional[str] = None abn_doc: Optional[str] = None abn_number: Optional[str] = None contract_doc: Optional[str] = None clinic_phone: Optional[str] = None is_clinic_phone_enabled: Optional[bool] = None other_info: Optional[str] = None greeting_msg: Optional[str] = None voice_model: Optional[str] = None voice_model_provider: Optional[str] = None voice_model_gender: Optional[str] = None scenarios: Optional[str] = None general_info: Optional[str] = None class DoctorBase(BaseModel): name: str age: Optional[int] = None email: Optional[EmailStr] = None phone: str address: Optional[str] = None clinic_id: int class PatientBase(BaseModel): name: str age: Optional[int] = None email: Optional[EmailStr] = None phone: Optional[str] = None address: Optional[str] = None dob: Optional[str] = None class AppointmentBase(BaseModel): doctor_id: int patient_id: int appointment_time: datetime status: AppointmentStatus = AppointmentStatus.CONFIRMED class CalendarBase(BaseModel): doc_id: int # rrule: str # Recurrence rule in iCalendar format time: str class UserBase(BaseModel): username: str email: EmailStr password: str clinicRole: Optional[ClinicUserRoles] = None userType: Optional[UserType] = None class ClinicDoctorBase(BaseModel): name: str role: ClinicDoctorType status: ClinicDoctorStatus clinic_id: int class CallTranscriptsBase(BaseModel): patient_name:str patient_number:str call_duration:str call_received_time:str transcript_key_id:str