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
- Načte aktivně registrované pacienty z Medicus (přesný select dle SELECTS.md, IČP 09305001)
- V produkčním běhu přeskočí pacienty, kteří už mají záznam v
vzp_registrace_rawpro dnešní datum — resumovatelný běh - Pro každého pacienta zavolá VZP B2B, uloží raw XML + parsované záznamy
- Placeholdery pro odbornosti bez lékaře ukládá s
ma_lekare=0
Knihovny
Knihovny/vzpb2b_client.py→ metodyregistrace_lekare()aparse_registrace_lekare()Knihovny/medicus_db.py→get_active_registered_patients()(opraveno 29. 4. 2026)Knihovny/mysql_db.py→connect_mysql()
Plán dalšího postupu
Certifikát— vyřešeno,picka.pfx/Vlado7309208104+Ověřit funkčnost— hotovo, HTTP 200 s datyProdukční skript— hotovo,kdojelekar_tydenni.pyMySQL tabulky— hotovo,vzp_registrace_lekari+vzp_registrace_raw- Naplánovat týdenní spouštění (Windows Task Scheduler nebo Claude schedule)
- Zvážit detekci změn lékaře (analogie zlomů u StavPojisteni) — zatím není v plánu