Files
medevio/medevio_api_notes.txt
2025-10-19 09:34:35 +02:00

114 lines
4.5 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
MEDEVIO API WORKING NOTES
============================
GENERAL ARCHITECTURE
--------------------
Frontend: React + Material-UI (MUI) + Apollo GraphQL
Backend: GraphQL API at https://api.medevio.cz/graphql
Authentication: via cookies / tokens stored in medevio_storage.json (Playwright session file)
Frontend base: https://my.medevio.cz/mudr-buzalkova/klinika/...
Session handling: token refreshed through AccessToken_AuthSelf calls
AUTHENTICATION AND SESSION
--------------------------
Reuse session cookies from medevio_storage.json.
Example:
state = json.load(open("medevio_storage.json"))
cookies = {c["name"]: c["value"] for c in state["cookies"] if "medevio" in c["domain"]}
Use these cookies in all requests.post(GRAPHQL_URL, headers, cookies, data=...) calls.
KEY API ENDPOINTS (GraphQL OPERATIONS)
--------------------------------------
Operation name Purpose
------------------------------------ ------------------------------------------
AccessToken_AuthSelf Verify or refresh current user session
ClinicNavigation_GetClinic Get basic clinic info (name, ID)
ClinicAgenda_GetCalendarsForClinic List available calendars within your clinic
ClinicAgenda_ListClinicReservations List reservations (appointments) for date or range
UpdateReservation_GetReservation Get full detail of one reservation
ClinicRequestDetail_GetPatientRequest2 Fetch detailed “Požadavek” (request card)
ClinicRequestNotes_Get Load notes/comments on Požadavek
UseMessages_ListMessages Load chat messages with patient
Communication_GetClinicFooter UI info only
WORKFLOW FOR AUTOMATION
-----------------------
1. Extract reservations (agenda overview)
operationName: "ClinicAgenda_ListClinicReservations"
variables: {"clinicId": "<clinic-uuid>", "dateFrom": "YYYY-MM-DDT00:00:00Z", "dateTo": "YYYY-MM-DDT23:59:59Z"}
Returns: id, startDateTime, endDateTime, patient {name, age}, reason, status
2. Get detail of a single reservation
operationName: "UpdateReservation_GetReservation"
variables: {"id": "<reservation-uuid>"}
Returns: reason, time, doctor, patient contact, note, etc.
3. Get detail of Požadavek (request card)
operationName: "ClinicRequestDetail_GetPatientRequest2"
variables: {"id": "<request-uuid>"}
Returns: text of request, attachments, communication, etc.
HTTP SETUP FOR ALL GRAPHQL CALLS
--------------------------------
GRAPHQL_URL = "https://api.medevio.cz/graphql"
headers = {
"content-type": "application/json",
"origin": "https://my.medevio.cz",
"referer": "https://my.medevio.cz/",
}
response = requests.post(GRAPHQL_URL, headers=headers, cookies=cookies, data=json.dumps(payload))
DATA STRUCTURE HINTS (Reservation)
----------------------------------
{
"id": "0e3a4f5c-1c15-40e6-b1b1-325de9269ef5",
"reason": "Očkování - Chřipka",
"startDateTime": "2025-10-17T09:10:00Z",
"endDateTime": "2025-10-17T09:20:00Z",
"status": "confirmed",
"note": "přijde i s taťkou",
"patient": {"id": "...", "name": "Černík Pavel", "age": 53},
"doctor": {"id": "...", "name": "MUDr. Buzalková"},
"location": {"name": "Ordinace Prosek"}
}
PLAYWRIGHT SELECTORS (REFERENCE)
--------------------------------
Purpose Selector
---------------- -------------------------------------------
Agenda rows div[data-testid='reservation-row']
Row ID data-id
Agenda fields div[data-field='Time'], div[data-field='Patient'], div[data-field='Reason']
RECOMMENDED AUTOMATION PIPELINE
--------------------------------
1. Step 1 Agenda scrape (Playwright)
Open agenda-dne → extract data-id, patient, time, reason.
2. Step 2 GraphQL fetch (Python requests)
Use ClinicAgenda_ListClinicReservations to get full dataset.
3. Step 3 Detail enrichment
For each appointment → call UpdateReservation_GetReservation.
For linked Požadavek → call ClinicRequestDetail_GetPatientRequest2.
4. Step 4 Storage / reporting
Save to MySQL or Excel for vaccine inventory, reminders, analytics.
SECURITY / MAINTENANCE NOTES
----------------------------
- GraphQL introspection is disabled.
- Session cookies expire periodically; refresh via Playwright login.
- Keep data secure (GDPR compliance).
FUTURE TASKS
------------
- Automate login refresh and cookie renewal.
- Build function get_reservations(date) using ClinicAgenda_ListClinicReservations.
- Build function get_reservation_detail(reservation_id).
- Map vaccine keywords (Očkování Chřipka, COVID, Hepatitida, …).
- Export to Excel/MySQL for vaccine order planning.