""" Stáhni odeslaná podání z VZP Point (sekce „Odeslaná podání"). Načte Bearer token ze stránky Desk/FormDashboard, pak volá REST API /api/desk/form. Stahuje podání s přiloženým výsledkovým souborem — přeskočí ty, co už existují. Použití: python stahovanipodani.py [--dry-run] """ import json import os import re import sys import time import winreg try: import requests as req_lib except ImportError: print("Chybí requests: pip install requests") sys.exit(1) sys.path.insert(0, os.path.join(os.path.dirname(__file__), "..", "..", "..")) from Knihovny.najdi_dropbox import get_dropbox_root DASHBOARD_URL = "https://point.vzp.cz/Desk/FormDashboard" API_BASE = "https://point.vzp.cz/api/desk/form" PAGE_SIZE = 50 CHROME_PROFILE = os.path.abspath(os.path.join(os.path.dirname(__file__), "chrome_profile")) COOKIES_FILE = os.path.abspath(os.path.join(os.path.dirname(__file__), "vzp_cookies.json")) DOWNLOAD_DIR = os.path.join( get_dropbox_root(), "Ordinace", "Dokumentace_ke_zpracování", "Zúčtovací zprávy", "111 VZP Podání" ) DRY_RUN = False def load_cookies(context) -> int: if not os.path.exists(COOKIES_FILE): return 0 try: with open(COOKIES_FILE, "r", encoding="utf-8") as f: cookies = json.load(f) context.add_cookies(cookies) return len(cookies) except Exception: return 0 def save_cookies(context) -> int: try: all_cookies = context.cookies() vzp = [c for c in all_cookies if "vzp.cz" in c.get("domain", "")] with open(COOKIES_FILE, "w", encoding="utf-8") as f: json.dump(vzp, f, indent=2, ensure_ascii=False) return len(vzp) except Exception: return 0 CERT_ISSUER_CN = "I.CA Public CA/RSA 06/2022" def _set_chrome_cert_policy() -> None: policy = json.dumps({ "pattern": "https://[*.]vzp.cz", "filter": {"ISSUER": {"CN": CERT_ISSUER_CN}}, }) key_path = r"SOFTWARE\Policies\Google\Chrome\AutoSelectCertificateForUrls" try: key = winreg.CreateKey(winreg.HKEY_CURRENT_USER, key_path) winreg.SetValueEx(key, "1", 0, winreg.REG_SZ, policy) winreg.CloseKey(key) print(f" Chrome politika nastavena (issuer: {CERT_ISSUER_CN})") except Exception as e: print(f" Varování: nelze nastavit Chrome politiku: {e}") def extract_bearer_token(page) -> str | None: """Extrahuje Bearer token z inline