# ZPŠ — Podávání žádostí o výpis registrovaných pojištěnců ## Co skript dělá `PodejZadostSeznamZPS.py` provede v jednom spuštění tři kroky: 1. **Přihlásí se** certifikátem na portál ZPŠ (čistý Python, bez NMSigneru) — uloží cookies do sdíleného `StahováníZpráv/209 ZPŠ/zps_cookies.json` 2. **Stáhne nové výpisy pojištěnců** ze schránky `schranka-vypis-pojistencu-v-kapitaci` — stahuje jen `.001` soubory, jejichž obsah začíná `H09305001` — ukládá do `U:\Dropbox\Ordinace\Dokumentace_ke_zpracování\Zúčtovací zprávy\SeznamyPojištěnců\` — zastaví se při první již stažené zprávě — po stahování se **znovu přihlásí** (Playwright invaliduje předchozí requests session) 3. **Podá žádost** o výpis pro 1 následující měsíc (poslední den daného měsíce) ## Flow přihlášení 1. GET `/app/prihlaseni` → session cookie 2. POST `/json-api/prihlaseni/prihlasovaci-zprava` → challenge (`zprava`) 3. Podpis challenge certifikátem (PKCS7/SHA-256, **s** certifikátem) 4. POST `/json-api/prihlaseni/prihlaseni-certifikatem` → autentizovaná session ## Sestavení XML žádosti ```xml 25520 DD.MM.YYYY jmeno soubor ``` Konce řádků: `\r\n` (NMSigner normalizace) ## Podpis XML PKCS7/SHA-256, **bez** certifikátu v podpisu (`NoCerts`): - Server při odesílání formuláře zná certifikát z registrace - Certifikát v podpisu server odmítá ("Podepsaná data obsahují certifikát") - Rozdíl oproti přihlášení: login certifikát potřebuje, formulář ne ## Odeslání POST `https://portal.zpskoda.cz/json-api/formular-schranky/29-vypis-registrov-pojistencu/ulozit-formular` Body: `{"schrXml": "...", "schrSign": "-----BEGIN PKCS7-----...", "schrFiles": []}` ## Klíčový objev Portál používá **NMSigner** (Chrome extension + lokální app) pro podepisování formulářů. Přišli jsme na to odposlechem síťového provozu v DevTools — stačil jeden XHR request. NMSigner dělá přesně to co my: PKCS7 DetachedSignature bez certifikátu. Výsledek: žádný prohlížeč ani NMSigner není potřeba. ## Soubory | Soubor | Popis | |--------|-------| | `PodejZadostSeznamZPS.py` | Hlavní skript — stažení výpisů + podání žádosti | | `stav.json` | Poslední úspěšně podaný měsíc `{"mesic": 4, "rok": 2026}` | | `log_podani.json` | Historie podání s referenčními čísly | ## Parametry - **IČZ**: 25520 (IČP: 09305001, MUDr. Michaela Buzalková) - **Certifikát**: `Insurance/Certificates/MBQualifiedCert.pfx` - **Typ výstupu**: `soubor` (Soubor dle datového rozhraní) - **Řazení**: `jmeno` (příjmení a jména) ## Stav Podáno: 01/2025 – 04/2026 (16 měsíců). Příští spuštění podá 05/2026 (jakmile bude k dispozici).