feat: AI patient onboarding backend and documentation

This commit is contained in:
2026-08-27 12:15:09 +05:30
parent b9440772d1
commit 59c1372fe3
49 changed files with 4012 additions and 0 deletions
@@ -0,0 +1,103 @@
import json
from sqlalchemy.orm import Session
from app.database.models import (
OnboardingMessage,
OnboardingSession,
OnboardingState,
)
class OnboardingService:
def get_session(
self,
db: Session,
session_id: str,
):
return (
db.query(OnboardingSession)
.filter(
OnboardingSession.session_id == session_id
)
.first()
)
def get_state(
self,
db: Session,
session_id: str,
):
state = (
db.query(OnboardingState)
.filter(
OnboardingState.session_id == session_id
)
.first()
)
if not state:
default_state = {
"reason_for_visit": {
"status": "not_collected",
"value": None
},
"symptoms": {
"status": "not_collected",
"items": []
},
"medical_history": {
"status": "not_collected",
"items": []
},
"medications": {
"status": "not_collected",
"items": []
},
"allergies": {
"status": "not_collected",
"items": []
}
}
state = OnboardingState(
session_id=session_id,
state_json=json.dumps(default_state),
)
db.add(state)
db.commit()
db.refresh(state)
return state
def save_message(
self,
db: Session,
session_id: str,
role: str,
message: str,
stage: str,
):
new_message = OnboardingMessage(
session_id=session_id,
role=role,
message=message,
stage=stage,
)
db.add(new_message)
db.commit()
return new_message
def update_state(
self,
db: Session,
state: OnboardingState,
data: dict,
):
state.state_json = json.dumps(data)
db.commit()
db.refresh(state)
return state