# 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 ```xml 7309208104 2026-04-28 001 002 014 ``` XML namespace odpovědi: `http://xmlns.gemsystem.cz/B2B/RegistracePojistencePZSB2B/1` ### Struktura odpovědi Pro každou odbornost vrátí jeden `` 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`)