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 pathlib import Path
|
||||||
from datetime import date, timedelta
|
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"
|
ENCODING = "cp852"
|
||||||
|
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ from datetime import date
|
|||||||
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "Knihovny"))
|
sys.path.insert(0, str(Path(__file__).resolve().parents[2] / "Knihovny"))
|
||||||
from mysql_db import connect_mysql
|
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"
|
ENCODING = "cp852"
|
||||||
|
|
||||||
CREATE_SQL = """
|
CREATE_SQL = """
|
||||||
|
|||||||
Binary file not shown.
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
|
||||||
import sys
|
import sys
|
||||||
|
|||||||
Reference in New Issue
Block a user