notebookvb
This commit is contained in:
@@ -0,0 +1,62 @@
|
|||||||
|
# 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
|
||||||
|
<SchrankaZadost NazevSchranky="VypisPojKap" NazevFiltru="ZZ_VYP_REG">
|
||||||
|
<PolozkaFiltru Nazev="icz">25520</PolozkaFiltru>
|
||||||
|
<PolozkaFiltru Nazev="datum">DD.MM.YYYY</PolozkaFiltru>
|
||||||
|
<PolozkaFiltru Nazev="razeni">jmeno</PolozkaFiltru>
|
||||||
|
<PolozkaFiltru Nazev="typ">soubor</PolozkaFiltru>
|
||||||
|
</SchrankaZadost>
|
||||||
|
```
|
||||||
|
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).
|
||||||
Reference in New Issue
Block a user