feat: AI patient onboarding backend and documentation
This commit is contained in:
@@ -0,0 +1,100 @@
|
||||
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
|
||||
Reference in New Issue
Block a user