103 lines
2.5 KiB
Python
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
|