feat: complete production hardening implementation, specialty canonicalization, google-genai migration, voice reliability, sqlite concurrency, and test suite consolidation
This commit is contained in:
@@ -0,0 +1,87 @@
|
||||
"""
|
||||
Strongly typed domain models for Patient Onboarding state management.
|
||||
"""
|
||||
|
||||
from typing import Any, Dict, List, Optional, Union
|
||||
from pydantic import BaseModel, Field
|
||||
|
||||
|
||||
class SymptomItem(BaseModel):
|
||||
name: str
|
||||
canonical_name: Optional[str] = None
|
||||
duration: Optional[str] = None
|
||||
severity: Optional[str] = None
|
||||
location: Optional[str] = None
|
||||
frequency: Optional[str] = None
|
||||
onset: Optional[str] = None
|
||||
pattern: Optional[str] = None
|
||||
trigger: Optional[str] = None
|
||||
relieving_factor: Optional[str] = None
|
||||
associated_findings: Optional[str] = None
|
||||
|
||||
|
||||
class MedicationItem(BaseModel):
|
||||
name: str
|
||||
canonical_name: Optional[str] = None
|
||||
dosage: Optional[str] = None
|
||||
frequency: Optional[str] = None
|
||||
duration: Optional[str] = None
|
||||
purpose: Optional[str] = None
|
||||
|
||||
|
||||
class AllergyItem(BaseModel):
|
||||
name: str
|
||||
canonical_name: Optional[str] = None
|
||||
type: Optional[str] = None # e.g., 'drug', 'food', 'environment'
|
||||
reaction: Optional[str] = None # e.g., 'rash', 'swelling'
|
||||
|
||||
|
||||
class MedicalHistoryItem(BaseModel):
|
||||
condition: str
|
||||
canonical_name: Optional[str] = None
|
||||
duration: Optional[str] = None
|
||||
status: Optional[str] = "active"
|
||||
details: Optional[str] = None
|
||||
|
||||
|
||||
class SurgicalHistoryItem(BaseModel):
|
||||
procedure: str
|
||||
body_site: Optional[str] = None
|
||||
approximate_date: Optional[str] = None
|
||||
reason: Optional[str] = None
|
||||
|
||||
|
||||
class PreviousEpisodeItem(BaseModel):
|
||||
description: str
|
||||
time: Optional[str] = None
|
||||
outcome: Optional[str] = None
|
||||
|
||||
|
||||
class FamilyHistoryItem(BaseModel):
|
||||
relation: str # e.g., 'father', 'mother', 'sibling'
|
||||
condition: str
|
||||
canonical_name: Optional[str] = None
|
||||
|
||||
|
||||
class FieldContainer(BaseModel):
|
||||
status: str = "not_collected" # 'not_collected' | 'reported' | 'confirmed_none' | 'unknown' | 'declined'
|
||||
items: List[Dict[str, Any]] = Field(default_factory=list)
|
||||
|
||||
|
||||
class SpecialtyConfidence(BaseModel):
|
||||
code: str
|
||||
name: str
|
||||
confidence: float = 1.0
|
||||
evidence: List[str] = Field(default_factory=list)
|
||||
|
||||
|
||||
class PatientState(BaseModel):
|
||||
reason_for_visit: Optional[str] = None
|
||||
symptoms: List[SymptomItem] = Field(default_factory=list)
|
||||
medical_history: Union[FieldContainer, List[MedicalHistoryItem], Dict[str, Any]] = Field(default_factory=list)
|
||||
medications: Union[FieldContainer, List[MedicationItem], Dict[str, Any]] = Field(default_factory=list)
|
||||
allergies: Union[FieldContainer, List[AllergyItem], Dict[str, Any]] = Field(default_factory=list)
|
||||
surgical_history: List[SurgicalHistoryItem] = Field(default_factory=list)
|
||||
previous_episodes: List[PreviousEpisodeItem] = Field(default_factory=list)
|
||||
family_history: List[FamilyHistoryItem] = Field(default_factory=list)
|
||||
additional_information: List[Dict[str, Any]] = Field(default_factory=list)
|
||||
Reference in New Issue
Block a user