notebookvb
This commit is contained in:
+5
-111
@@ -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)")
|
||||
|
||||
Reference in New Issue
Block a user