diff --git a/Insurance/SeznamPojistencu/00_import_ozp_onetime.py b/Insurance/SeznamPojistencu/00_import_ozp_onetime.py new file mode 100644 index 0000000..55b1c25 --- /dev/null +++ b/Insurance/SeznamPojistencu/00_import_ozp_onetime.py @@ -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}") diff --git a/Insurance/SeznamPojistencu/01_parse_seznam.py b/Insurance/SeznamPojistencu/01_parse_seznam_dg_tool.py similarity index 98% rename from Insurance/SeznamPojistencu/01_parse_seznam.py rename to Insurance/SeznamPojistencu/01_parse_seznam_dg_tool.py index 2e05979..eed0f17 100644 --- a/Insurance/SeznamPojistencu/01_parse_seznam.py +++ b/Insurance/SeznamPojistencu/01_parse_seznam_dg_tool.py @@ -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" diff --git a/Insurance/SeznamPojistencu/02_import_do_db.py b/Insurance/SeznamPojistencu/02_import_do_db.py index 5a3cad1..444c007 100644 --- a/Insurance/SeznamPojistencu/02_import_do_db.py +++ b/Insurance/SeznamPojistencu/02_import_do_db.py @@ -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 = """ diff --git a/Insurance/SeznamPojistencu/Přehled registrovaný pojištěnců - od 01.01.2025.xlsx b/Insurance/SeznamPojistencu/Přehled registrovaný pojištěnců - od 01.01.2025.xlsx new file mode 100644 index 0000000..b0ffcff Binary files /dev/null and b/Insurance/SeznamPojistencu/Přehled registrovaný pojištěnců - od 01.01.2025.xlsx differ diff --git a/Medicus/Externi/KdoJeLekar/KdoJeLekarApp.py b/Medicus/Externi/KdoJeLekar/KdoJeLekarApp.py index c917ccd..0208420 100644 --- a/Medicus/Externi/KdoJeLekar/KdoJeLekarApp.py +++ b/Medicus/Externi/KdoJeLekar/KdoJeLekarApp.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python3 + #!/usr/bin/env python3 # -*- coding: utf-8 -*- import sys