notebookvb

This commit is contained in:
Vladimir Buzalka
2026-06-16 10:21:19 +02:00
parent 672ee26357
commit 9b6f89f437
7 changed files with 2617 additions and 0 deletions
+136
View File
@@ -0,0 +1,136 @@
# FinalReconcilliation — sledování stavu registrovaných pacientů
## Cíl
Jednoznačně roztřídit pacienty **registrované v Medicusu** podle **skutečnosti ověřené u pojišťovny**:
kdo je k danému dni jejich registrující **praktik (odbornost 001)** dle VZP B2B.
- praktik = **Buzalková (IČP 09305001)** → pacient **je** v zakoupeném souboru pacientů (OK)
- praktik = kdokoli jiný / žádný → **„NEBYL V ZAKOUPENÉM SOUBORU PACIENTŮ"**
„Registrovaný v Medicusu" je jen stav v software; tohle ověřuje realitu u pojišťovny.
## Úložiště — MongoDB
| | |
|---|---|
| Server | `mongodb://192.168.1.76:27017` (stejný stroj jako MySQL `medevio`) |
| Databáze | `ordinace` |
| Kolekce | `registrovani_tracking` |
| Klíč | `_id` = rodné číslo (1 dokument na pacienta) |
### Schéma dokumentu
```json
{
"_id": "8202...", "rc": "8202...", "prijmeni": "...", "jmeno": "...",
"pojistovna": {"kod": "111", "zkratka": "VZP"},
"vychozi_datum": "2025-01-01",
"aktualni": { ...snímek... },
"historie": [ { ...snímek..., "zmena": "výchozí snímek" } ],
"created_at": ISODate, "updated_at": ISODate
}
```
Snímek (`aktualni` i položky `historie[]`):
`k_datu, kategorie, kategorie_popis, v_zakoupenem_souboru (bool), flag, flag_duvod,
praktik_nazev, praktik_icz, praktik_icp, praktik_od, datum_zahajeni, datum_ukonceni`
- **`praktik_nazev` / `praktik_icz` / `praktik_icp`** = KDO je registrující praktik dle VZP
(u `OK_BUZALKOVA` Buzalková, u `JINY_PRAKTIK` cizí ZZZ).
- **`praktik_od`** (= `datum_zahajeni`) = OD KDY je u tohoto praktika registrován.
- **`flag_duvod`** = čitelný důvod mimo soubor, např. `"jiný praktik: MOJE AMBULANCE A.S.
(IČZ 91777000) od 2014-01-01"`.
### Kategorie (plné podkategorie)
| kategorie | význam | v souboru |
|---|---|---|
| `OK_BUZALKOVA` | praktik 001 = Buzalková (IČP 09305001) | ✅ ano |
| `JINY_PRAKTIK` | praktik 001 je jiné ZZZ | 🚩 ne |
| `BEZ_PRAKTIKA_VZP` | u VZP záznam (jiná odb.), ale praktik 001 ne | 🚩 ne |
| `BEZ_ZAZNAMU_VZP` | VZP nevrátila žádný záznam (jiná pojišťovna / neplatné RČ / zaniklé pojištění) | 🚩 ne |
## Stav k výchozímu snímku 1.1.2025
Populace = 1688 pacientů registrovaných v Medicusu k 1.1.2025 (= RČ v `vzp_registrace_raw` pro to datum).
| kategorie | počet |
|---|---:|
| OK_BUZALKOVA | 1537 |
| JINY_PRAKTIK | 53 |
| BEZ_ZAZNAMU_VZP | 50 |
| BEZ_PRAKTIKA_VZP | 48 |
| **v souboru / mimo** | **1537 / 151** |
## Skript `seed_tracking.py`
Zdroj klasifikace = MySQL `medevio` tabulky `vzp_registrace_raw` + `vzp_registrace_lekari`
(plní je skripty z `Insurance/KdoJeLekar/`).
```
python seed_tracking.py # výchozí snímek k 2025-01-01
python seed_tracking.py 2026-05-02 # aplikuje další snímek (appendne změny do historie)
```
Funkce `apply_snapshot(coll, mysql, k_datu)`:
- nový pacient → vloží dokument s historií `["výchozí snímek"]`
- existující pacient → při změně `kategorie` nebo `praktik_icp` appendne položku do `historie[]`
a aktualizuje `aktualni`; jinak jen `updated_at`
→ tím se **postupně trackují změny stavu** mezi jednotlivými běhy.
### Doplnění jmen (BEZ_ZAZNAMU_VZP)
50 pacientů bez žádného VZP záznamu nemá jméno v MySQL `vzp_registrace_lekari`.
Jména + pojišťovnu jim doplňujeme z Medicus Firebird (tabulka `kar`) — uloženo i pole
`medicus_poj`. Pozn.: kdo má `medicus_poj=111` (VZP), ale je `BEZ_ZAZNAMU_VZP`, je reálně
podezřelý (zaniklé pojištění/úmrtí); 201/205/207/211 jsou prostě jiné pojišťovny.
## Reconciliation workflow — statusy
Zakoupený soubor (příloha smlouvy) = `Inputs/2025-01-01 seznam_pacientu_jmeno_rc.csv`
(OCR ze skenu; `;`-CSV, UTF-8 BOM; sloupce *Příjmení a jméno; Rodné číslo; Strana; Řádek*).
**1712 RČ.** (Opraven 1 OCR překlep RČ: Slavíková Zuzana `8956534235`→`8956039037`.)
Každý dokument nese workflow stav:
| pole | význam |
|---|---|
| `status` (int) | aktuální stav workflow |
| `status_popis` | název stavu |
| `status_datum` | datum platnosti stavu |
| `status_historie[]` | postup stavů (`status, status_popis, status_datum, zapsano`) |
| `ve_smlouve` (bool) | je pacient v zakoupeném souboru 1712? |
| `mimo_vzp_populaci` | true = doplněn ze smlouvy, nebyl ve VZP populaci k 1.1.2025 |
### Stavy
| status | popis | datum | skript |
|---|---|---|---|
| **0** | **Zakoupeno** | 31.12.2024 | `01_zakoupeno.py` |
`01_zakoupeno.py` (idempotentní): nastaví status 0 všem 1712 ze smlouvy.
- 1678 už v Mongo → status 0
- 34 chybělo (odhlášeni u Buzalkové před předáním) → doplněno z `kar`, `mimo_vzp_populaci=true`,
`aktualni.kategorie="ODHLASEN_PRED_PREDANIM"` + `medicus_zruseni`
- 10 v Mongo mimo smlouvu → `ve_smlouve=false` (status 0 nedostali)
Kolekce po kroku 0: **1722 dokumentů** (1712 ve smlouvě + 10 mimo).
### Reconciliation 1712 (k 1.1.2025)
```
1712 zakoupeno (status 0)
34 registrace zrušena před 1.1.2025 (mimo_vzp_populaci)
─────
1678 registrovaní v Medicusu k 1.1.2025
├ 1531 OK Buzalková · 50 jiný praktik · 49 bez záznamu · 48 bez praktika
```
## Další kroky (workflow)
- Definovat status 1, 2, … (např. 1 = ověřeno u VZP / registrovaný u Buzalkové).
- Aplikovat snímky z dalších běhů (29.4. a 2.5.2026 v MySQL) → naplní `historie[]`.
- Doplnit ověření **stavu pojištění** (`vzp_stav_pojisteni`).
- Finální reconciliation Excel + MCP nástroj nad kolekcí.