Files
ordinaceprojekt/Insurance/StahováníSeznamuPojištěnců/111 VZP/NOTES.md
T
Vladimir Buzalka 19036b58cc notebookvb
2026-06-18 05:32:36 +02:00

4.2 KiB

VZP (111) — Stahování seznamu registrovaných pojištěnců

Co skript dělá

StahniSeznamPojistencuVZP.py (Playwright + Chrome):

  1. Přihlásí se certifikátem na VZP Point (auto-výběr cert z Windows store)
  2. Projde ODESLANÁ PODÁNÍ (řazeno od nejnovějšího) a najde podání typu „Seznam registrovaných pojištěnců"
  3. Stahuje přiložené datové dávky F111MMRR.nnn (CP852) do …\Zúčtovací zprávy\SeznamyPojištěnců\ od nejnovějšího a zastaví se na první už stažené dávce (inkrementálně — starší jsou stažené, nejde hluboko do minulosti).
  4. Podá novou žádost o výpis (datové rozhraní) za nejnovější dostupné období (zjištěno z configu) — výsledek dorazí do ODESLANÝCH PODÁNÍ a stáhne se příště.

Dávky pak zpracovává Insurance/SeznamPojistencu/01_parse_seznam_dg_tool.py.

Platforma — ODLIŠNÁ

VZP běží na point.vzp.cz (VZP Point), NE portalzp.cz ani eforms. Login je certifikátem přes Chrome — politika AutoSelectCertificateForUrls vybere cert automaticky (issuer I.CA Public CA/RSA 06/2022), bez NMSigneru. Plně Playwright.

Jak se seznam získává

VZP seznam není samočinná zpráva — musí se požádat podáním:

  • NOVÉ PODÁNÍ → „Seznam registrovaných pojištěnců ke dni"
  • Formát výstupu = „Datové rozhraní" (NE „PDF"!) + období (měsíc/rok)
  • VZP požadavek zpracuje (~minuty) a výsledek = datová dávka III-1.1.2, stažitelná z detailu zpracovaného podání (sloupec „Přiložený soubor").

Pozn.: pokud se zvolí formát „PDF", výsledkem je PDF (p…pdf), které parser neumí. Vždy volit „Datové rozhraní".

Formát dávky (III-1.1.2)

Soubor F111MMRR.nnn, pevná šířka, CP852. Hlavička typ H: H09305001 (IČP) + počet + RRMMDD. Věty typu I: příjmení, jméno, číslo poj., datum registrace, kód pojišťovny. (Detaily v SeznamPojistencu/01_parse_seznam_dg_tool.py.)

Stažení dávky z detailu podání

Detail /Desk/Form/Detail/{id} → záložka „Výsledky zpracování" → odkaz s názvem F111MMRR.nnn (href="#", JS handler). Stahuje se Playwright klikem (expect_download + dispatch_event('click')) — žádná přímá URL.

Podání žádosti (REST API — bez podpisu!)

Podání jde čistě přes REST API Pointu (Bearer token z inline "bearerToken" na dashboardu), žádný elektronický podpis — autentizace stačí přes session + token. Tři kroky:

  1. Config (zjištění období): GET /api/desk/draft/form65/configperiodLimits {from, until} + defaultModel.period {month, year}. Podává se za nejnovější dostupné období (until / defaultModel), ne za kalendářní měsíc (ten portál odmítne — HTTP 400 při publish).
  2. Vytvoř koncept: POST /api/desk/draft/form65/{partnerId} body {"outputFormat":"Text","period":{"month":M,"year":Y}}{"draftId":"...","state":"Verified"}
    • outputFormat:"Text" = Datové rozhraní (NE "Pdf"!)
    • partnerId = 3197807 (subjekt MUDr. Buzalková)
  3. Publikuj: POST /api/desk/draft/form65/{draftId}/publish (prázdné tělo) → {"formId": <id odeslaného podání>}

Token se čte stejně jako v StahováníZpráv/111 VZP/stahovanipodani.py.

Jak bylo zjištěno

Formulář Form65 je React SPA s custom comboboxem, který nešel proklikat headless ani naslepo. Odchyceno tak, že uživatel podal jedno podání ručně a do stránky byl vložen háček ukládající fetch/XHR do localStorage (přežije přesměrování) — z toho se vyčetly přesné endpointy a payloady.

Soubory

Soubor Popis
StahniSeznamPojistencuVZP.py Login + stažení datových dávek z podání

Parametry

  • IČP: 09305001, IČZ: 09305000 (MUDr. Michaela Buzalková)
  • Login: certifikát ve Windows store (sdílený profil StahováníZpráv/111 VZP/chrome_profile)

Stav

Hotovo a otestováno (17.06.2026): login ✓, backfill 23 dávek F111….0NN (všechny H09305001), inkrementální běh zastaví na první už stažené dávce ✓, podání žádosti přes REST API ✓ (auto období z configu = 04/2026, create+publish → formId). Download i podání plně automatické.