notebookvb

This commit is contained in:
Vladimir Buzalka
2026-05-04 21:26:44 +02:00
parent 417cf86b2d
commit ffb3db1e07
12 changed files with 1143 additions and 16 deletions
@@ -0,0 +1,135 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys as _sys
_sys.stdout.reconfigure(encoding="utf-8", errors="replace")
_sys.stderr.reconfigure(encoding="utf-8", errors="replace")
"""
07_doplnit_zahajeni.py
======================
Pro nové pacienty (první dávka po 31.12.2024) kteří jsou již ukončeni
a nemají záznam v vzp_registrace_lekari pro naše ICP=09305001,
dotáže se VZP k datu jejich první dávky — tehdy tam ještě byli
a odpověď obsahuje datumZahajeni registrace u nás.
Výsledek uloží do vzp_registrace_lekari (stejná tabulka jako kdojelekar).
"""
import sys
import time
from datetime import date
from pathlib import Path
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "Knihovny"))
from mysql_db import connect_mysql
from vzpb2b_client import VZPB2BClient
PFX_PATH = str(Path(__file__).resolve().parents[1] / "Certificates" / "picka.pfx")
PFX_PASSWORD = "Vlado7309208104+"
ICZ = "09305000"
NASA_ICP = "09305001"
API_PAUSE = 2
PRVNI_DAVKA = date(2024, 12, 1)
# ── Načtení kandidátů ─────────────────────────────────────────────────────────
conn = connect_mysql()
cur = conn.cursor()
# Noví pacienti (prvni_davka > 31.12.2024) bez záznamu v registrace pro naše ICP
cur.execute("""
SELECT
s.cip,
MIN(s.prijmeni) AS prijmeni,
MIN(s.jmeno) AS jmeno,
MIN(DATE(CONCAT(s.davka_rok,'-',LPAD(s.davka_mesic,2,'0'),'-',LPAD(s.davka_den,2,'0')))) AS prvni_davka
FROM seznam_pojistencu_davky s
WHERE s.pojistovna = '111'
GROUP BY s.cip
HAVING prvni_davka > %s
""", (PRVNI_DAVKA,))
vsichni_novi = {r[0]: (r[1], r[2], r[3]) for r in cur.fetchall()}
# Kteří z nich už mají záznam v registrace pro naše ICP
cur.execute("""
SELECT DISTINCT rc FROM vzp_registrace_lekari
WHERE ICP = %s AND kod_odbornosti = '001' AND ma_lekare = 1
""", (NASA_ICP,))
uz_maji = {r[0] for r in cur.fetchall()}
kandidati = {
cip: info
for cip, info in vsichni_novi.items()
if cip not in uz_maji
}
print(f"Noví pacienti celkem: {len(vsichni_novi)}")
print(f"Již mají datum zahájení: {len(uz_maji & vsichni_novi.keys())}")
print(f"Ke doplnění: {len(kandidati)}")
if not kandidati:
print("Vše je kompletní.")
cur.close(); conn.close(); sys.exit(0)
vzp = VZPB2BClient("prod", PFX_PATH, PFX_PASSWORD, icz=ICZ)
print()
sirka = max(len(f"{p} {j}") for p, j, _ in kandidati.values()) + 2
for i, (cip, (prijmeni, jmeno, prvni_davka)) in enumerate(kandidati.items(), 1):
print(f"[{i:>2}/{len(kandidati)}] {prijmeni+' '+jmeno:<{sirka}} ({cip}) k {prvni_davka}", end=" ", flush=True)
try:
xml = vzp.registrace_lekare(cip, prvni_davka.isoformat(), odbornosti=["001"])
time.sleep(API_PAUSE)
zaznamy = vzp.parse_registrace_lekare(xml)
except Exception as e:
print(f"CHYBA: {e}")
continue
nas_zaznam = next(
(z for z in zaznamy
if z.get("ma_lekare") and z.get("ICP") == NASA_ICP and z.get("kod_odbornosti") == "001"),
None
)
if not nas_zaznam:
print("→ nenalezen k tomuto datu")
continue
def to_date(s):
try:
return date.fromisoformat(s) if s else None
except ValueError:
return None
poj_el = nas_zaznam
cur.execute("""
INSERT INTO vzp_registrace_lekari
(rc, prijmeni, jmeno, k_datu, kod_odbornosti, ma_lekare,
ICZ, ICP, nazev_lekare, nazev_zzz,
poj_kod, poj_zkratka,
datum_registrace, datum_zahajeni, datum_ukonceni, stav_vyrizeni)
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)
ON DUPLICATE KEY UPDATE
datum_zahajeni = VALUES(datum_zahajeni),
datum_ukonceni = VALUES(datum_ukonceni),
nazev_lekare = VALUES(nazev_lekare),
nazev_zzz = VALUES(nazev_zzz)
""", (
cip, prijmeni, jmeno, prvni_davka, "001", 1,
nas_zaznam.get("ICZ"), nas_zaznam.get("ICP"),
nas_zaznam.get("nazev_lekare"), nas_zaznam.get("nazev_zzz"),
nas_zaznam.get("poj_kod"), nas_zaznam.get("poj_zkratka"),
to_date(nas_zaznam.get("datum_registrace")),
to_date(nas_zaznam.get("datum_zahajeni")),
to_date(nas_zaznam.get("datum_ukonceni")),
nas_zaznam.get("stav_vyrizeni"),
))
dz = nas_zaznam.get("datum_zahajeni") or "?"
du = nas_zaznam.get("datum_ukonceni") or "?"
print(f"→ zahájení: {dz} ukončení: {du}")
cur.close()
conn.close()
print(f"\nHotovo.")
+69 -11
View File
@@ -92,8 +92,8 @@ cur.execute("""
cip,
MIN(prijmeni) AS prijmeni,
MIN(jmeno) AS jmeno,
MIN(DATE(CONCAT(davka_rok,'-',LPAD(davka_mesic,2,'0'),'-01'))) AS prvni_davka,
MAX(DATE(CONCAT(davka_rok,'-',LPAD(davka_mesic,2,'0'),'-01'))) AS posledni_davka,
MIN(DATE(CONCAT(davka_rok,'-',LPAD(davka_mesic,2,'0'),'-',LPAD(davka_den,2,'0')))) AS prvni_davka,
MAX(DATE(CONCAT(davka_rok,'-',LPAD(davka_mesic,2,'0'),'-',LPAD(davka_den,2,'0')))) AS posledni_davka,
COUNT(DISTINCT CONCAT(davka_rok,davka_mesic)) AS pocet_davek
FROM seznam_pojistencu_davky
WHERE pojistovna='111'
@@ -105,7 +105,7 @@ seznam = {r[0]: {"prijmeni": r[1], "jmeno": r[2],
# Nejnovější datum dávky (pro sloupec "v aktuální dávce")
cur.execute("""
SELECT MAX(DATE(CONCAT(davka_rok,'-',LPAD(davka_mesic,2,'0'),'-01')))
SELECT MAX(DATE(CONCAT(davka_rok,'-',LPAD(davka_mesic,2,'0'),'-',LPAD(davka_den,2,'0'))))
FROM seznam_pojistencu_davky WHERE pojistovna='111'
""")
nejnovejsi_davka = cur.fetchone()[0]
@@ -113,8 +113,8 @@ nejnovejsi_davka = cur.fetchone()[0]
cur.execute("""
SELECT DISTINCT cip FROM seznam_pojistencu_davky
WHERE pojistovna='111'
AND CONCAT(davka_rok,LPAD(davka_mesic,2,'0')) = (
SELECT MAX(CONCAT(davka_rok,LPAD(davka_mesic,2,'0')))
AND CONCAT(davka_rok,LPAD(davka_mesic,2,'0'),LPAD(davka_den,2,'0')) = (
SELECT MAX(CONCAT(davka_rok,LPAD(davka_mesic,2,'0'),LPAD(davka_den,2,'0')))
FROM seznam_pojistencu_davky WHERE pojistovna='111'
)
""")
@@ -214,15 +214,25 @@ for cip, s in seznam.items():
"datum_prehl": datum_prehl,
})
DATUM_REGISTRACE_OD = date(2025, 1, 1)
radky.sort(key=lambda r: (r["prijmeni"], r["jmeno"]))
aktivni = [r for r in radky if r["stav"] == "aktivní"]
ukonceni = sorted([r for r in radky if r["stav"] == "ukončen"],
key=lambda r: r["ukonceni"] or date.min)
aktivni = [r for r in radky if r["stav"] == "aktivní"]
ukonceni = sorted([r for r in radky if r["stav"] == "ukončen"],
key=lambda r: r["ukonceni"] or date.min)
nenalezeni = [r for r in radky if r["stav"] == "nenalezen"]
# Noví: datum_zahajeni registrace u nás >= 01.01.2025, řazeno chronologicky
novi = sorted(
[r for r in radky
if registrace.get(r["cip"], {}).get("zahajeni") is not None
and registrace[r["cip"]]["zahajeni"] >= DATUM_REGISTRACE_OD],
key=lambda r: (registrace[r["cip"]]["zahajeni"], r["prijmeni"], r["jmeno"])
)
print(f" Aktivní: {len(aktivni)}")
print(f" Ukončení: {len(ukonceni)}")
print(f" Noví: {len(novi)}")
print(f" Nenalezeni: {len(nenalezeni)}")
# ── Excel ─────────────────────────────────────────────────────────────────────
@@ -270,6 +280,48 @@ def zapsat_list(ws, nadpis, bg_title, seznam_radku, stav_bg):
cell(ws, ri, 11, r.get("novy_lekar", ""), bg)
cell(ws, ri, 12, r.get("datum_prehl"), bg, align="center", fmt=DATE_FMT)
C_REGISTRACE = "DAEEF3" # světle modrá
C_TITLE_REG = "17375E"
SLOUPCE_REG = ["Příjmení", "Jméno", "ČIP", "Zahájení\nregistrace",
"Ukončení\nregistrace", "Počet\ndávek", "V aktuální\ndávce",
"Stav", "Po ukončení", "Nový lékař / poznámka", "Datum\npřehlášení"]
WIDTHS_REG = [24, 18, 13, 16, 14, 9, 10, 10, 13, 40, 13]
PO_CLR_REG = {"prehlasil": "375623", "nenalezen": "C55A11",
"bez_lekare": "7F6000", "": "000000"}
PO_TXT_REG = {"prehlasil": "přehlásil se", "nenalezen": "nenalezen",
"bez_lekare": "bez lékaře", "": ""}
def zapsat_registrace(ws, nadpis, seznam_radku):
ncols = len(SLOUPCE_REG)
ws.freeze_panes = "A3"
title_row(ws, 1, nadpis, ncols, C_TITLE_REG)
ws.row_dimensions[2].height = 30
for col, h in enumerate(SLOUPCE_REG, 1):
hdr(ws.cell(2, col), h, bg=C_TITLE_REG)
autofit(ws, WIDTHS_REG)
for ri, r in enumerate(seznam_radku, 3):
bg = C_REGISTRACE if ri % 2 == 0 else None
cell(ws, ri, 1, r["prijmeni"], bg)
cell(ws, ri, 2, r["jmeno"], bg)
cell(ws, ri, 3, r["cip"], bg, align="center")
zahajeni = registrace.get(r["cip"], {}).get("zahajeni")
cell(ws, ri, 4, zahajeni, bg, align="center", fmt=DATE_FMT)
cell(ws, ri, 5, r["ukonceni"], bg, align="center", fmt=DATE_FMT)
cell(ws, ri, 6, r["pocet_davek"],bg, align="right")
akt_txt = "" if r["v_aktualni"] else ""
akt_clr = "375623" if r["v_aktualni"] else "C55A11"
cell(ws, ri, 7, akt_txt, bg, bold=True, align="center", color=akt_clr)
cell(ws, ri, 8, r["stav"], bg, align="center", bold=True,
color=("375623" if r["stav"] == "aktivní" else "C55A11"))
po = r.get("po_ukonceni", "")
cell(ws, ri, 9, PO_TXT_REG.get(po, po), bg, align="center", bold=bool(po),
color=PO_CLR_REG.get(po, "000000"))
cell(ws, ri, 10, r.get("novy_lekar", ""), bg)
cell(ws, ri, 11, r.get("datum_prehl"), bg, align="center", fmt=DATE_FMT)
wb = openpyxl.Workbook()
# List 1 Všichni
@@ -292,10 +344,16 @@ zapsat_list(ws3,
f"Ukončená registrace — celkem: {len(ukonceni)}",
C_TITLE_UKO, ukonceni, C_UKONCEN)
# List 4 Nenalezeni
# List 4 Registrace (noví po 31.12.2024)
ws4 = wb.create_sheet("Registrace")
zapsat_registrace(ws4,
f"Noví pojištěnci — datum zahájení registrace od 1.1.2025 — celkem: {len(novi)}",
novi)
# List 5 Nenalezeni
if nenalezeni:
ws4 = wb.create_sheet("Nenalezeni")
zapsat_list(ws4,
ws5 = wb.create_sheet("Nenalezeni")
zapsat_list(ws5,
f"Bez dostatečných dat — celkem: {len(nenalezeni)}",
C_TITLE_NEN, nenalezeni, C_NENALEZEN)
Binary file not shown.
@@ -0,0 +1,135 @@
"""
Stahování seznamu registrovaných pojištěnců ČPZP.
Použij po 01_prihlaseni.py (ten uloží cpzp_cookies.json).
Co dělá:
- Načte cookies z cpzp_cookies.json
- Otevře prohlížeč jednou, projde všechny zadané měsíce
- Pro každý měsíc vyplní formulář, klikne Hledat, stáhne soubor
- Přeskočí měsíce kde soubor v cílovém adresáři už existuje
- Uloží jako: YYYY-MM-DD f205MMRR.123
NASTAVENÍ:
OD_MESIC / OD_ROK — první měsíc rozsahu
DO_MESIC / DO_ROK — poslední měsíc rozsahu (včetně)
"""
import glob
import json
import os
import sys
import time
from datetime import date
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
OD_MESIC = 12
OD_ROK = 2024
DO_MESIC = 3
DO_ROK = 2026
BASE_URL = "https://portal.cpzp.cz"
COOKIES_FILE = os.path.join(os.path.dirname(__file__), "..", "..", "StahováníZpráv", "205 ČPZP", "cpzp_cookies.json")
DEST_DIR = os.path.join(
get_dropbox_root(),
"Ordinace", "Dokumentace_ke_zpracování", "Zúčtovací zprávy", "205 ČPZP",
)
def mesice_v_rozsahu(od_m, od_r, do_m, do_r):
"""Generuje (mesic, rok) od od_m/od_r do do_m/do_r včetně."""
m, r = od_m, od_r
while (r, m) <= (do_r, do_m):
yield m, r
m += 1
if m > 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()
Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

@@ -0,0 +1,756 @@
<!DOCTYPE html><html lang="cs"><head>
<meta charset="utf-8">
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<title>
Prohlížení klientely - E-přepážka ČPZP
</title>
<!-- Libraries -->
<script>
CPZP = {
settings : {
certificateLoginKey : 'Prohlášení:'+ String.fromCharCode(13, 10) + 'Tímto se přihlašuji k Portálu ČPZP'+ String.fromCharCode(13, 10) + ''+ String.fromCharCode(13, 10) + 'Okamžik vygenerování tohoto prohlášení: 03.05.2026 10:37:40',
maxHeightSelectDropDown : null
},
runtimeConfig: {
logged : '1',
loggedUser: 'Michaela Buzalková',
useCertificate : true },
signerIsLoaded : false
};
</script>
<script type="text/javascript" src="/app/js/util.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/SimpleEventBroker.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/json3.min.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/lib/jquery/jquery-3.7.1.min.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/lib/jquery/jquery-migrate-3.4.1.min.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/lib/jquery/jquery-ui-1.13.2.min.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/jquery.ui.datepicker-cs.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/jquery.nicefileinput.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/jquery.loadmask.min.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/jquery.timer.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/jquery.cookie.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/lib_java_sign.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/lib_signer_utf8.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/browser.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/menu.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/help.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/form.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/generate-js/analytics.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/toastr.min.js?v=1v2.162.0"></script>
<script type="text/javascript" src="/app/js/prohlizeniklientely/list.js?v=1v2.162.0"></script>
<link rel="stylesheet" href="/app/css/style.css?v=v2.162.0" type="text/css">
<link rel="stylesheet" href="/app/css/style-print.css?v=v2.162.0" type="text/css" media="print">
<link rel="stylesheet" href="/app/extcss/jquery-ui-1.13.2.min.css?v=v2.162.0" type="text/css">
<link rel="stylesheet" href="/app/css/all.css?v=v2.162.0" type="text/css">
<link rel="stylesheet" href="/app/css/solid.css?v=v2.162.0" type="text/css">
<link rel="stylesheet" href="/app/extcss/toastr.min.css?v=v2.162.0" type="text/css">
<link rel="shortcut icon" href="/images/favicon.ico?v=v2.162.0">
<script>
/* (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-46493716-1', 'cpzp.cz');
ga('send', 'pageview'); */
</script>
</head>
<body>
<div class="main">
<div class="header">
<div class="logo-info">
<div class="logo">
<a href="/" class="logo" alt="Česká průmyslová zdravotní pojištovna" title="Úvodní stránka"></a>
<div class="code">
<div class="text">kód pojišťovny: </div>
<div class="number">205</div>
</div>
</div>
<div class="info-panel">
<div><span>Uživatel:</span>Michaela Buzalková</div>
<div class="message-state"><span>Nepřečtených zpráv:</span><a href="/app/schranka/">0</a></div>
<div class="current-date" style="display: none"><span>Datum:</span>3.5.2026 10:40:30</div>
<div class="logout">
<a href="/app/logout/?new=1" onclick="sessionStorage.clear();">Odhlásit</a>
</div>
</div>
<div class="search-box">
<div class="head-line">Elektronická přepážka ČPZP</div>
<div class="message">Právě se nacházíte v Portálu ČPZP. Kliknutím zvolíte Portál:</div>
<div class="zone-href">
<a href="/app/redirect/?destination=ozp">OZP</a> | <a href="/app/redirect/?destination=rbp">RBP</a> | <a href="/app/redirect/?destination=vozp">VoZP ČR</a> | <a href="/app/redirect/?destination=zpskoda">ZPŠ</a> | <a href="/app/redirect/?destination=spol">Společná zóna</a>
</div>
</div>
<div class="clearboth"></div>
</div>
</div>
<div class="clearboth"></div>
<div class="menu" role="navigation" aria-label="hlavní menu">
<ul class="navigation">
<li class="menu-main-?vod" id="menu1">
<a href="/app/" class="level1">úvod</a>
</li>
<li class="menu-main-poji?t?nci" id="menu2">
<a href="/app/pojistenci-rozcestnik/" class="level1"><span>pojištěnci</span></a>
<ul>
<li class="menu-main-osobn?nastaven?">
<a href="/app/osobni-nastaveni-rozcestnik/" class="level2">Osobní nastavení<img src="/app/img/dot-white.png" style="float:right;margin:3px 0 0 0"></a>
<ul class="submenu2">
<li class="menu-main-zm?naadresyakontaktn?ch?daj?">
<a href="/app/zmena-adresy-a-kontaktnich-udaju/pojistenec/">Změna adresy a kontaktních údajů</a>
</li>
<li class="sub-disabled menu-main-bankovn???ty">
<a href="/app/bankovni-ucty/">Bankovní účty</a>
</li>
<li class="menu-main-mojeopr?vn?n?">
<a href="/app/prehled-opravneni/pojistenec/">Moje oprávnění</a>
</li>
</ul>
</li>
<li class="menu-main-preventivn?programy">
<a href="/app/preventivni-programy-rozcestnik/" class="level2">Preventivní programy<img src="/app/img/dot-white.png" style="float:right;margin:3px 0 0 0"></a>
<ul class="submenu2">
<li class="sub-disabled menu-main-registracedobonus+">
<a href="/app/bonus-plus-registrace/">Registrace do Bonus +</a>
</li>
<li class="sub-disabled menu-main-v?piskontabonus+">
<a href="/app/bonus-plus-vypis/">Výpis konta Bonus +</a>
</li>
<li class="sub-disabled menu-main-propl?cen?preventivn?chprogram?">
<a href="/app/proplaceni-preventivnich-programu/">Proplácení preventivních programů</a>
</li>
<li class="menu-main-informaceopreventivn?chprogramech">
<a href="https://www.cpzp.cz/programy/" target="_self">Informace o preventivních programech</a>
</li>
</ul>
</li>
<li class="menu-main-preventivn?prohl?dky">
<a href="/app/preventivni-prohlidky-rozcestnik/" class="level2">Preventivní prohlídky<img src="/app/img/dot-white.png" style="float:right;margin:3px 0 0 0"></a>
<ul class="submenu2">
<li class="sub-disabled menu-main-p?ehledpreventivn?chprohl?dek">
<a href="/app/preventivni-prohlidky/">Přehled preventivních prohlídek</a>
</li>
<li class="sub-disabled menu-main-zas?l?n?preventivn?chsms">
<a href="/app/prevence-v-mobilu/">Zasílání preventivních SMS</a>
</li>
</ul>
</li>
<li class="sub-disabled menu-main-??dostopr?kazpoji?t?nce">
<a href="/app/prukaz-pojistence/" class="level2">Žádost o průkaz pojištěnce</a>
</li>
<li class="sub-disabled menu-main-osobn???etzdravotn?p??e">
<a href="/app/osobni-ucet-pojistence/" class="level2">Osobní účet zdravotní péče</a>
</li>
<li class="sub-disabled menu-main-z?znamodlouhodob?mpobytuvcizin?">
<a href="/app/zaznam-o-dlouhodobem-pobytu-v-cizine/" class="level2">Záznam o dlouhodobém pobytu v cizině</a>
</li>
<li class="menu-main-pojistn?">
<a href="/app/pojistne-rozcestnik/" class="level2">Pojistné<img src="/app/img/dot-white.png" style="float:right;margin:3px 0 0 0"></a>
<ul class="submenu2">
<li class="sub-disabled menu-main-stavpojistn?ho">
<a href="/app/stav-pojistneho/">Stav pojistného<img src="/app/img/dot-white.png" style="float:right;margin:3px 0 0 0"></a>
<ul>
<li class="menu-main-??dostovr?cen?p?eplatk?">
<a href="/app/stav-pojistneho/preplatek">Žádost o vrácení přeplatků</a>
</li>
<li class="menu-main-??dostop?e??tov?n?platby">
<a href="/app/stav-pojistneho/platba">Žádost o přeúčtování platby</a>
</li>
<li class="menu-main-??dostopotvrzen?obezdlu?nosti">
<a href="/app/stav-pojistneho/bezdluznost">Žádost o potvrzení o bezdlužnosti</a>
</li>
<li class="menu-main-??dostov?pispohled?vekaz?vazk?">
<a href="/app/stav-pojistneho/vypis">Žádost o výpis pohledávek a závazků</a>
</li>
</ul>
</li>
<li class="sub-disabled menu-main-pl?tcipojistn?ho">
<a href="/app/zadost-o-prehled-platcu-pojistneho/">Plátci pojistného</a>
</li>
<li class="sub-disabled menu-main-osv?-pod?n?p?ehleduzarok">
<a href="/app/prehled-osvc/2025/">OSVČ - podání přehledu za rok</a>
</li>
<li class="sub-disabled menu-main-osv?-p?ehledp?ijat?chplateb">
<a href="/app/prehled-plateb-osvc/">OSVČ - přehled přijatých plateb</a>
</li>
<li class="sub-disabled menu-main-osv?-??dostosn??en?z?loh">
<a href="/app/snizeni-zaloh-osvc/">OSVČ - žádost o snížení záloh</a>
</li>
</ul>
</li>
</ul>
</li>
<li class="disabled menu-main-zam?stnavatel?" id="menu3">
<a href="/app/zamestnavatele-rozcestnik/" class="level1">zaměstnavatelé</a>
<ul>
<li class="sub-disabled menu-main-hromadn?ozn?men?zam?stnavatele">
<a href="/app/hromadne-oznameni-zamestnavatele/" class="level2">Hromadné oznámení zaměstnavatele</a>
</li>
<li class="sub-disabled menu-main-p?ehledoplatb?pojistn?ho">
<a href="/app/prehled-o-platbe-pojistneho/" class="level2">Přehled o platbě pojistného</a>
</li>
<li class="sub-disabled menu-main-??dostoseznamzam?stnanc?">
<a href="/app/zadost-o-seznam-zamestnancu/" class="level2">Žádost o seznam zaměstnanců</a>
</li>
<li class="sub-disabled menu-main-zm?naadresyakontaktn?ch?daj?">
<a href="/app/zmena-adresy-a-kontaktnich-udaju/zamestnavatel/" class="level2">Změna adresy a kontaktních údajů</a>
</li>
<li class="sub-disabled menu-main-stavpojistn?ho">
<a href="/app/zamestnavatele-stav-pojistneho/" class="level2">Stav pojistného</a>
</li>
<li class="sub-disabled menu-main-mojeopr?vn?n?">
<a href="/app/prehled-opravneni/zamestnavatel/" class="level2">Moje oprávnění</a>
</li>
</ul>
</li>
<li class="active menu-main-poskytovatel?zdrslu?eb" id="menu4">
<a href="/app/pzs-rozcestnik/" class="level1"><span>poskytovatelé zdr. služeb</span></a>
<ul>
<li class="sub-disabled menu-main-?pzppro">
<a href="/app/cpzp-pro/" class="level2">ČPZP PRO</a>
</li>
<li class="menu-main-schr?nkapzs">
<a href="/app/schranka-pzs/" class="level2">Schránka PZS</a>
</li>
<li class="menu-main-profilpzs">
<a href="/app/profil-pzs/" class="level2">Profil PZS</a>
</li>
<li class="menu-main-odesl?n?vy??tov?n?">
<a href="/app/odeslani-vyuctovani/" class="level2">Odeslání vyúčtování</a>
</li>
<li class="menu-main-odeslanivy??tov?n?antigenn?chtest?">
<a href="/app/odeslani-vyuctovani/antigenni-testy/" class="level2">Odeslani vyúčtování antigenních testů</a>
</li>
<li class="menu-main-odesl?n?registra?n?chl?stk?">
<a href="/app/registracni-listky/" class="level2">Odeslání registračních lístků</a>
</li>
<li class="menu-main-odesl?n?hromadn?sn??en?cen">
<a href="/app/hromadne-snizeni-cen/" class="level2">Odeslání hromadné snížení cen</a>
</li>
<li class="menu-main-odesl?n?l?ze?sk?chn?vrh?">
<a href="/app/lazenske-navrhy/" class="level2">Odeslání lázeňských návrhů</a>
</li>
<li class="menu-main-ov??en?poji?t?nce">
<a href="https://www.cpzp.cz/ehic/" target="_blank" class="level2">Ověření pojištěnce</a>
</li>
<li class="menu-main-ov??en?registruj?c?hopzs">
<a href="/app/overeni-registrujiciho-pzs/" class="level2">Ověření registrujícího PZS</a>
</li>
<li class="menu-main-prohl??en?/stornofaktur">
<a href="/app/prohlizeni-faktur/" class="level2">Prohlížení / Storno faktur</a>
</li>
<li class="menu-main-prohl??en?plateb">
<a href="/app/prohlizeni-plateb/" class="level2">Prohlížení plateb</a>
</li>
<li class="menu-main-prohl??en?vy??tov?n?zaobdob?">
<a href="/app/prohlizeni-vyuctovani/" class="level2">Prohlížení vyúčtování za období</a>
</li>
<li class="menu-main-prohl??en?zulp">
<a href="/app/prohlizeni-zulp/" class="level2">Prohlížení ZULP</a>
</li>
<li class="active menu-main-prohl??en?klientely">
<a href="/app/prohlizeni-klientely/" class="level2">Prohlížení klientely</a>
</li>
<li class="sub-disabled menu-main-pzs-osobn???etpoji?t?nce">
<a href="/app/pzs-osobni-ucet-pojistence/" class="level2">PZS - osobní účet pojištěnce</a>
</li>
<li class="sub-disabled menu-main-statistiky-n?kladyzdrslu?eb">
<a href="/app/dikap/statistika/" class="level2">Statistiky - náklady zdr. služeb</a>
</li>
<li class="menu-main-parametrydohodyocen?">
<a href="/app/dikap/dohody/" class="level2">Parametry dohody o ceně</a>
</li>
<li class="menu-main-mojeopr?vn?n?">
<a href="/app/prehled-opravneni/pzs/" class="level2">Moje oprávnění</a>
</li>
</ul>
</li>
<li class="menu-main-servis" id="menu5">
<a href="/app/servis-rozcestnik/" class="level1"><span>servis</span></a>
<ul>
<li class="menu-main-schr?nkaklienta">
<a href="/app/schranka/" class="level2">Schránka klienta</a>
</li>
<li class="menu-main-elektronick?podatelna">
<a href="/app/elektronicka-podatelna/" class="level2">Elektronická podatelna</a>
</li>
<li class="menu-main-p?ehledopr?vn?n?">
<a href="/app/prehled-opravneni/vse/" class="level2">Přehled oprávnění</a>
</li>
<li class="menu-main-p?ehledsouhlas?">
<a href="/app/prehled-souhlasu/" class="level2">Přehled souhlasů</a>
</li>
<li class="menu-main-aktiva?n?k?d(opr?vn?n?)">
<a href="/app/aktivacni-kod/" class="level2">Aktivační kód (oprávnění)</a>
</li>
<li class="menu-main-historiepod?n?">
<a href="/app/historie-podani/" class="level2">Historie podání</a>
</li>
<li class="menu-main-prohl??en?certifik?t?">
<a href="/app/prohlizeni-certifikatu/" class="level2">Prohlížení certifikátů</a>
</li>
<li class="menu-main-p?id?n?certifik?tu">
<a href="/app/pridani-certifikatu/" class="level2">Přidání certifikátu</a>
</li>
<li class="menu-main-zm?nakontaktn?ch?daj?">
<a href="/app/zmena-osobnich-udaju/" class="level2">Změna kontaktních údajů</a>
</li>
<li class="menu-main-zm?nasmsp?ihla?ov?n?">
<a href="/app/zmena-sms-konta/" class="level2">Změna SMS přihlašování</a>
</li>
<li class="menu-main-potvrzen?emailov?adresy">
<a href="/app/potvrzeni-emailu/" class="level2">Potvrzení emailové adresy</a>
</li>
</ul>
</li>
<li class="menu-main-informace" id="menu6">
<a href="/app/informace-rozcestnik/" class="level1"><span>informace</span></a>
<ul>
<li class="menu-main-aktuality">
<a href="/app/aktuality/" class="level2">aktuality</a>
</li>
<li class="menu-main-registracedoe-p?ep??ky">
<a href="/app/registrace-klienta/" class="level2">registrace do e-přepážky</a>
</li>
<li class="menu-main-jaksep?ihl?sit">
<a href="/app/clanek/jak-se-prihlasit/" class="level2">jak se přihlásit</a>
</li>
<li class="menu-main-?astokladen?ot?zky(faq)">
<a href="/app/clanek/casto-kladene-otazky/" class="level2">často kladené otázky (FAQ)</a>
</li>
<li class="menu-main-certifika?n?autority">
<a href="/app/clanek/certifikacni-autority/" class="level2">certifikační autority</a>
</li>
<li class="menu-main-ochranaosobn?ch?daj?">
<a href="/app/clanek/ochrana-osobnich-udaju/" class="level2">ochrana osobních údajů</a>
</li>
<li class="menu-main-e-podatelna?pzp">
<a href="/app/clanek/elektronicka-podatelna-cpzp/" class="level2">e-podatelna ČPZP</a>
</li>
<li class="menu-main-smlouvysposkytovatelizdravotn?chslu?eb">
<a href="/app/smlouvy-s-pzs/" class="level2">Smlouvy s poskytovateli zdravotních služeb</a>
</li>
</ul>
</li>
<li class="menu-main-n?pov?da" id="menu7">
<a href="/app/napoveda/" class="level1">nápověda</a>
</li>
<li class="menu-main-web?pzp" id="menu8">
<a href="http://www.cpzp.cz" class="level1">web ČPZP</a>
</li>
</ul> </div>
<div class="clearboth"></div>
<div class="content">
<div>
<div class="breadcrumb">
<a href="/app/">úvod</a><span class="separator"></span><a href="/app/pzs-rozcestnik/">poskytovatelé zdr. služeb</a><span class="separator"></span>Prohlížení klientely </div>
<div class="spacer" style="height: 20px;"></div>
<h1>Prohlížení klientely</h1>
<p>Aktuální klientela je zobrazována vždy až po interní uzávěrce pro Kapitační centrum, tzn. s cca měsíčním zpožděním oproti aktuálnímu datu.</p>
<form action="" method="post" name="prohlizeni-klientely" id="prohlizeni-klientely"><input type="hidden" name="csrf" value="8029b24e0b7c3607ed34303c892ff308" style=""><script>
CPZP.icpSort = '';
</script>
<fieldset>
<h3>Filtrování</h3>
<div class="field top">
<div class="label" style="width: 70px;">IČZ:</div>
<div class="input w600">
<select name="icz" id="icz"><option value="09305000">09305000 - MUDr. Michaela Buzalková</option></select> </div>
</div>
<div class="clearboth"></div>
<p></p>
<div class="field top" style="float: left; width: 46%">
<div class="label" style="width: 70px;">Měsíc:</div>
<div class="input w100">
<input name="mesic" type="text" id="mesic" value="3" style=""> </div>
<div class="clearboth"></div>
</div>
<div class="field top" style="float: left; width: 50%">
<div class="label" style="width: 70px;">Rok:</div>
<div class="input w200">
<input name="rok" type="text" id="rok" value="2026" style=""> </div>
<div class="clearboth"></div>
</div>
<div class="clearboth"></div>
<div class="field top" style="float: left; width: 46%">
<div class="label" style="width: 70px;">IČP:</div>
<div class="input w300">
<select name="icp" id="icp" class=""><option value="">---</option><option value="null"> - </option></select> </div>
</div>
<div class="field top" style="float: left; width: 50%">
<div class="label" style="width: 70px;">Řadit dle:</div>
<div class="input w200">
<select name="sortBy" id="sortBy"><option value="ICP_RC" selected="selected">IČP</option>
<option value="RC">Číslo pojištěnce</option>
<option value="PRIJMENI_JMENO">Příjmení a jméno</option></select> </div>
</div>
<div class="clearboth"></div>
<div class="top">
<div class="center">
<div class="red-btn">
<div class="wrap"><input name="submitbutton" type="submit" id="submitbutton" value="Hledat" class="" style=""></div>
</div>
</div>
</div>
<div class="clearboth"></div>
</fieldset>
</form><p></p>
<div class="action-panel navigation">
<a href="javascript:;" id="print-to-html" class="print-to-html-no-text x-href-btn" style="width: 47px;">tisknout sestavu</a>
<form action="" method="post" target="_blank" id="export-form" name="export-form">
<input type="hidden" name="icz" id="export-icz" style="">
<input type="hidden" name="icp" id="export-icp" style="">
<input type="hidden" name="mesic" id="export-mesic" style="">
<input type="hidden" name="rok" id="export-rok" style="">
<input type="hidden" name="sortBy" id="export-sortBy" style="">
<input type="hidden" name="csrf" value="8029b24e0b7c3607ed34303c892ff308" style=""> </form>
<a href="#" class="export-to-csv-no-text x-href-btn" style="width: 205px;" id="export-to-vzp">Seznam registrovaných pojištěnců ve formátu podle datového rozhraní VZP</a>
<div class="navigation">
&nbsp;&nbsp;Celkem 15 záznamů </div>
<div class="clearboth"></div>
</div>
<p></p>
<table class="list">
<thead>
<tr class="odd">
<th class="center">IČP</th>
<th class="right">Odbornost</th>
<th class="right">Číslo pojištěnce</th>
<th class="left">Příjmení</th>
<th class="left">Jméno</th>
<th class="center">Registrace od</th>
<th class="center">Registrace do</th>
</tr>
</thead>
<tbody>
<tr class="even">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">0105072528</td>
<td class="left">Vinický</td>
<td class="left">Ondřej</td>
<td class="center">01.03.2026</td>
<td class="center"></td>
</tr>
<tr class="odd">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">0301214925</td>
<td class="left">Štefanský</td>
<td class="left">Daniel</td>
<td class="center">01.05.2025</td>
<td class="center"></td>
</tr>
<tr class="even">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">0657650510</td>
<td class="left">Krehul</td>
<td class="left">Valeriia</td>
<td class="center">01.02.2026</td>
<td class="center"></td>
</tr>
<tr class="odd">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">435614435</td>
<td class="left">Strnadová</td>
<td class="left">Vítězslava</td>
<td class="center">01.07.2025</td>
<td class="center"></td>
</tr>
<tr class="even">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">446228471</td>
<td class="left">Feoktistova</td>
<td class="left">Natalia</td>
<td class="center">01.09.2018</td>
<td class="center"></td>
</tr>
<tr class="odd">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">6504141149</td>
<td class="left">Bečica</td>
<td class="left">Josef</td>
<td class="center">01.05.2010</td>
<td class="center"></td>
</tr>
<tr class="even">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">6510130792</td>
<td class="left">Šuhaj</td>
<td class="left">Petr</td>
<td class="center">01.06.2013</td>
<td class="center"></td>
</tr>
<tr class="odd">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">6758120446</td>
<td class="left">Bečicová</td>
<td class="left">Markéta</td>
<td class="center">01.05.2010</td>
<td class="center"></td>
</tr>
<tr class="even">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">6861010288</td>
<td class="left">Štefanská</td>
<td class="left">Renáta</td>
<td class="center">01.03.2025</td>
<td class="center"></td>
</tr>
<tr class="odd">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">7909054780</td>
<td class="left">Babáček</td>
<td class="left">Marek</td>
<td class="center">01.02.2017</td>
<td class="center"></td>
</tr>
<tr class="even">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">8509170802</td>
<td class="left">Neumann</td>
<td class="left">Jakub</td>
<td class="center">01.09.2015</td>
<td class="center"></td>
</tr>
<tr class="odd">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">8554125360</td>
<td class="left">Grygarová</td>
<td class="left">Jana</td>
<td class="center">01.04.2011</td>
<td class="center"></td>
</tr>
<tr class="even">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">9355042466</td>
<td class="left">Bečicová</td>
<td class="left">Tereza</td>
<td class="center">01.03.2012</td>
<td class="center"></td>
</tr>
<tr class="odd">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">9355071297</td>
<td class="left">Dobrohrušková</td>
<td class="left">Lucie</td>
<td class="center">01.11.2014</td>
<td class="center"></td>
</tr>
<tr class="even">
<td class="center">09305001</td>
<td class="right">001</td>
<td class="right">9651301253</td>
<td class="left">Kut Citores</td>
<td class="left">Markéta</td>
<td class="center">01.11.2021</td>
<td class="center"></td>
</tr>
</tbody>
</table>
<p></p>
<script>
$(document).ready(function() {
analyticsPzs($('#icz').val(), 'PZS_PROHLIZENI_KLIENTELY');
});
</script>
</div>
<div class="clearboth"></div>
</div>
</div>
<div class="footer">
<p class="copy">© ČPZP | Infocentrum: 810 800 000 | <a href="http://www.cpzp.cz/pobocky/">Pobočky ČPZP</a> | <a href="#" class="show-cookies">Cookies</a>
</p>
</div>
<section class="cookie-policy">
<article class="base cookie-container">
<div>
<h2>Povolení cookies</h2>
<p>V ČPZP používáme cookies a jiné technologie za účelem poskytování našich služeb, vylepšení
vašeho uživatelského zážitku, analýzy používání
našich stránek a při cílení reklamy. </p>
</div>
<div class="cookie-buttons">
<div class="red-btn disabled cookie-setup"><div class="wrap"><a style="color: rgb(19, 35, 57)" href="#">Nastavit cookies</a></div></div>
<div class="red-btn disabled cookie-deny"><div class="wrap"><a style="color: rgb(19, 35, 57)" href="#">Odmítnout vše kromě nutných</a></div></div>
<div class="red-btn cookie-accept"><div class="wrap"><a href="#">Přijmout vše</a></div></div>
</div>
</article>
<article class="detail cookie-container none">
<div class="cookie-detail">
<h2 style="grid-area: h">Nastavení cookies</h2>
<p style="grid-area: p1">V ČPZP používáme cookies a jiné technologie za účelem poskytování našich služeb, vylepšení
vašeho uživatelského zážitku, analýzy používání
našich stránek a při cílení reklamy. </p>
<p style="grid-area: p2">Vyberte vámi preferované povolení cookie, přičemž <b>základní jsou nezbytné pro fungování</b>, jiné můžeme používat jen s vaším souhlasem.
<br>
Vaše osobní údaje budou zpracovány a informace z vašeho zařízení (soubory cookie,
jidinečné identifikátory a další údaje zařízená) mohou být uchovávány.
<br>
Vaše preference můžete kdykoliv <b>změnit v dolní části naší webové stránky
s názvem Cookies</b>. Pro více informací o používání cookies prosím naštivte
<a href="/app/clanek/ochrana-osobnich-udaju/" target="__blank">Zásady ochrany osobních údajů</a>
.</p>
<div style="grid-area: b1; justify-self: center;" class="red-btn disabled cookie-deny"><div class="wrap"><a style="color: rgb(19, 35, 57)" href="#">Odmítnout vše kromě nutných</a></div></div>
<div style="grid-area: b2; justify-self: center;" class="red-btn cookie-accept-selected"><div class="wrap"><a href="#">Souhlasím a uložit nastavení</a></div></div>
</div>
<div class="cookie-options">
<label for="zakladni"><input type="checkbox" id="zakladni" value="1" checked="" disabled="" style="">Základní <span>Nezbytné pro správné fungování webu.</span></label>
<label for="analyticke"><input type="checkbox" id="analyticke" value="2" style="">Analytické <span>Umožňují měření výkonu webu a reklamních kampaní.</span></label>
<label for="preferencni"><input type="checkbox" id="preferencni" value="4" style="">Preferenční <span>Slouží k přizpůsobení potřeb a zájmů</span></label>
<label for="reklamni"><input type="checkbox" id="reklamni" value="8" style="">Reklamní <span>Slouží k zobrazení vhodného obsahu nebo reklamy, jak
na našich stránkách, tak na stránkách třetích subjektů.</span></label>
</div>
</article>
</section>
<div id="ie-warning-dialog" style="display: none;">
<p>
Používáte zastaralý prohlížeč Microsoft Internet Explorer. Z bezpečnostních a výkonových důvodů Vám důrazně doporučujeme přechod na modernější prohlížeč - např. Google Chrome, Microsoft Edge či Mozilla Firefox. Jedním z důvodů je i skutečnost, že společnost Microsoft již avizovala, že k 15.6.2022 ukončuje podporu Microsoft Internet Exploreru.
</p>
</div>
<script>
$(document).ready(function() {
const dialog = $("#ie-warning-dialog");
// MSIE for IE version <=10, trident/ for IE 11
if ((navigator.userAgent.indexOf('MSIE') > -1 || navigator.appVersion.indexOf('Trident/') > -1) && !sessionStorage.visited) {
dialog.dialog({
modal: true,
title: 'Upozornění na zastaralý prohlížeč',
show: {
effect: 'fold',
duration: 400
},
hide: {
effect: 'fold',
duration: 200
},
width: '50%',
buttons: {
'Zavřít': function () {
dialog.dialog('close');
}
}
});
sessionStorage.visited = true;
}
});
</script>
<script>
const CONSENT_KEY = 'cookieConsent';
function getCookie(cKey) {
const key = cKey + "=";
const decoded = decodeURIComponent(document.cookie);
const allCookies = decoded .split('; ');
let res;
allCookies.forEach(function (val) {
if (val.indexOf(key) === 0) res = val.substring(key.length);
})
return res;
}
function setCookie(cKey, value, duration) {
let date = new Date();
date.setTime(date.getTime() + (30 * 24 * 60 * 60 * 1000)); // days * hours * minutes * seconds * milliseconds
const expires = "expires=" + date.toUTCString();
document.cookie = cKey + "=" + value + "; " + expires + "; path=/";
}
function hideCookieConsent() {
if (!$('.cookie-policy .base').hasClass('none')) {
$('.cookie-policy .base').addClass('none');
}
if (!$('.cookie-policy > .detail').hasClass('none')) {
$('.cookie-policy > .detail').addClass('none');
}
if (!$('.cookie-policy').hasClass('none')) {
$('.cookie-policy').addClass('none');
}
}
function setConsentCheckboxes() {
const cookieConsent = parseInt(getCookie(CONSENT_KEY));
const binConsent = cookieConsent.toString(2);
if (binConsent.charAt(binConsent.length - 2) === '1') {
$("#analyticke").prop('checked', true);
}else {
$("#analyticke").prop('checked', false);
}
if (binConsent.charAt(binConsent.length - 3) === '1') {
$("#preferencni").prop('checked', true);
}else {
$("#preferencni").prop('checked', false);
}
if (binConsent.charAt(binConsent.length - 4) === '1') {
$("#reklamni").prop('checked', true);
}else {
$("#reklamni").prop('checked', false);
}
}
$(document).ready(function() {
const cookieConsent = getCookie(CONSENT_KEY);
if (!cookieConsent) {
$('.cookie-policy .base').removeClass('none');
$('.cookie-policy').removeClass('none');
}else {
const val = parseInt(cookieConsent);
const bin = val.toString(2);
if (bin.charAt(bin.length - 2) === '1') {
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-46493716-1', 'cpzp.cz');
ga('send', 'pageview');
}
}
$(document).on('click', '.show-cookies', function(e) {
e.preventDefault();
$('.cookie-policy .base').removeClass('none');
$('.cookie-policy').removeClass('none');
});
$(document).on('click', '.cookie-setup', function(e) {
e.preventDefault();
setConsentCheckboxes();
$('.cookie-policy .base').addClass('none');
$('.cookie-policy > .detail').removeClass('none');
});
$(document).on('click', '.cookie-accept', function(e) {
e.preventDefault();
setCookie(CONSENT_KEY, '15');
hideCookieConsent();
});
$(document).on('click', '.cookie-deny', function(e) {
e.preventDefault();
setCookie(CONSENT_KEY, '1');
hideCookieConsent();
});
$(document).on('click', '.cookie-accept-selected', function(e) {
e.preventDefault();
let consentValue = 1;
consentValue += $('#analyticke').is(":checked") ? parseInt($('#analyticke').val()) : 0;
consentValue += $('#preferencni').is(":checked") ? parseInt($('#preferencni').val()) : 0;
consentValue += $('#reklamni').is(":checked") ? parseInt($('#reklamni').val()) : 0;
setCookie(CONSENT_KEY, consentValue.toString());
hideCookieConsent();
});
});
</script>
<div id="x-portal-0" class="help-box" style="right: 10px;"><div class="help-box-wrap"><span>NÁPOVĚDA</span></div></div><div id="x-portal-1" class="help-tooltip" style="right: 10px;"><a hre="javascript:;"></a><div class="help-tooltip-content">Pokud si nevíte s touto funkcí rady, zkuste se podívat na naši nápovědu</div><div class="arrow bottom center"></div></div></body></html>
Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

@@ -1,7 +1,7 @@
[
{
"name": "PHPSESSID",
"value": "fdn1rc7eoss5u58vo9bmf7njr3",
"value": "jue2dfk7t4k34du7ngg4j706q1",
"domain": ".portal.cpzp.cz",
"path": "/",
"expires": -1,
@@ -39,7 +39,21 @@ def _load_env():
_load_env()
POPPLER_PATH = r"C:/Poppler/Library/bin"
def _find_poppler() -> str | None:
candidates = [
r"C:/Poppler/Library/bin",
str(Path.home() / r"scoop\apps\poppler\current\Library\bin"),
str(Path.home() / r"scoop\apps\poppler\current\bin"),
]
for p in candidates:
if Path(p).exists():
return p
pdfinfo = shutil.which("pdfinfo")
if pdfinfo:
return str(Path(pdfinfo).parent)
return None
POPPLER_PATH = _find_poppler()
CORRECTIONS = True # True = corrections.json se načítá a ukládá; False = ignorovat
_DROPBOX = Path(get_dropbox_root())
@@ -292,7 +306,10 @@ def extract_info(pdf_path: Path) -> dict:
def open_preview(pdf_path: Path) -> tuple[subprocess.Popen, Path]:
geom_file = Path(tempfile.mktemp(suffix=".json"))
proc = subprocess.Popen([sys.executable, str(VIEWER), str(pdf_path), f"--write-geometry={geom_file}"])
proc = subprocess.Popen(
[sys.executable, str(VIEWER), str(pdf_path), f"--write-geometry={geom_file}"],
stderr=subprocess.PIPE,
)
return proc, geom_file
@@ -318,6 +335,8 @@ def run_rename_dialog(nazev: str, info_lines: list, below_y: int = None) -> str
env = {**os.environ, "PYTHONIOENCODING": "utf-8"}
proc = subprocess.run(args, capture_output=True, text=True, encoding="utf-8", env=env)
tmp.unlink(missing_ok=True)
if proc.stderr.strip():
print(f" [rename_dialog] CHYBA:\n{proc.stderr.strip()}")
out = proc.stdout.strip()
return json.loads(out).get("value") if out else None
@@ -390,6 +409,9 @@ def process_file(pdf_path: Path):
final_name = run_rename_dialog(nazev, info_lines, below_y=below_y)
preview.terminate()
stderr_out = preview.stderr.read().decode("utf-8", errors="replace").strip() if preview.stderr else ""
if stderr_out:
print(f" [preview] CHYBA: {stderr_out}")
if not final_name:
print(" Přeskočeno.")
+5 -1
View File
@@ -17,7 +17,8 @@ def main():
try:
from PIL import Image, ImageTk
import fitz
except ImportError:
except ImportError as e:
print(f"[preview_viewer] Chybí knihovna: {e}", file=sys.stderr)
sys.exit(2)
suffix = pdf_path.suffix.lower()
@@ -104,6 +105,9 @@ def main():
geom_path.write_text(_json.dumps({"x": x, "y": 0, "w": w, "h": h}), encoding="utf-8")
break
root.lift()
root.focus_force()
root.after(100, lambda: root.focus_force())
root.mainloop()
+14 -1
View File
@@ -81,19 +81,32 @@ def main():
root.update_idletasks()
sw = root.winfo_screenwidth()
w = root.winfo_width()
h = root.winfo_height()
x = (sw - w) // 2
# Skutečná použitelná výška (bez taskbaru)
import ctypes, ctypes.wintypes
rect = ctypes.wintypes.RECT()
ctypes.windll.user32.SystemParametersInfoW(48, 0, ctypes.byref(rect), 0)
work_bottom = rect.bottom # spodní hrana work area
# Pozice pod preview oknem pokud byl předán argument --below-y=N
below_y = None
for arg in sys.argv:
if arg.startswith("--below-y="):
below_y = int(arg.split("=", 1)[1])
break
y = below_y if below_y is not None else (root.winfo_screenheight() - root.winfo_height() - 60)
if below_y is not None and below_y + h + 10 <= work_bottom:
y = below_y # vejde se pod preview
else:
y = max(0, work_bottom - h - 10) # přilepit těsně nad taskbar
root.geometry(f"+{x}+{y}")
root.lift()
root.focus_force()
root.after(100, lambda: root.focus_force())
root.after(200, lambda: root.attributes("-topmost", True))
root.mainloop()
print(json.dumps({"value": result["value"]}, ensure_ascii=False))
@@ -133,6 +133,10 @@ def main():
root.bind("<Escape>", lambda e: preskocit())
show(0)
root.lift()
root.focus_force()
root.after(100, lambda: root.focus_force())
root.after(200, lambda: root.attributes("-topmost", True))
root.mainloop()
for d in docs: