notebookVB
This commit is contained in:
140
10 Tests/2026-01-17 02.py
Normal file
140
10 Tests/2026-01-17 02.py
Normal file
@@ -0,0 +1,140 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
"""
|
||||
REPORT – ZMĚNA STAVU POJIŠTĚNÍ (POUZE REGISTROVANÍ PACIENTI)
|
||||
|
||||
Výstup:
|
||||
pacient XY, současný stav pojištění je "X",
|
||||
ke změně došlo dne YYYY-MM-DD (ze "1" na "X")
|
||||
|
||||
Zdroj:
|
||||
- změna stavu: MySQL (vzp_stav_pojisteni)
|
||||
- filtr pacientů: Medicus (aktivně registrovaní)
|
||||
"""
|
||||
|
||||
import sys
|
||||
from pathlib import Path
|
||||
import pymysql
|
||||
|
||||
# ==========================================
|
||||
# PROJECT ROOT
|
||||
# ==========================================
|
||||
PROJECT_ROOT = Path(__file__).resolve().parent.parent
|
||||
sys.path.insert(0, str(PROJECT_ROOT))
|
||||
|
||||
from knihovny.medicus_db import MedicusDB
|
||||
|
||||
# ==========================================
|
||||
# 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"
|
||||
|
||||
# ==========================================
|
||||
# SQL – ZMĚNY 1 → X (BEZ OHLEDU NA REGISTRACI)
|
||||
# ==========================================
|
||||
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️⃣ Načíst aktivně registrované pacienty z Medicusu
|
||||
db = MedicusDB(HOST, DB_PATH)
|
||||
registered = db.get_active_registered_patients()
|
||||
db.close()
|
||||
|
||||
# vytvoříme množinu RC (rychlé filtrování)
|
||||
registered_rc = {rc for rc, *_ in registered}
|
||||
|
||||
print(f"Registrovaných pacientů: {len(registered_rc)}")
|
||||
|
||||
# 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]
|
||||
|
||||
print(f"Změny pojištění (registrovaní): {len(filtered)}\n")
|
||||
|
||||
# 4️⃣ Výpis reportu
|
||||
print("REPORT – ZMĚNA STAVU POJIŠTĚNÍ (REGISTROVANÍ)\n")
|
||||
|
||||
for r in filtered:
|
||||
pacient = f"{r['prijmeni']} {r['jmeno']}".strip()
|
||||
print(
|
||||
f"pacient {pacient}, "
|
||||
f"současný stav pojištění je \"{r['current_stav']}\", "
|
||||
f"ke změně došlo dne {r['change_date']} "
|
||||
f"(ze \"1\" na \"{r['change_stav']}\")"
|
||||
)
|
||||
|
||||
print("\nKONEC REPORTU.")
|
||||
|
||||
# ==========================================
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user