notebookvb

This commit is contained in:
Vladimir Buzalka
2026-05-19 06:15:10 +02:00
parent 0d1b89c117
commit 452969ab4a
8 changed files with 1614 additions and 2 deletions
@@ -0,0 +1,191 @@
# 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:
```sql
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](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`:
```python
"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