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