137 lines
5.4 KiB
Markdown
137 lines
5.4 KiB
Markdown
# 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í.
|