notebookvb
This commit is contained in:
@@ -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}")
|
||||
+1
-1
@@ -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 = """
|
||||
|
||||
Binary file not shown.
Reference in New Issue
Block a user