5.5 KiB
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 ~15–20 minut na ~2–3 minuty (6–8× 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 61–66 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ů:
- Opravit
bulk_set_removed.py— měl by hledat všechny ACTIVE mimo Medicus, ne jen bezuser_id - 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?
- 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