Files
insurance/10 Tests/2026-01-17 03.py
2026-01-17 20:35:55 +01:00

153 lines
4.0 KiB
Python
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/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()