From 5d55f80f9d1fbe1b7f576906d5fb1d0783f4e335 Mon Sep 17 00:00:00 2001 From: Vladimir Buzalka Date: Tue, 12 May 2026 22:01:43 +0200 Subject: [PATCH] notebookvb --- .../SeznamPojistencu/porovnani_davek.xlsx | Bin 14038 -> 96601 bytes .../205 ČPZP/05_klientela.py | 135 --------- .../205 ČPZP/StahniSeznamPojistencuCPZP.py | 258 ++++++++++++++++++ .../205 ČPZP/{ => Testy}/debug_po_hledani.png | Bin .../205 ČPZP/{ => Testy}/debug_pred_hledanim.html | 0 .../205 ČPZP/{ => Testy}/debug_pred_hledanim.png | Bin .../209 ZPŠ/PodejZadostSeznamZPS.py | 237 ++++++++++++++++ .../209 ZPŠ/log_podani.json | 72 +++++ .../209 ZPŠ/stav.json | 1 + .../StahováníZpráv/205 ČPZP/cpzp_cookies.json | 2 +- 10 files changed, 569 insertions(+), 136 deletions(-) delete mode 100644 Insurance/StahováníSeznamuPojištěnců/205 ČPZP/05_klientela.py create mode 100644 Insurance/StahováníSeznamuPojištěnců/205 ČPZP/StahniSeznamPojistencuCPZP.py rename Insurance/StahováníSeznamuPojištěnců/205 ČPZP/{ => Testy}/debug_po_hledani.png (100%) rename Insurance/StahováníSeznamuPojištěnců/205 ČPZP/{ => Testy}/debug_pred_hledanim.html (100%) rename Insurance/StahováníSeznamuPojištěnců/205 ČPZP/{ => Testy}/debug_pred_hledanim.png (100%) create mode 100644 Insurance/StahováníSeznamuPojištěnců/209 ZPŠ/PodejZadostSeznamZPS.py create mode 100644 Insurance/StahováníSeznamuPojištěnců/209 ZPŠ/log_podani.json create mode 100644 Insurance/StahováníSeznamuPojištěnců/209 ZPŠ/stav.json diff --git a/Insurance/SeznamPojistencu/porovnani_davek.xlsx b/Insurance/SeznamPojistencu/porovnani_davek.xlsx index bd992f42c5ed22d9deae4203c206981e4be3c699..440f805094de724ab9d810626f5e71733537a072 100644 GIT binary patch delta 93924 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 GW&aEJWd8pE delta 10696 zcmZ8n1yCK$vfjhNU4pv?x8Qmb+$9j)HE3|>9D*Grc#z-{B)A6GK#)Li3l`kn_3__V z_tv{_sT?vf%0ssJ1ppqv)9;*}j+!-DTv}W%<3x_}e zfcM;6I$Nl_I)8BEvT$~_;`DZO_!{4(+QW?*W@5G5<}u%mt&u#0`!X&r6>*hFctivlY(XQ-30f-GzFehnS@q+A8x-1KcO2%4}3^}MEtJ^ z)$W5Nka7NrQRKLcKRFTrI1&SiBON4Ao`2$!nK~4cFZ&|wD*hB39^ioftK7-}eX#-G zO18T2b3_tlSj{k>I^y7^d*vyDo)!NWZOKmCEE+bi4*4twq|j<3;=zGDuFjj^8>L_h zyH>dksrn#Xd+J)gN~T-nwN-1OvOKI`-F7ha)I>HmEo)k)@C{#GLPpFr*(B&!sR`~3 zGa{xY2};2&q7C=x1|b#KM&^3EbStwPlFkhI)4Rvk47I+X7Ovu!|@bL zH@`O&^_dpfk2TQU)Y;(+DY@PX-g`?2eCl=}+?+x$)z;1Ej$@WBH+Qdxb~_OY6mc`6 z7ikN*qcPVYUmL-Db{eJq${l{$R~34>PvkN!5=;>d`wE1uJ0#4M2gEA5^3!6UxCbfL z4dML0`5X0)ru@xN%J2Db636_W6x;mX@GVOJ(WR$`(Z`!LuJVs+KB@6x#xDt(y16Cq zRm#xMX?+6vxU$c-FZR6QP=)ULD>Lap`8=Zrrr~Mcjkzx>4TTH_ns)*d>i(qp8pt!u z77Xf3muyEajdz#nVv||jDUvw9ug%zwU1pBfwn*9~it<)!1OKjGyshzn!MdeW_y9X) z-qCweYT?X}%@HAmfe91l#&ToGtDGdunVzS6)DpF;yU6zzyioBHgDzyAeHFM&8}{mK zuS+`#j8=+jqQU1DO~+u*#~v!i6MibH%Q3O{1@|PG=j!Vuu=nz=RtsSg+O1}$aW8D< zK_JS#hsCpP7)u6vqm|_m`kJf_rf49kULrmWi&tw8Rl{^}OA>Q-)$m>ofvCDVNG?Be zpL}HR-qp$Z2$cssee5w1UK~F3TeFE*(5|$qZ8iG$nYUHxU$>%n@ za&~oFGz}fa-mR2T3lpjK6(aNEYr{(JMLuH0Q$}Z6(~M0asMH+C`20t1j;EuuyPf_#m*3u+gowhoNOY?$Sjs~r#G>XzZtex`$4(gO)MFk`j?{{QeacB3~gPSW*^{(*UA@m;q(J{%vr

