Files
ordinaceprojekt/Insurance/KdoJeLékař/NOTES.md
T
Vladimir Buzalka 3c3a12d5a6 notebookvb
2026-04-29 06:24:11 +02:00

4.2 KiB

KdoJeLékař — poznámky k vývoji

Cíl

Zjistit pro pacienty z Medicus DB, kdo je jejich registrující praktický lékař (001), gynekolog (002) a stomatolog (014) — dotazem na VZP B2B portál.


Stav k 29. 4. 2026 — hotovo

  • Certifikát , tabulky , produkční skript
  • Připraveno ke spuštění — přepnout TEST_MODE = False

Soubory v tomto adresáři

Soubor Popis
kdojelekar_tydenni.py Produkční skript — batch všech pacientů, ukládá do MySQL
_test_temp.py Testovací skript — dotaz na jedno RC, výpis XML + parsovaný výsledek
_test_no_odb.py Test bez filtru odborností — sloužil k ověření struktury odpovědi

Certifikát

u:\ordinaceprojekt\Insurance\Certificates\picka.pfx / heslo Vlado7309208104+
Ověřeno 29. 4. 2026 (HTTP 200). Stejný certifikát používá i StavPojisteni\zkontroluj_a_odesli_zlomy.py.


VZP B2B služba: RegistracePojistencePZSB2B

Endpoint (produkce)

https://prod.b2b.vzp.cz/B2BProxy/HttpProxy/RegistracePojistencePZSB2B

Autentizace

mTLS — klientský certifikát .pfx, stejný mechanismus jako u stavPojisteniB2B.

Struktura odpovědi

Pro každou odbornost kde má pacient lékaře vrátí jeden <odbornost> element.
Pokud lékař není, VZP element vynechá — skript ukládá placeholder řádek s ma_lekare=0.

XML tag Uloženo jako Popis
ICZ ICZ IČZ zdravotnického zařízení
ICP ICP IČP lékaře
nazevICP nazev_lekare Název pracoviště
nazevSZZ nazev_zzz Jméno lékaře
zdravotniPojistovna/kod poj_kod Kód pojišťovny pacienta
zdravotniPojistovna/zkratka poj_zkratka Zkratka pojišťovny
odbornost/kod kod_odbornosti Kód odbornosti (001/002/014)
datumRegistrace datum_registrace Kdy pacient podepsal registraci
datumZahajeni datum_zahajeni Od kdy registrace platí u VZP
datumUkonceni datum_ukonceni Do kdy (3000-01-01 = bez konce)
stavVyrizeniPozadavku stav_vyrizeni Stavový kód odpovědi VZP

Poznámka k parsování: VZP vrací pro každý nalezený záznam dva <odbornost> elementy — vnější (s ICZ/ICP/jménem) a vnořený subelement (jen kód+název). Parser používá findall(".//seznamOdbornosti/odbornost") který zachytí jen vnější.


MySQL tabulky

vzp_registrace_lekari

Jeden řádek na (rc, k_datu, kod_odbornosti). UNIQUE klíč = (rc, k_datu, kod_odbornosti).
Historie se hromadí — každý týdenní běh přidá nové řádky.

vzp_registrace_raw

Jeden řádek na (rc, k_datu) — celé raw XML odpovědi.
Slouží k případnému přepočtu bez opakování API dotazů. UNIQUE klíč = (rc, k_datu).


Produkční skript kdojelekar_tydenni.py

Konfigurace (začátek souboru)

Proměnná Výchozí Popis
API_PAUSE 2 Sekundy mezi VZP dotazy
TEST_MODE True False = produkční běh
ODBORNOSTI ["001","002","014"] Dotazované odbornosti

Logika

  1. Načte aktivně registrované pacienty z Medicus (přesný select dle SELECTS.md, IČP 09305001)
  2. V produkčním běhu přeskočí pacienty, kteří už mají záznam v vzp_registrace_raw pro dnešní datum — resumovatelný běh
  3. Pro každého pacienta zavolá VZP B2B, uloží raw XML + parsované záznamy
  4. Placeholdery pro odbornosti bez lékaře ukládá s ma_lekare=0

Knihovny

  • Knihovny/vzpb2b_client.py → metody registrace_lekare() a parse_registrace_lekare()
  • Knihovny/medicus_db.pyget_active_registered_patients() (opraveno 29. 4. 2026)
  • Knihovny/mysql_db.pyconnect_mysql()

Plán dalšího postupu

  1. Certifikát — vyřešeno, picka.pfx / Vlado7309208104+
  2. Ověřit funkčnost — hotovo, HTTP 200 s daty
  3. Produkční skript — hotovo, kdojelekar_tydenni.py
  4. MySQL tabulky — hotovo, vzp_registrace_lekari + vzp_registrace_raw
  5. Naplánovat týdenní spouštění (Windows Task Scheduler nebo Claude schedule)
  6. Zvážit detekci změn lékaře (analogie zlomů u StavPojisteni) — zatím není v plánu