diff --git a/mcp_medevio.py b/mcp_medevio.py index ff83da1..9dd9678 100644 --- a/mcp_medevio.py +++ b/mcp_medevio.py @@ -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)")