# 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 class SNSBase(BaseModel): Type: str MessageId: str Token: str TopicArn: str SubscribeURL: str Message: str class AuthOTP(BaseModel): email: EmailStr otp: str class ClinicFileVerificationBase(BaseModel): abn_doc_is_verified: Optional[bool] = None contract_doc_is_verified: Optional[bool] = None logo_is_verified: Optional[bool] = None last_changed_by: Optional[int] = None class SignupPricingMasterBase(BaseModel): setup_fees: Optional[float] = None subscription_fees: Optional[float] = None per_call_charges: Optional[float] = None class AuthBase(BaseModel): email: EmailStr password: str class ResetPasswordBase(BaseModel): token: str password: str class CreateSuperAdmin(BaseModel): username:str email:EmailStr # Base schemas (shared attributes for create/read operations) class ClinicBase(BaseModel): name: str address: Optional[str] = None phone: str emergency_phone: Optional[str] = None 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 creator_id: Optional[int] = None fax: 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 mobile: Optional[str] = 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 class NotificationBase(BaseModel): title: str message: str is_read: bool sender_id: int receiver_id: int