notebookvb

This commit is contained in:
Vladimir Buzalka
2026-05-12 06:53:58 +02:00
parent b1f3c0b39b
commit 67ec430fd4
5 changed files with 107 additions and 3 deletions
@@ -0,0 +1,104 @@
#!/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")
"""
05_import_ozp.py
================
Vloží OZP pojištěnce z Excelu do seznam_pojistencu_davky jako první dávku:
davka_rok=2025, davka_mesic=1, davka_den=1, pojistovna='207'
OZP nedodává měsíční dávky jako VZP — tento Excel je náhrada:
přehled všech pojištěnců registrovaných u naší ordinace od 01.01.2025.
Spuštění:
python 05_import_ozp.py # import, duplicity přeskočí
python 05_import_ozp.py --reset # smaže OZP řádky a vloží znovu
"""
import argparse
import sys
from pathlib import Path
import pandas as pd
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "Knihovny"))
from mysql_db import connect_mysql
EXCEL = Path(__file__).parent / "Přehled registrovaný pojištěnců - od 01.01.2025.xlsx"
SOUBOR = "OZP_prehled_20250101.xlsx" # max 60 znaků, identifikátor dávky
ICP = "9305001"
POJISTOVNA = "207"
ROK, MESIC, DEN = 2025, 1, 1
def nacti_excel(path: Path) -> list[dict]:
df = pd.read_excel(path, dtype={"CISLO_POJISTENCE": str},
parse_dates=["PLATNOST_ZAZNAMU_OD"])
rows = []
for i, r in enumerate(df.itertuples(), start=1):
# Číslo pojištěnce — odstraníme desetinnou tečku pokud pandas přidal
cip = str(r.CISLO_POJISTENCE).strip().split(".")[0]
rows.append({
"soubor": SOUBOR,
"icp": ICP,
"davka_rok": ROK,
"davka_mesic": MESIC,
"davka_den": DEN,
"por": i,
"vs": "",
"prijmeni": str(r.PRIJMENI).strip()[:30],
"jmeno": str(r.JMENO).strip()[:24],
"cip": cip[:10],
"datum_od": r.PLATNOST_ZAZNAMU_OD.date() if pd.notna(r.PLATNOST_ZAZNAMU_OD) else None,
"pojistovna": POJISTOVNA,
})
return rows
# ── MAIN ──────────────────────────────────────────────────────────────────────
parser = argparse.ArgumentParser(description="Import OZP přehledu do seznam_pojistencu_davky")
parser.add_argument("--reset", action="store_true",
help="Smaže OZP řádky (soubor=OZP_prehled_20250101.xlsx) a vloží znovu")
args = parser.parse_args()
if not EXCEL.exists():
print(f"CHYBA: soubor nenalezen: {EXCEL}")
sys.exit(1)
rows = nacti_excel(EXCEL)
print(f"Načteno řádků z Excelu: {len(rows)}")
conn = connect_mysql()
cur = conn.cursor()
if args.reset:
cur.execute("DELETE FROM seznam_pojistencu_davky WHERE soubor = %s", (SOUBOR,))
print(f"Smazáno {cur.rowcount} stávajících OZP řádků.")
vlozeno = preskoceno = 0
for r in rows:
cur.execute("""
INSERT IGNORE INTO seznam_pojistencu_davky
(soubor, icp, davka_rok, davka_mesic, davka_den,
por, vs, prijmeni, jmeno, cip, datum_od, pojistovna)
VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)
""", (r["soubor"], r["icp"], r["davka_rok"], r["davka_mesic"], r["davka_den"],
r["por"], r["vs"], r["prijmeni"], r["jmeno"],
r["cip"], r["datum_od"], r["pojistovna"]))
if cur.rowcount:
vlozeno += 1
else:
preskoceno += 1
conn.commit()
cur.close()
conn.close()
print(f"Vloženo: {vlozeno}")
print(f"Přeskočeno: {preskoceno} (duplicity dle soubor+por)")
print(f"\nOZP dávka: rok={ROK}, měsíc={MESIC}, den={DEN}, pojišťovna={POJISTOVNA}")
@@ -32,7 +32,7 @@ import re
from pathlib import Path
from datetime import date, timedelta
DAVKY_DIR = Path(r"U:\Dropbox\Ordinace\Dokumentace_ke_zpracování\Zúčtovací zprávy\111 VZP Podání")
DAVKY_DIR = Path(r"U:\Dropbox\Ordinace\Dokumentace_ke_zpracování\Zúčtovací zprávy\SeznamyPojištěnců")
ENCODING = "cp852"
@@ -23,7 +23,7 @@ from datetime import date
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "Knihovny"))
from mysql_db import connect_mysql
DAVKY_DIR = Path(r"U:\Dropbox\Ordinace\Dokumentace_ke_zpracování\Zúčtovací zprávy\111 VZP Podání")
DAVKY_DIR = Path(r"U:\Dropbox\Ordinace\Dokumentace_ke_zpracování\Zúčtovací zprávy\SeznamyPojištěnců")
ENCODING = "cp852"
CREATE_SQL = """
+1 -1
View File
@@ -1,4 +1,4 @@
#!/usr/bin/env python3
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import sys