4.4 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.
VZP B2B služba: RegistracePojistencePZSB2B
Endpoint (produkce)
https://prod.b2b.vzp.cz/B2BProxy/HttpProxy/RegistracePojistencePZSB2B
Autentizace
mTLS — klientský certifikát .pfx od I.CA (První certifikační autorita).
Stejný mechanismus jako u stavPojisteniB2B.
SOAP požadavek
<registracePojistencePZSB2B xmlns="http://xmlns.gemsystem.cz/B2B/RegistracePojistencePZSB2B/1">
<cisloPojistence>7309208104</cisloPojistence>
<kDatu>2026-04-28</kDatu>
<seznamOdbornosti>
<kodOdbornosti>001</kodOdbornosti> <!-- VPL = praktický lékař pro dospělé -->
<kodOdbornosti>002</kodOdbornosti> <!-- gynekologie a porodnictví -->
<kodOdbornosti>014</kodOdbornosti> <!-- stomatologie -->
</seznamOdbornosti>
</registracePojistencePZSB2B>
XML namespace odpovědi: http://xmlns.gemsystem.cz/B2B/RegistracePojistencePZSB2B/1
Struktura odpovědi
Pro každou odbornost vrátí jeden <odbornost> element:
| XML tag | Popis |
|---|---|
ICZ |
IČZ zdravotnického zařízení |
ICP |
IČP lékaře |
nazevICP |
Jméno lékaře |
nazevSZZ |
Název zdravotnického zařízení |
zdravotniPojistovna/kod |
Kód pojišťovny pacienta |
zdravotniPojistovna/zkratka |
Zkratka pojišťovny |
odbornost/kod |
Kód odbornosti (001/002/014) |
odbornost/nazev |
Název odbornosti |
datumRegistrace |
Datum registrace u tohoto lékaře |
datumZahajeni |
Začátek registrace |
datumUkonceni |
Konec registrace (null = stále aktivní) |
stavVyrizeniPozadavku |
Stavový kód odpovědi VZP |
Pokud pacient nemá v dané odbornosti registrovaného lékaře, VZP vrátí prázdný seznam — je třeba uložit placeholder řádek (viz vzor v u:\insurance\02.2 Testík.py, funkce upsert_rows, negativní cesta).
Zdrojový kód pro inspiraci
Vše je hotové v u:\insurance\, stačí přenést a adaptovat:
| Soubor | Co obsahuje |
|---|---|
u:\insurance\02 testík.py |
Hlavní logika: build_envelope, parse_registrace, upsert_rows, batch smyčka přes Medicus KAR |
u:\insurance\02.2 Testík.py |
Vylepšená verze — ukládá i negativní výsledky (pacient bez lékaře) |
u:\insurance\functions.py |
get_medicus_connection(), get_mysql_connection() — připojení k Firebird a MySQL |
u:\insurance\knihovny\vzpb2b_client.py |
Třída VZPB2BClient — obecný mTLS klient pro VZP B2B |
Certifikáty — stav k 28. 4. 2026
| Soubor | Platnost | Stav |
|---|---|---|
u:\insurance\Certificates\MBcert.pfx |
do 22. 1. 2026 | EXPIROVAL |
u:\insurance\10 Tests\MBcert.pfx |
do 22. 1. 2026 | EXPIROVAL |
u:\insurance\Certificates\ICAPublicMBdo16JAN2027.pfx |
do cca. 16. 1. 2027 | Platný, ale neznáme heslo — zjistit! |
u:\ordinaceprojekt\Insurance\Certificates\MBQualifiedCert.pfx |
do 16. 1. 2027 | Platný, ale VZP odmítá (kvalifikovaný certifikát, ne komerční) |
u:\ordinaceprojekt\Insurance\Certificates\picka.pfx |
neznámá | Neznáme heslo |
u:\insurance\Certificates\picka.pfx |
neznámá | Neznáme heslo |
Klíčový problém k vyřešení jako první
ICAPublicMBdo16JAN2027.pfx je pravděpodobně správný certifikát (název naznačuje I.CA, správná CA pro VZP B2B, platný do 2027). Vyzkoušená hesla nepasují:
Vlado7309208104++,vlado7309208104++,7309208104,Vlado9674+,masterkey,""
→ Zjistit heslo pod kterým byl exportován (nebo exportovat znovu z Windows certstore).
Testovací skript
u:\ordinaceprojekt\Insurance\KdoJeLékař\_test_temp.py
Dotáže se na RC 7309208104, odbornosti 001+002+014, vypíše raw XML i parsovaný výsledek bez zápisu do DB.
Aktuálně nastavený na MBQualifiedCert.pfx — po zjištění hesla přepnout na správný certifikát.
Plán dalšího postupu
- Zjistit heslo k
ICAPublicMBdo16JAN2027.pfx(nebo exportovat nový .pfx z Windows certstore) - Ověřit funkčnost — spustit
_test_temp.pys funkčním certifikátem - Vytvořit produkční skript v tomto adresáři — batch zpracování všech pacientů z Medicus KAR
- Navrhnout cílovou MySQL tabulku
vzp_registrace_lekari(nebo přidat sloupce do existujícívzp_registrace)