#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ REPORT – ZMĚNA STAVU POJIŠTĚNÍ (POUZE REGISTROVANÍ PACIENTI) - změna definována jako přechod 1 → X - zdroj změn: MySQL (vzp_stav_pojisteni) - filtr pacientů: Medicus (aktivně registrovaní) - email se odešle pouze pokud existuje alespoň 1 změna """ import sys from pathlib import Path import pymysql # ========================================== # PROJECT ROOT (import fix) # ========================================== PROJECT_ROOT = Path(__file__).resolve().parent.parent sys.path.insert(0, str(PROJECT_ROOT)) from knihovny.medicus_db import MedicusDB from knihovny.EmailMessagingGraph import send_mail # ========================================== # MYSQL CONFIG # ========================================== MYSQL_CONFIG = { "host": "192.168.1.76", "port": 3307, "user": "root", "password": "Vlado9674+", "database": "medevio", "charset": "utf8mb4", "cursorclass": pymysql.cursors.DictCursor, } # ========================================== # MEDICUS CONFIG # ========================================== HOST = "192.168.1.4" DB_PATH = r"z:\Medicus 3\data\MEDICUS.FDB" # ========================================== # EMAIL CONFIG # ========================================== EMAIL_TO = "vladimir.buzalka@buzalka.cz" # ← sem případně uprav adresu EMAIL_SUBJECT = "VZP – změna pojištění u registrovaných pacientů" # ========================================== # SQL – ZMĚNA 1 → X (HISTORIE) # ========================================== SQL = """ SELECT cur.rc, cur.prijmeni, cur.jmeno, cur.stav AS current_stav, chg.k_datu AS change_date, chg.stav AS change_stav FROM ( SELECT p1.* FROM vzp_stav_pojisteni p1 JOIN ( SELECT rc, MAX(k_datu) AS max_date FROM vzp_stav_pojisteni GROUP BY rc ) x ON x.rc = p1.rc AND x.max_date = p1.k_datu WHERE p1.stav <> '1' ) cur JOIN ( SELECT rc, MAX(k_datu) AS last_ok FROM vzp_stav_pojisteni WHERE stav = '1' GROUP BY rc ) ok ON ok.rc = cur.rc JOIN vzp_stav_pojisteni chg ON chg.id = ( SELECT MIN(id) FROM vzp_stav_pojisteni z WHERE z.rc = cur.rc AND z.k_datu = ( SELECT MIN(k_datu) FROM vzp_stav_pojisteni zz WHERE zz.rc = cur.rc AND zz.k_datu > ok.last_ok ) ) ORDER BY cur.prijmeni, cur.jmeno; """ # ========================================== # MAIN # ========================================== def main(): # 1️⃣ Registrovaní pacienti (Medicus) db = MedicusDB(HOST, DB_PATH) registered = db.get_active_registered_patients() db.close() registered_rc = {rc for rc, *_ in registered} # 2️⃣ Načíst změny z MySQL mysql = pymysql.connect(**MYSQL_CONFIG) with mysql.cursor() as cur: cur.execute(SQL) rows = cur.fetchall() mysql.close() # 3️⃣ Průnik množin filtered = [r for r in rows if r["rc"] in registered_rc] # 4️⃣ Pokud není co hlásit → konec if not filtered: print("Žádná změna pojištění u registrovaných pacientů – e-mail se neposílá.") return # 5️⃣ Sestavení reportu (TEXT) lines = [] lines.append("Změna stavu pojištění u registrovaných pacientů:\n") for r in filtered: pacient = f"{r['prijmeni']} {r['jmeno']}".strip() lines.append( f"- pacient {pacient}, " f"současný stav \"{r['current_stav']}\", " f"změna dne {r['change_date']} (ze \"1\" na \"{r['change_stav']}\")" ) body = "\n".join(lines) # 6️⃣ Odeslání e-mailu send_mail( to=EMAIL_TO, subject=f"{EMAIL_SUBJECT} ({len(filtered)})", body=body, html=False, ) print(f"Odeslán e-mail: {len(filtered)} pacientů") # ========================================== if __name__ == "__main__": main()