diff --git a/Medevio/medevio_api_notes.md b/Medevio/medevio_api_notes.md index 9030197..776aa3e 100644 --- a/Medevio/medevio_api_notes.md +++ b/Medevio/medevio_api_notes.md @@ -100,6 +100,115 @@ patient { |-----------|-----------|----------| | `LegacyClinicPatientListPage_ListClinicPatients` | `clinicSlug`, `criteria {premiumPlanId, tagId}`, `pageInfo {first: 50, offset}` | `count`, `patients`, `clinic` | +#### Fungující dotaz pro stránkovaný seznam pacientů (sync) + +Pozor: `listClinicPatients` nefunguje pro hromadný export. Fungující query je `listPatients`: + +```graphql +query SyncListPatients($clinicSlug: String!, $pageInfo: PageInfo!, $filter: ListPatientFilter!) { + patientsList: listPatients(clinicSlug: $clinicSlug, filter: $filter, pageInfo: $pageInfo) { + count + patients { + id + identificationNumber + name + surname + sex + phone + status2 + isInClinic + locale + insuranceCompanyObject { id shortName } + user { id phone name surname } + } + } +} +``` + +Variables: +```json +{ + "clinicSlug": "mudr-buzalkova", + "filter": {}, + "pageInfo": { "first": 50, "offset": 0 } +} +``` + +Stránkování: `offset` se zvyšuje po 50, `count` v odpovědi = celkový počet pacientů. + +#### Dotaz pro detail jednoho pacienta + +```graphql +query GetPatientDetail($clinicSlug: String!, $patientId: String!) { + patient: getPatientForClinic(clinicSlug: $clinicSlug, patientId: $patientId) { + id + name + surname + identificationNumber + sex + dob + email + phone + status + isInClinic + hasMobileApp + anamnesisShared + note + city + street + houseNumber + createdAt + insuranceCompanyObject { + code + name + } + user { + id + email + phone + } + } +} +``` + +Variables: +```json +{ + "clinicSlug": "mudr-buzalkova", + "patientId": "" +} +``` + +### Sync pacientů do MySQL + +Dvoustupňový proces: +1. `listPatients` stránkovaně stáhne seznam všech patient IDs (po 50) +2. Pro každého pacienta se zavolá `getPatientForClinic` pro detail +3. UPSERT do `medevio.medevio_pacient` (23 sloupců) + +Skript: `Medevio/80 Pacienti/sync_patients_to_mysql.py` +Výsledek: 1963 pacientů synchronizováno (květen 2026). + +#### Známé problémy + +- **`hasMobileApp` je nefunkční na úrovni pacienta** — ověřeno na více endpointech: + - `getPatientForClinic` → vždy `false` ❌ + - `ClinicPatientDetailModal_GetData` → `patient.hasMobileApp` vždy `false` ❌ + - `listPatients` → pole vůbec neexistuje v GraphQL schema ❌ + +- **Správná hodnota `hasMobileApp` je na objektu `request`**, nikoli pacienta: + - `ClinicRequestDetail_GetPatientRequest2` → `request.hasMobileApp` vrací správně ✅ + - `request.extendedPatient.hasMobileApp` je stále vždy `false` ❌ + - UI komponenta `PatientRequest.MessageSend` čte hodnotu z `request.hasMobileApp` a rozhoduje: + - `true` → zobrazí "Odeslat do aplikace" + - `false` + telefon existuje → zobrazí "Odeslat přes SMS" + - `false` + žádný telefon → tlačítko se nezobrazí vůbec + +- **Praktické získání `hasMobileApp` pro pacienty:** + - Stáhnout všechny požadavky přes `ClinicLegacyRequestList_ListPatientRequestsForClinic` (aktivní i vyřízené) + - Pro každého pacienta vzít nejnovější `hasMobileApp` z jeho požadavků + - Nevýhoda: pacienti bez jediného požadavku budou `NULL`; hodnota odráží stav k době posledního požadavku + ### Requests (Pozadavky) | Operation | Variables | Response |