Files
ordinaceprojekt/Insurance/FinalReconcilliation/NOTES.md
T
Vladimir Buzalka 9b6f89f437 notebookvb
2026-06-16 10:21:19 +02:00

5.4 KiB
Raw Blame History

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

{
  "_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 89565342358956039037.)

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í.