136 lines
4.6 KiB
Python
136 lines
4.6 KiB
Python
#!/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.")
|