#!/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.")