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
|
uloz_poznamku — vytvoř nebo aktualizuj interní poznámku k požadavku
|
||||||
hledej_pacienta — vyhledej pacienta podle jména / rodného čísla
|
hledej_pacienta — vyhledej pacienta podle jména / rodného čísla
|
||||||
get_pacient — detail pacienta podle UUID
|
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
|
import sys
|
||||||
@@ -718,117 +723,6 @@ def get_pacient(patient_id: str) -> dict:
|
|||||||
raise
|
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__":
|
if __name__ == "__main__":
|
||||||
log("MCP Medevio server spuštěn (FastMCP)")
|
log("MCP Medevio server spuštěn (FastMCP)")
|
||||||
|
|||||||
Reference in New Issue
Block a user