# ZPŠ — Podávání žádostí o výpis registrovaných pojištěnců ## Co skript dělá `PodejZadostSeznamZPS.py` podává žádost o výpis registrovaných pojištěnců ZPŠ za jeden měsíc (poslední den daného měsíce). Bez prohlížeče, bez NMSigneru — čistý Python. ## Flow 1. **Přihlášení** — stejný certifikátový login jako ostatní ZPŠ skripty (`01_prihlaseni.py`): - GET `/app/prihlaseni` → session cookie - POST `/json-api/prihlaseni/prihlasovaci-zprava` → challenge (`zprava`) - Podpis challenge certifikátem (PKCS7/SHA-256, **s** certifikátem) - POST `/json-api/prihlaseni/prihlaseni-certifikatem` → autentizovaná session 2. **Sestavení XML žádosti**: ```xml 25520 DD.MM.YYYY jmeno soubor ``` Konce řádků: `\r\n` (NMSigner normalizace) 3. **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 4. **Odeslání**: - POST `https://portal.zpskoda.cz/json-api/formular-schranky/29-vypis-registrov-pojistencu/ulozit-formular` - Body: `{"schrXml": "...", "schrSign": "-----BEGIN PKCS7-----...", "schrFiles": []}` - Odpověď obsahuje referenční číslo podání ## 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 — přihlášení + 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ČZ: 09305000, 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).