Files
aionboarding/ai-patient-onboarding/app/schemas/onboarding.py
T

103 lines
2.5 KiB
Python

from typing import Any, Literal, Optional
from pydantic import BaseModel, Field
class PatientContext(BaseModel):
id: str = Field(..., min_length=1)
name: Optional[str] = None
age: Optional[int] = None
gender: Optional[str] = None
abha_id: Optional[str] = None
phone: Optional[str] = None
insurance_scheme: Optional[str] = None
dietary_habits: Optional[str] = None
class CategoryContext(BaseModel):
type: Literal["general", "speciality"]
code: str = Field(..., min_length=1)
name: str = Field(..., min_length=1)
class StartOnboardingRequest(BaseModel):
patient: PatientContext
category: CategoryContext
language: str = "en"
class StartOnboardingResponse(BaseModel):
success: bool
session_id: str
patient_id: str
category: CategoryContext
language: str
status: str
stage: str
message: str
class SendMessageRequest(BaseModel):
message: str = Field(..., min_length=1)
class SendMessageResponse(BaseModel):
success: bool
session_id: str
stage: str
message: str
status: str
class AIStateUpdate(BaseModel):
reason_for_visit: Optional[Any] = None
symptoms: Optional[Any] = None
medical_history: Optional[Any] = None
medications: Optional[Any] = None
allergies: Optional[Any] = None
class AIOnboardingResponse(BaseModel):
reply: str
next_stage: str
state_updates: AIStateUpdate
completed: bool = False
class Symptom(BaseModel):
name: str
duration: Optional[str] = None
severity: Optional[str] = None
description: Optional[str] = None
class PatientOnboardingResult(BaseModel):
patient_id: str
abha_id: Optional[str] = None
phone: Optional[str] = None
insurance_scheme: Optional[str] = None
category: dict[str, Any]
chief_complaint: Optional[str] = None
symptoms: list[Symptom] = Field(default_factory=list)
medical_history: list[str] = Field(default_factory=list)
medications: list[str] = Field(default_factory=list)
allergies: list[str] = Field(default_factory=list)
dietary_habits: Optional[str] = None
additional_information: Optional[str] = None
language: str
onboarding_completed: bool = True
class CompleteOnboardingRequest(BaseModel):
confirmed: bool = False
class CompleteOnboardingResponse(BaseModel):
success: bool
session_id: str
status: str
result: Optional[PatientOnboardingResult] = None
message: str
response_time_ms: Optional[float] = None
response_time_sec: Optional[float] = None