notebookvb

This commit is contained in:
Vladimir Buzalka
2026-06-02 07:03:58 +02:00
parent dddd28ae2a
commit d5f2dc3925
+5 -111
View File
@@ -14,6 +14,11 @@ Nástroje:
uloz_poznamku — vytvoř nebo aktualizuj interní poznámku k požadavku
hledej_pacienta — vyhledej pacienta podle jména / rodného čísla
get_pacient — detail pacienta podle UUID
TODO:
- smaz_rezervaci neumí mazat opakované (recurring) poznámky — potřeba
zachytit GraphQL mutaci z webu Medevio při smazání recurring reservation
a přidat podporu (smazat celou sérii / jeden výskyt).
"""
import sys
@@ -718,117 +723,6 @@ def get_pacient(patient_id: str) -> dict:
raise
# ─────────────────────────────────────────────────────────────────────────────
if __name__ == "__main__":
log("MCP Medevio server spuštěn (FastMCP)")
mcp.run()
except Exception:
log(f"get_poznamky chyba: {traceback.format_exc()}")
raise
@mcp.tool()
def uloz_poznamku(
request_id: str,
obsah: str,
prepend: bool = False,
) -> dict:
"""Vytvoří nebo aktualizuje interní klinickou poznámku k požadavku.
Pokud poznámka neexistuje, vytvoří novou.
Pokud existuje, aktualizuje ji (buď přepíše celý obsah, nebo přidá text na začátek).
Args:
request_id: UUID požadavku.
obsah: Nový obsah poznámky (nebo text k přidání na začátek, pokud prepend=True).
prepend: Pokud True, přidá obsah na začátek existující poznámky (default False = přepíše).
"""
try:
notes_data = _gql("ClinicRequestNotes_Get", _NOTES_GET_QUERY, {"patientRequestId": request_id})
notes = notes_data.get("notes") or []
if notes:
note = notes[0]
note_id = note["id"]
new_content = (obsah + "\n" + (note["content"] or "")) if prepend else obsah
result = _gql("ClinicRequestNotes_Update", _NOTE_UPDATE_MUTATION, {
"noteInput": {"id": note_id, "content": new_content}
})
return {"ok": True, "akce": "update", "note_id": result["updateClinicPatientRequestNote"]["id"]}
else:
result = _gql("ClinicRequestNotes_Create", _NOTE_CREATE_MUTATION, {
"noteInput": {"requestId": request_id, "content": obsah}
})
return {"ok": True, "akce": "create", "note_id": result["createClinicPatientRequestNote"]["id"]}
except Exception:
log(f"uloz_poznamku chyba: {traceback.format_exc()}")
raise
# ─────────────────────────────────────────────────────────────────────────────
# PACIENTI
# ─────────────────────────────────────────────────────────────────────────────
_SEARCH_QUERY = """
query Search($clinicSlug: String!, $locale: Locale!, $query: String!) {
results: search(clinicSlug: $clinicSlug, locale: $locale, query: $query) {
patients {
id name surname identificationNumber dob
insuranceCompanyObject { code shortName }
status isInClinic
}
}
}"""
@mcp.tool()
def hledej_pacienta(query: str) -> dict:
"""Vyhledá pacienta v Medeviu.
Args:
query: Jméno, příjmení, rodné číslo nebo jejich kombinace.
"""
try:
data = _gql("Search", _SEARCH_QUERY, {
"clinicSlug": CLINIC_SLUG,
"locale": "cs",
"query": query,
})
pacienti = data.get("results", {}).get("patients") or []
return {"query": query, "pocet": len(pacienti), "pacienti": pacienti}
except Exception:
log(f"hledej_pacienta chyba: {traceback.format_exc()}")
raise
_PATIENT_DETAIL_QUERY = """
query GetPatientDetail($clinicSlug: String!, $patientId: String!) {
patient: getPatientForClinic(clinicSlug: $clinicSlug, patientId: $patientId) {
id name surname identificationNumber sex dob
email phone status isInClinic hasMobileApp
note city street houseNumber createdAt
insuranceCompanyObject { code name shortName }
user { id email phone }
}
}"""
@mcp.tool()
def get_pacient(patient_id: str) -> dict:
"""Vrátí detail pacienta.
Args:
patient_id: UUID pacienta (z hledej_pacienta nebo get_agenda).
"""
try:
data = _gql("GetPatientDetail", _PATIENT_DETAIL_QUERY, {
"clinicSlug": CLINIC_SLUG,
"patientId": patient_id,
})
return data.get("patient") or {}
except Exception:
log(f"get_pacient chyba: {traceback.format_exc()}")
raise
# ─────────────────────────────────────────────────────────────────────────────
if __name__ == "__main__":
log("MCP Medevio server spuštěn (FastMCP)")