ai-triage-agent / tools.py
simikkk's picture
Upload 9 files
9d0d020 verified
Raw
History Blame Contribute Delete
2.49 kB
# -*- coding: utf-8 -*-
"""
Rozhraní k sandbox datům – Linie ZDRAVÍ.
Tyto funkce používá váš agent. Skutečnou prioritu pacienta nezískáte – ta slouží k hodnocení.
"""
import json, csv, os
_DIR = os.path.dirname(os.path.abspath(__file__))
with open(os.path.join(_DIR, "patients_presentation.json"), encoding="utf-8") as f:
_PRES = {p["id"]: p for p in json.load(f)}
with open(os.path.join(_DIR, "patients_anamnesis.json"), encoding="utf-8") as f:
_ANAM = json.load(f)
_EPI = {}
with open(os.path.join(_DIR, "epidemiology.csv"), encoding="utf-8") as f:
for row in csv.DictReader(f):
_EPI[row["datum"]] = row
_ESCALATIONS = []
_BURDEN = {"otazky": 0} # počet otázek položených pacientovi (zátěž pacienta)
def get_presentation(pid):
"""Vrátí prezentaci pacienta (symptomy + vitály). Vidí každý."""
return _PRES.get(pid)
def get_history(pid):
"""Vrátí anamnézu pacienta z dostupných záznamů. Nezatěžuje pacienta."""
return _ANAM.get(pid)
def get_epidemiology(datum):
"""Vrátí epidemiologický kontext pro dané datum. Nezatěžuje pacienta."""
return _EPI.get(datum, {"datum": datum, "ARI_vyskyt_na_100k": "150", "uroven_vlny": "nízká"})
def ask_patient(pid, otazka):
"""Zeptá se přímo PACIENTA. Vždy dostupné, ALE počítá se do zátěže pacienta.
Dobrý agent si informaci raději dohledá (get_history / get_epidemiology)
a pacienta se ptá jen tehdy, když to jinak nejde."""
_BURDEN["otazky"] += 1
anam = _ANAM.get(pid, {})
pres = _PRES.get(pid, {})
# zjednodušená odpověď: pacient potvrdí to, co o sobě ví
return {"id": pid, "otazka": otazka,
"odpoved": {"rizikove_faktory": anam.get("rizikove_faktory", []),
"symptomy": pres.get("symptomy", [])}}
def lookup_guideline(symptom):
"""Placeholder. Nahraďte vlastní rešerší platného českého triážního standardu."""
return {"symptom": symptom, "poznamka": "Dohledejte platný český triážní standard (SUMMK/ÚZIS)."}
def escalate(pid, duvod):
"""Předá pacienta lékaři (human-in-the-loop). Vrací potvrzení."""
_ESCALATIONS.append({"id": pid, "duvod": duvod})
return {"id": pid, "eskalovano": True, "duvod": duvod}
def _escalations():
return list(_ESCALATIONS)
def patient_burden():
"""Vrátí počet otázek, které jste dosud položili pacientům (nižší = lépe)."""
return _BURDEN["otazky"]