Files
ordinaceprojekt/Insurance/KdoJeLékař/NOTES.md
T
2026-04-28 16:53:36 +02:00

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

  1. Zjistit heslo k ICAPublicMBdo16JAN2027.pfx (nebo exportovat nový .pfx z Windows certstore)
  2. Ověřit funkčnost — spustit _test_temp.py s funkčním certifikátem
  3. Vytvořit produkční skript v tomto adresáři — batch zpracování všech pacientů z Medicus KAR
  4. Navrhnout cílovou MySQL tabulku vzp_registrace_lekari (nebo přidat sloupce do existující vzp_registrace)