?@d5E|NtZ-Skm;k< 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 12: - m = 1 - r += 1 - - -def uz_stazeno(mesic: int, rok: int) -> bool: - """Vrátí True pokud soubor pro daný měsíc/rok už existuje v DEST_DIR.""" - mm = f"{mesic:02d}" - rr = str(rok)[-2:] - pattern = os.path.join(DEST_DIR, f"* f205{mm}{rr}.*") - return bool(glob.glob(pattern)) - - -def stahni_mesic(page, mesic: int, rok: int) -> bool: - """Stáhne soubor pro jeden měsíc. Vrátí True pokud staženo.""" - today = date.today().strftime("%Y-%m-%d") - - if uz_stazeno(mesic, rok): - print(f" [{mesic:02d}/{rok}] přeskočeno — soubor už existuje") - return False - - # Vyplň formulář - inputs = page.query_selector_all("input[type=text]") - if len(inputs) < 2: - print(f" [{mesic:02d}/{rok}] CHYBA — inputy nenalezeny") - return False - - inputs[0].fill(str(mesic)) - inputs[1].fill(str(rok)) - - page.get_by_text("Hledat", exact=True).click() - page.wait_for_load_state("networkidle") - - dl_selector = "a:has-text('Seznam registrovaných pojištěnců')" - if not page.query_selector(dl_selector): - print(f" [{mesic:02d}/{rok}] CHYBA — download odkaz nenalezen") - return False - - with page.expect_download() as dl_info: - page.click(dl_selector) - download = dl_info.value - - original_name = download.suggested_filename - dest_path = os.path.join(DEST_DIR, f"{today} {original_name}") - download.save_as(dest_path) - print(f" [{mesic:02d}/{rok}] OK — {os.path.basename(dest_path)}") - return True - - -def hlavni() -> None: - if not os.path.exists(COOKIES_FILE): - raise SystemExit(f"Soubor s cookies nenalezen: {COOKIES_FILE}\nNejdřív spusť 01_prihlaseni.py") - - with open(COOKIES_FILE, encoding="utf-8") as f: - cookies = json.load(f) - - os.makedirs(DEST_DIR, exist_ok=True) - - mesice = list(mesice_v_rozsahu(OD_MESIC, OD_ROK, DO_MESIC, DO_ROK)) - print(f"Celkem měsíců: {len(mesice)} ({OD_MESIC:02d}/{OD_ROK} – {DO_MESIC:02d}/{DO_ROK})") - - with sync_playwright() as p: - browser = p.chromium.launch(headless=False) - context = browser.new_context() - context.add_cookies(cookies) - page = context.new_page() - - print("Otevírám stránku klientely...") - page.goto(f"{BASE_URL}/app/prohlizeni-klientely/") - page.wait_for_load_state("networkidle") - - if "frmPrihlasCert" in page.content(): - raise SystemExit("Cookies expirovala — nejdřív spusť 01_prihlaseni.py") - - stazeno = 0 - for mesic, rok in mesice: - if stahni_mesic(page, mesic, rok): - stazeno += 1 - time.sleep(2) - - browser.close() - - print(f"\nHotovo: {stazeno} staženo, {len(mesice) - stazeno} přeskočeno.") - - -if __name__ == "__main__": - hlavni() diff --git a/Insurance/StahováníSeznamuPojištěnců/205 ČPZP/StahniSeznamPojistencuCPZP.py b/Insurance/StahováníSeznamuPojištěnců/205 ČPZP/StahniSeznamPojistencuCPZP.py new file mode 100644 index 0000000..9da589f --- /dev/null +++ b/Insurance/StahováníSeznamuPojištěnců/205 ČPZP/StahniSeznamPojistencuCPZP.py @@ -0,0 +1,258 @@ +""" +Stahování seznamu registrovaných pojištěnců ČPZP — samostatný skript. + +Co dělá: + - Přihlásí se certifikátem na portál ČPZP (nevyžaduje 01_prihlaseni.py) + - Zjistí poslední stažený měsíc (ze stavového souboru 05_stav.json nebo z existujících souborů) + - Zkusí stáhnout právě 1 následující měsíc + - Při úspěchu (staženo nebo soubor už existoval) uloží nový stav + - Uloží jako: YYYY-MM-DD f205MMRR.123 + +Stavový soubor: 05_stav.json vedle tohoto skriptu. + {"mesic": 1, "rok": 2026} — poslední úspěšně zpracovaný měsíc +""" + +import glob +import json +import os +import re +import sys +import time +from datetime import date + +import requests +from bs4 import BeautifulSoup +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.serialization import pkcs7, pkcs12 +from playwright.sync_api import sync_playwright + +sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "..")) +from Knihovny.najdi_dropbox import get_dropbox_root + +PFX_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "Certificates", "MBQualifiedCert.pfx")) +PFX_PASSWORD = b"Vlado7309208104++" + +BASE_URL = "https://portal.cpzp.cz" +DEST_DIR = os.path.join( + get_dropbox_root(), + "Ordinace", "Dokumentace_ke_zpracování", "Zúčtovací zprávy", "SeznamyPojištěnců", +) +STATE_FILE = os.path.join(os.path.dirname(__file__), "05_stav.json") + + +def _parse_js_str(js_expr: str) -> str: + """Převede JS string expression ('a' + String.fromCharCode(13,10) + 'b') na Python string.""" + parts = re.findall(r"'([^']*)'|String\.fromCharCode\(([\d,\s]+)\)", js_expr) + result = [] + for str_part, chars_part in parts: + if str_part is not None and (str_part or not chars_part): + result.append(str_part) + elif chars_part: + result.append("".join(chr(int(c.strip())) for c in chars_part.split(","))) + return "".join(result) + + +def prihlaseni() -> list[dict]: + """Přihlásí se certifikátem a vrátí cookies ve formátu pro Playwright.""" + login_url = f"{BASE_URL}/app/login/" + post_url = f"{BASE_URL}/app/" + + session = requests.Session() + session.headers.update({ + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", + "Origin": BASE_URL, + "Referer": login_url, + }) + + r = session.get(login_url) + r.raise_for_status() + + soup = BeautifulSoup(r.content, "html.parser", from_encoding="utf-8") + form = soup.find("form", {"name": "frmPrihlasCert"}) + if not form: + raise RuntimeError("Formulář frmPrihlasCert nenalezen — portál nedostupný nebo změnil strukturu") + csrf_cert = form.find("input", {"name": "csrfCert"})["value"] + + html = r.content.decode("utf-8") + match = re.search(r"certificateLoginKey\s*:\s*(.+?)(?=,\s*\n|\n\s*maxHeight)", html, re.DOTALL) + if not match: + raise RuntimeError("certificateLoginKey nenalezen v HTML") + challenge = _parse_js_str(match.group(1)) + print(f"Challenge: {challenge[:60]}...") + + with open(PFX_PATH, "rb") as f: + private_key, cert, _ = pkcs12.load_key_and_certificates(f.read(), PFX_PASSWORD) + + pem_podpis = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(challenge.encode("utf-8")) + .add_signer(cert, private_key, hashes.SHA256()) + .sign(serialization.Encoding.PEM, [pkcs7.PKCS7Options.DetachedSignature]) + ) + + r = session.post(post_url, data={ + "csrfCert": csrf_cert, + "sign": pem_podpis.decode("ascii").strip(), + }, headers={ + "Content-Type": "application/x-www-form-urlencoded", + "Referer": login_url, + }) + r.raise_for_status() + + if "frmPrihlasCert" in r.text: + raise RuntimeError("Přihlášení selhalo — server vrátil login stránku znovu") + + print("Přihlášení úspěšné!") + + return [ + { + "name": c.name, + "value": c.value, + "domain": c.domain if c.domain.startswith(".") else "." + c.domain, + "path": c.path or "/", + "expires": int(c.expires) if c.expires else -1, + "secure": bool(c.secure), + "httpOnly": False, + "sameSite": "Lax", + } + for c in session.cookies + ] + + +def dalsi_mesic(mesic: int, rok: int) -> tuple[int, int]: + mesic += 1 + if mesic > 12: + mesic = 1 + rok += 1 + return mesic, rok + + +def uz_stazeno(mesic: int, rok: int) -> bool: + """Vrátí True pokud soubor pro daný měsíc/rok už existuje v DEST_DIR.""" + mm = f"{mesic:02d}" + rr = str(rok)[-2:] + pattern = os.path.join(DEST_DIR, f"* f205{mm}{rr}.*") + return bool(glob.glob(pattern)) + + +def zjisti_posledni_ze_souboru() -> tuple[int, int] | None: + """Prohledá DEST_DIR a zjistí nejnovější stažený měsíc/rok z názvů souborů (f205MMRR).""" + pattern = os.path.join(DEST_DIR, "* f205????.* ") + # Hledáme soubory tvaru '* f205MMRR.*' + soubory = glob.glob(os.path.join(DEST_DIR, "* f205????.* ")) + if not soubory: + # zkus bez mezery na konci + soubory = glob.glob(os.path.join(DEST_DIR, "* f205????.*")) + kandidati = [] + for s in soubory: + nazev = os.path.basename(s) + m = re.search(r"f205(\d{2})(\d{2})\.", nazev) + if m: + mm = int(m.group(1)) + rr = int(m.group(2)) + rok = 2000 + rr + if 1 <= mm <= 12: + kandidati.append((rok, mm)) + if not kandidati: + return None + posledni_rok, posledni_mesic = max(kandidati) + return posledni_mesic, posledni_rok + + +def nacti_stav() -> tuple[int, int] | None: + """Načte poslední zpracovaný měsíc/rok. Vrátí None pokud není žádná informace.""" + if os.path.exists(STATE_FILE): + with open(STATE_FILE, encoding="utf-8") as f: + data = json.load(f) + print(f"Stav ze souboru: poslední zpracovaný {data['mesic']:02d}/{data['rok']}") + return data["mesic"], data["rok"] + ze_souboru = zjisti_posledni_ze_souboru() + if ze_souboru: + m, r = ze_souboru + print(f"Stav zjištěn ze souborů: poslední stažený {m:02d}/{r}") + return m, r + return None + + +def uloz_stav(mesic: int, rok: int) -> None: + with open(STATE_FILE, "w", encoding="utf-8") as f: + json.dump({"mesic": mesic, "rok": rok}, f, ensure_ascii=False) + + +def stahni_mesic(page, mesic: int, rok: int) -> bool: + """Stáhne soubor pro jeden měsíc. Vrátí True pokud staženo.""" + today = date.today().strftime("%Y-%m-%d") + + if uz_stazeno(mesic, rok): + print(f" [{mesic:02d}/{rok}] přeskočeno — soubor už existuje") + return True # považujeme za úspěch pro účely uložení stavu + + # Vyplň formulář + inputs = page.query_selector_all("input[type=text]") + if len(inputs) < 2: + print(f" [{mesic:02d}/{rok}] CHYBA — inputy nenalezeny") + return False + + inputs[0].fill(str(mesic)) + inputs[1].fill(str(rok)) + + page.get_by_text("Hledat", exact=True).click() + page.wait_for_load_state("networkidle") + + dl_selector = "a:has-text('Seznam registrovaných pojištěnců')" + if not page.query_selector(dl_selector): + print(f" [{mesic:02d}/{rok}] CHYBA — download odkaz nenalezen (soubor zřejmě ještě není k dispozici)") + return False + + with page.expect_download() as dl_info: + page.click(dl_selector) + download = dl_info.value + + original_name = download.suggested_filename + dest_path = os.path.join(DEST_DIR, f"{today} {original_name}") + download.save_as(dest_path) + print(f" [{mesic:02d}/{rok}] OK — {os.path.basename(dest_path)}") + return True + + +def hlavni() -> None: + os.makedirs(DEST_DIR, exist_ok=True) + + cookies = prihlaseni() + + posledni = nacti_stav() + if posledni is None: + raise SystemExit( + "Nelze zjistit poslední stažený měsíc.\n" + f"Vytvoř ručně soubor {STATE_FILE} ve tvaru:\n" + ' {"mesic": 12, "rok": 2025}' + ) + + mesic, rok = dalsi_mesic(*posledni) + print(f"Zkouším stáhnout: {mesic:02d}/{rok}") + + with sync_playwright() as p: + browser = p.chromium.launch(headless=False) + context = browser.new_context() + context.add_cookies(cookies) + page = context.new_page() + + print("Otevírám stránku klientely...") + page.goto(f"{BASE_URL}/app/prohlizeni-klientely/") + page.wait_for_load_state("networkidle") + + if "frmPrihlasCert" in page.content(): + raise SystemExit("Portál vyžaduje přihlášení i po předání cookies — zkontroluj certifikát nebo session") + + uspech = stahni_mesic(page, mesic, rok) + browser.close() + + if uspech: + uloz_stav(mesic, rok) + print(f"\nHotovo — stav uložen: {mesic:02d}/{rok}") + else: + print(f"\nNestaženo — stav nebyl aktualizován, příště se zkusí znovu {mesic:02d}/{rok}") + + +if __name__ == "__main__": + hlavni() diff --git a/Insurance/StahováníSeznamuPojištěnců/205 ČPZP/debug_po_hledani.png b/Insurance/StahováníSeznamuPojištěnců/205 ČPZP/Testy/debug_po_hledani.png similarity index 100% rename from Insurance/StahováníSeznamuPojištěnců/205 ČPZP/debug_po_hledani.png rename to Insurance/StahováníSeznamuPojištěnců/205 ČPZP/Testy/debug_po_hledani.png diff --git a/Insurance/StahováníSeznamuPojištěnců/205 ČPZP/debug_pred_hledanim.html b/Insurance/StahováníSeznamuPojištěnců/205 ČPZP/Testy/debug_pred_hledanim.html similarity index 100% rename from Insurance/StahováníSeznamuPojištěnců/205 ČPZP/debug_pred_hledanim.html rename to Insurance/StahováníSeznamuPojištěnců/205 ČPZP/Testy/debug_pred_hledanim.html diff --git a/Insurance/StahováníSeznamuPojištěnců/205 ČPZP/debug_pred_hledanim.png b/Insurance/StahováníSeznamuPojištěnců/205 ČPZP/Testy/debug_pred_hledanim.png similarity index 100% rename from Insurance/StahováníSeznamuPojištěnců/205 ČPZP/debug_pred_hledanim.png rename to Insurance/StahováníSeznamuPojištěnců/205 ČPZP/Testy/debug_pred_hledanim.png diff --git a/Insurance/StahováníSeznamuPojištěnců/209 ZPŠ/PodejZadostSeznamZPS.py b/Insurance/StahováníSeznamuPojištěnců/209 ZPŠ/PodejZadostSeznamZPS.py new file mode 100644 index 0000000..9f8060b --- /dev/null +++ b/Insurance/StahováníSeznamuPojištěnců/209 ZPŠ/PodejZadostSeznamZPS.py @@ -0,0 +1,237 @@ +""" +Podávání žádostí o výpis registrovaných pojištěnců ZPŠ — čistý Python, bez prohlížeče. + +Co dělá: + - Přihlásí se certifikátem na portál ZPŠ (requests + cryptography) + - Sestaví XML žádosti, podepíše certifikátem (PKCS7/SHA-256) + - Odešle POST na JSON API portálu + - Zjistí poslední podaný měsíc ze stavového souboru stav.json + - Podá žádost pro 1 následující měsíc (poslední den daného měsíce) + - Při úspěchu uloží nový stav a referenční číslo do logu + +Stavový soubor: stav.json vedle tohoto skriptu. + {"mesic": 2, "rok": 2025} — poslední úspěšně podaný měsíc + +Log podání: log_podani.json — seznam { datum, ref_cislo, podano_kdy } +""" + +import calendar +import json +import os +import re +import sys +from datetime import date, datetime + +import requests +from cryptography.hazmat.primitives import hashes, serialization +from cryptography.hazmat.primitives.serialization import pkcs7, pkcs12 + +PFX_PATH = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "Certificates", "MBQualifiedCert.pfx")) +PFX_PASSWORD = b"Vlado7309208104++" + +BASE_URL = "https://portal.zpskoda.cz" +SUBMIT_URL = f"{BASE_URL}/json-api/formular-schranky/29-vypis-registrov-pojistencu/ulozit-formular" +ICZ = "25520" + +STATE_FILE = os.path.join(os.path.dirname(__file__), "stav.json") +LOG_FILE = os.path.join(os.path.dirname(__file__), "log_podani.json") + + +# --------------------------------------------------------------------------- +# Přihlášení +# --------------------------------------------------------------------------- + +def prihlaseni() -> requests.Session: + """Přihlásí se certifikátem, vrátí autentizovanou session.""" + challenge_url = f"{BASE_URL}/json-api/prihlaseni/prihlasovaci-zprava" + certlogin_url = f"{BASE_URL}/json-api/prihlaseni/prihlaseni-certifikatem" + + session = requests.Session() + session.headers.update({ + "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36", + "X-Requested-With": "XMLHttpRequest", + "Origin": BASE_URL, + "Referer": BASE_URL + "/", + }) + + r = session.get(f"{BASE_URL}/app/prihlaseni") + r.raise_for_status() + session.cookies.set("pzp_sign", "CERT", domain="portal.zpskoda.cz", path="/") + + r = session.post(challenge_url, json={"login_sign": "CERT"}, + headers={"Content-Type": "application/json; charset=UTF-8"}) + r.raise_for_status() + zprava = r.json()["data"]["zprava"] + print(f"Challenge: {zprava[:60]}...") + + with open(PFX_PATH, "rb") as f: + private_key, cert, _ = pkcs12.load_key_and_certificates(f.read(), PFX_PASSWORD) + + podpis = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(zprava.encode("utf-8")) + .add_signer(cert, private_key, hashes.SHA256()) + .sign(serialization.Encoding.PEM, [pkcs7.PKCS7Options.DetachedSignature]) + .decode("ascii").strip() + ) + + r = session.post(certlogin_url, json={"zprava": zprava, "podpis": podpis}, + headers={"Content-Type": "application/json; charset=UTF-8"}) + r.raise_for_status() + data = r.json()["data"] + + if not data.get("prihlasen"): + raise RuntimeError(f"Přihlášení selhalo: {r.json().get('errMsg', '')}") + + print("Přihlášení úspěšné!") + return session + + +# --------------------------------------------------------------------------- +# Sestavení XML a podpis +# --------------------------------------------------------------------------- + +def build_xml(datum: date) -> str: + datum_str = datum.strftime("%d.%m.%Y") + return ( + f'\r\n' + f'{ICZ}\r\n' + f'{datum_str}\r\n' + f'jmeno\r\n' + f'soubor\r\n' + f'' + ) + + +def sign_xml(xml: str) -> str: + """Podepíše XML certifikátem, vrátí PKCS7 PEM s \\r\\n (stejný formát jako NMSigner).""" + with open(PFX_PATH, "rb") as f: + private_key, cert, _ = pkcs12.load_key_and_certificates(f.read(), PFX_PASSWORD) + + pem = ( + pkcs7.PKCS7SignatureBuilder() + .set_data(xml.encode("utf-8")) + .add_signer(cert, private_key, hashes.SHA256()) + .sign(serialization.Encoding.PEM, [pkcs7.PKCS7Options.DetachedSignature, pkcs7.PKCS7Options.NoCerts]) + .decode("ascii") + ) + # NMSigner normalizuje konce řádků na \r\n + return pem.replace("\r\n", "\n").replace("\n", "\r\n") + + +# --------------------------------------------------------------------------- +# Odeslání žádosti +# --------------------------------------------------------------------------- + +def odeslat_zadost(session: requests.Session, datum: date) -> str | None: + """Odešle podepsanou žádost na portál. Vrátí referenční číslo nebo None.""" + xml = build_xml(datum) + podpis = sign_xml(xml) + + payload = {"schrXml": xml, "schrSign": podpis, "schrFiles": []} + + r = session.post(SUBMIT_URL, json=payload, headers={ + "Content-Type": "application/json; charset=UTF-8", + "X-Requested-With": "XMLHttpRequest", + "Referer": BASE_URL + "/", + }) + r.raise_for_status() + + try: + resp = r.json() + except Exception: + print(f" Odpověď není JSON: {r.text[:300]}") + return None + + # Hledáme referenční číslo v odpovědi + resp_str = json.dumps(resp, ensure_ascii=False) + m = re.search(r'\b(17\d{7}|18\d{7})\b', resp_str) + ref = m.group(1) if m else None + + if resp.get("errMsg") or resp.get("error"): + print(f" Chyba od serveru: {resp.get('errMsg') or resp.get('error')}") + return None + + if ref: + print(f" OK — ref. číslo: {ref}") + else: + print(f" Odpověď (bez ref. čísla): {resp_str[:300]}") + + return ref or ("OK" if r.ok else None) + + +# --------------------------------------------------------------------------- +# Stav a log +# --------------------------------------------------------------------------- + +def dalsi_mesic(mesic: int, rok: int) -> tuple[int, int]: + mesic += 1 + if mesic > 12: + mesic = 1 + rok += 1 + return mesic, rok + + +def posledni_den(mesic: int, rok: int) -> date: + _, last = calendar.monthrange(rok, mesic) + return date(rok, mesic, last) + + +def nacti_stav() -> tuple[int, int] | None: + if os.path.exists(STATE_FILE): + with open(STATE_FILE, encoding="utf-8") as f: + data = json.load(f) + print(f"Stav: poslední podaný {data['mesic']:02d}/{data['rok']}") + return data["mesic"], data["rok"] + return None + + +def uloz_stav(mesic: int, rok: int) -> None: + with open(STATE_FILE, "w", encoding="utf-8") as f: + json.dump({"mesic": mesic, "rok": rok}, f, ensure_ascii=False) + + +def uloz_log(mesic: int, rok: int, ref_cislo: str) -> None: + log = [] + if os.path.exists(LOG_FILE): + with open(LOG_FILE, encoding="utf-8") as f: + log = json.load(f) + log.append({ + "datum": posledni_den(mesic, rok).strftime("%d.%m.%Y"), + "ref_cislo": ref_cislo, + "podano_kdy": datetime.now().strftime("%Y-%m-%d %H:%M:%S"), + }) + with open(LOG_FILE, "w", encoding="utf-8") as f: + json.dump(log, f, indent=2, ensure_ascii=False) + + +# --------------------------------------------------------------------------- +# Hlavní funkce +# --------------------------------------------------------------------------- + +def hlavni() -> None: + posledni = nacti_stav() + if posledni is None: + raise SystemExit( + "Nelze zjistit poslední podaný měsíc.\n" + f"Vytvoř ručně soubor {STATE_FILE} ve tvaru:\n" + ' {"mesic": 2, "rok": 2025}' + ) + + mesic, rok = dalsi_mesic(*posledni) + datum = posledni_den(mesic, rok) + print(f"Podávám žádost pro: {datum.strftime('%d.%m.%Y')}") + + session = prihlaseni() + ref = odeslat_zadost(session, datum) + + if ref: + uloz_stav(mesic, rok) + uloz_log(mesic, rok, ref) + print(f"\nHotovo — stav uložen: {mesic:02d}/{rok}, ref: {ref}") + else: + print(f"\nPodání selhalo — stav nebyl aktualizován, příště se zkusí znovu {datum.strftime('%d.%m.%Y')}") + + +if __name__ == "__main__": + hlavni() diff --git a/Insurance/StahováníSeznamuPojištěnců/209 ZPŠ/log_podani.json b/Insurance/StahováníSeznamuPojištěnců/209 ZPŠ/log_podani.json new file mode 100644 index 0000000..f749a36 --- /dev/null +++ b/Insurance/StahováníSeznamuPojištěnců/209 ZPŠ/log_podani.json @@ -0,0 +1,72 @@ +[ + { + "datum": "31.03.2025", + "ref_cislo": "178201286", + "podano_kdy": "2026-05-12 21:57:24" + }, + { + "datum": "30.04.2025", + "ref_cislo": "178201295", + "podano_kdy": "2026-05-12 21:58:18" + }, + { + "datum": "31.05.2025", + "ref_cislo": "178201296", + "podano_kdy": "2026-05-12 21:58:24" + }, + { + "datum": "30.06.2025", + "ref_cislo": "178201297", + "podano_kdy": "2026-05-12 21:58:31" + }, + { + "datum": "31.07.2025", + "ref_cislo": "178201298", + "podano_kdy": "2026-05-12 21:58:38" + }, + { + "datum": "31.08.2025", + "ref_cislo": "178201299", + "podano_kdy": "2026-05-12 21:58:45" + }, + { + "datum": "30.09.2025", + "ref_cislo": "178201300", + "podano_kdy": "2026-05-12 21:58:50" + }, + { + "datum": "31.10.2025", + "ref_cislo": "178201301", + "podano_kdy": "2026-05-12 21:58:56" + }, + { + "datum": "30.11.2025", + "ref_cislo": "178201302", + "podano_kdy": "2026-05-12 21:59:02" + }, + { + "datum": "31.12.2025", + "ref_cislo": "178201303", + "podano_kdy": "2026-05-12 21:59:07" + }, + { + "datum": "31.01.2026", + "ref_cislo": "178201310", + "podano_kdy": "2026-05-12 21:59:13" + }, + { + "datum": "28.02.2026", + "ref_cislo": "178201313", + "podano_kdy": "2026-05-12 21:59:19" + }, + { + "datum": "31.03.2026", + "ref_cislo": "178201314", + "podano_kdy": "2026-05-12 21:59:24" + }, + { + "datum": "30.04.2026", + "ref_cislo": "178201321", + "podano_kdy": "2026-05-12 21:59:31" + } +] \ No newline at end of file diff --git a/Insurance/StahováníSeznamuPojištěnců/209 ZPŠ/stav.json b/Insurance/StahováníSeznamuPojištěnců/209 ZPŠ/stav.json new file mode 100644 index 0000000..22c5bc2 --- /dev/null +++ b/Insurance/StahováníSeznamuPojištěnců/209 ZPŠ/stav.json @@ -0,0 +1 @@ +{"mesic": 4, "rok": 2026} \ No newline at end of file diff --git a/Insurance/StahováníZpráv/205 ČPZP/cpzp_cookies.json b/Insurance/StahováníZpráv/205 ČPZP/cpzp_cookies.json index ae7a292..b73359d 100644 --- a/Insurance/StahováníZpráv/205 ČPZP/cpzp_cookies.json +++ b/Insurance/StahováníZpráv/205 ČPZP/cpzp_cookies.json @@ -1,7 +1,7 @@ [ { "name": "PHPSESSID", - "value": "jue2dfk7t4k34du7ngg4j706q1", + "value": "f9tijs1603id6cj4msbrfm0hv5", "domain": ".portal.cpzp.cz", "path": "/", "expires": -1,