65 lines
1.7 KiB
Python
65 lines
1.7 KiB
Python
from fastapi import FastAPI
|
|
from fastapi.middleware.cors import CORSMiddleware
|
|
from pydantic import BaseModel
|
|
from typing import Any, Dict, List, Optional
|
|
|
|
|
|
class Answer(BaseModel):
|
|
question_code: str
|
|
value: Any
|
|
|
|
|
|
class SessionCreate(BaseModel):
|
|
language: str
|
|
answers: List[Answer]
|
|
|
|
|
|
class MtsPreparation(BaseModel):
|
|
session_id: str
|
|
proposed_presenting_flowchart: Optional[str] = None
|
|
red_flag_indicators: List[str] = []
|
|
suggested_priority_level: Optional[str] = None
|
|
|
|
|
|
app = FastAPI(title="Triage-Fragen API", version="0.1.0")
|
|
|
|
app.add_middleware(
|
|
CORSMiddleware,
|
|
allow_origins=["*"],
|
|
allow_credentials=True,
|
|
allow_methods=["*"],
|
|
allow_headers=["*"],
|
|
)
|
|
|
|
|
|
@app.get("/health")
|
|
async def health() -> Dict[str, str]:
|
|
return {"status": "ok"}
|
|
|
|
|
|
@app.post("/sessions", response_model=MtsPreparation)
|
|
async def create_session(payload: SessionCreate) -> MtsPreparation:
|
|
session_id = "dummy-session-id"
|
|
|
|
flowchart: Optional[str] = None
|
|
red_flags: List[str] = []
|
|
priority: Optional[str] = None
|
|
|
|
for ans in payload.answers:
|
|
if ans.question_code == "chief_complaint" and ans.value == "chest_pain":
|
|
flowchart = "CHEST_PAIN"
|
|
if ans.question_code == "breathlessness" and ans.value is True:
|
|
red_flags.append("breathlessness")
|
|
if ans.question_code == "pain_intensity" and isinstance(ans.value, int) and ans.value >= 8:
|
|
red_flags.append("severe_pain")
|
|
|
|
if "breathlessness" in red_flags:
|
|
priority = "RED_OR_ORANGE"
|
|
|
|
return MtsPreparation(
|
|
session_id=session_id,
|
|
proposed_presenting_flowchart=flowchart,
|
|
red_flag_indicators=red_flags,
|
|
suggested_priority_level=priority,
|
|
)
|