diff --git a/backend/app/__init__.py b/backend/app/__init__.py new file mode 100644 index 0000000..06d7405 Binary files /dev/null and b/backend/app/__init__.py differ diff --git a/backend/app/main.py b/backend/app/main.py new file mode 100644 index 0000000..b70ee9d --- /dev/null +++ b/backend/app/main.py @@ -0,0 +1,64 @@ +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, + )