Files
ordinaceprojekt/Medevio/80 Pacienti/ZPRAVA_ANALYZA_2026-05-15.md
T
Vladimir Buzalka 452969ab4a notebookvb
2026-05-19 06:15:10 +02:00

5.5 KiB
Raw Blame History

Analýza synchronizace pacientů Medevio ↔ Medicus

Datum: 15. května 2026
Adresář: U:\OrdinaceProjekt\Medevio\80 Pacienti


1. Situace na začátku

Minulý den (14. května) jsme:

  • Stáhli pacienty z Medevio API (1600 pacientů)
  • Uložili je do MySQL tabulky medevio_pacient
  • Spustili skript bulk_set_removed.py, který měl označit pacienty bez registrace v Medicusu jako REMOVED

Otázka: Proč se záznamů neodstranilo více?


2. Analýza stavu dat

2.1 Porovnání počtů (check_sync_counts.py)

Zdroj Počet
Medevio (MySQL) — ACTIVE 1746
Medicus (Firebird) — registrovaní 1617
Rozdíl 129

→ V Medeviu je 129 pacientů navíc, kteří nejsou registrovaní v Medicusu.

2.2 Detailnější statistika (stats_user_id.py)

Zjistili jsme rozdíl mezi pacienty s user_id a bez:

ACTIVE — BEZ user_id:     547 pacientů
  ├─ V Medicusu:         545 ✓
  └─ MIMO Medicus:         0 (nikdo!)

ACTIVE — S user_id:     1,198 pacientů
  ├─ V Medicusu:       1,131 ✓
  └─ MIMO Medicus:        66 ← KANDIDÁTI NA REMOVE!

REMOVED — BEZ user_id:   179
  └─ Všichni mimo Medicus (správně smazáno)

REMOVED — S user_id:      19
  └─ 18 mimo Medicus (měli by být REMOVED, ale nejsou!)

Klíčová zjištění:

  • user_id IS NULL = pacient bez vlastního účtu v Medeviu (přidán lékařem)
  • user_id IS NOT NULL = pacient se SVÝM účtem v Medeviu (sám se registroval)

3. Problém se skriptem bulk_set_removed.py

Skript měl tento filtr:

WHERE status = 'ACTIVE'
  AND user_id IS NULL            PROBLÉM!
  AND identification_number IS NOT NULL

Důsledek: Skript odstranit jen pacienty bez vlastního Medevio účtu. Ale pacienti s user_id, co nejsou v Medicusu, zůstali označeni jako ACTIVE.


4. Úprava sync_patients_to_mysql.py na multithreading

Původní problém: Stahování detailů 1600 pacientů trvalo dlouho (sekvenciální dotazy s 0.3s delay).

Řešení: Přidáno ThreadPoolExecutor s MAX_WORKERS = 5

Kód:

  • Importy: threading, concurrent.futures
  • Třída RateLimiter — globální kontrola API rate limit (0.3s mezi requesty)
  • Funkce fetch_all_details_threaded() — paralelní stahování s 5 thrady

Efekt: Čas snížen z ~1520 minut na ~23 minuty (68× zrychlení)


5. Speciální případy

5.1 Vymětalová Kristýna (RC: 9054260083)

  • Status v Medeviu: ACTIVE s user_id
  • Status v Medicusu: Figuruje v seznamu, ale poslední registrace skončila 8. 10. 2024
  • Závěr: Správně se počítá jako neregistrovaná (registrace starší než dnes 15. 5. 2026)

5.2 Divný záznam s chybou

Nalezen pacient s jménem:

name: %JMENO%
surname: %PRIJMENI%
identification_number: %RODCISN%

Akce: Smazáno z MySQL (datová chyba, placeholder místo skutečných údajů)


6. Seznamy pacientů

6.1 Těch 66 mimo Medicus (ACTIVE s user_id)

Plný seznam viz: list_extras.py nebo tabulka v SEZNAM.md

Poznámky:

  • 3 duplikáty (4 záznamy):
    • Bauerová Irena (2×)
    • Jechová Alena (2×)
    • Kroupa Vratislav (2×)

7. VZP API dotazy na registrující lékaře

Vytvořeny skripty pro dotazování VZP B2B API:

Skript Účel
check_lekare_vzp_test.py Test na prvních 5 pacientech
check_lekare_vzp.py Všech 6166 pacientů

Konfiguraci:

  • Certifikát: Insurance/Certificates/picka.pfx
  • Heslo: Vlado7309208104+
  • ICZ: 09305000

Výstup: Tabulka s jménem lékaře v odbornosti 001 pro každého pacienta (nebo "NEMÁ LÉKAŘE")

Poznámka: VZP provádí údržbu 15. 5. 2026 18:30 — 17. 5. 2026 (sic!) — API nemusí být dostupné.


8. Oprava připojení k Medicusu

Problém: get_medicus_connection() v medicus_db.py měla špatný DSN

Řešení: Aktualizován DSN pro počítač NTBVBHP470G10:

"NTBVBHP470G10": r"reporter:c:\medicus\medicus.fdb",

Místo: localhost:c:\medicus 3\data\medicus.fdb


9. Závěr — co to znamená

Situace:

  • ✓ 1617 pacientů je správně registrovaných v Medicusu
  • ⚠️ 66 pacientů je ACTIVE v Medeviu, ale nemají registraci u nás (mají vlastní účet v Medeviu)
  • ⚠️ 179 pacientů bylo správně označeno jako REMOVED (bez vlastního účtu)
  • ⚠️ 18 pacientů je označeno REMOVED, mají vlastní účet, ale nejsou v Medicusu

Příštích kroků:

  1. Opravit bulk_set_removed.py — měl by hledat všechny ACTIVE mimo Medicus, ne jen bez user_id
  2. Rozhodnout o těch 66 pacientech:
    • Jsou to pacienti, co se registrují jen v Medeviu (bez návštěvy u lékaře)?
    • Měli by být označeni jako REMOVED?
  3. Dotázat se VZP API, kde jsou těmito pacienty registrováni (pokud vůbec)

10. Soubory vytvořené během analýzy

U:\OrdinaceProjekt\Medevio\80 Pacienti\
├── sync_patients_to_mysql.py (upraveno — multithreading)
├── bulk_set_removed.py (existující — problém s logikou)
├── check_sync_counts.py (NEW)
├── check_removed_status.py (NEW)
├── analyze_extras.py (NEW)
├── list_extras.py (NEW)
├── stats_user_id.py (NEW)
├── check_vymetalova.py (NEW)
├── debug_vymetalova.py (NEW)
├── check_lekare_vzp.py (NEW)
├── check_lekare_vzp_test.py (NEW)
└── vzp_output.txt (output z VZP dotazů)

Zpracoval: Claude Code
Poslední update: 2026-05-15 16:00 CET