diff --git a/20 Ověření proti Medicus/10 Ověření proti medicus.py b/20 Ověření proti Medicus/10 Ověření proti medicus.py index 4feca44..4f2a04c 100644 --- a/20 Ověření proti Medicus/10 Ověření proti medicus.py +++ b/20 Ověření proti Medicus/10 Ověření proti medicus.py @@ -1,37 +1,114 @@ import pymysql from knihovny.medicus_db import MedicusDB - - # ========================================== # CONFIGURATION # ========================================== -HOST = "192.168.1.4" -DB_PATH = r"z:\Medicus 3\data\MEDICUS.FDB" +MEDICUS_HOST = "192.168.1.4" +MEDICUS_DB_PATH = r"z:\Medicus 3\data\MEDICUS.FDB" -# ========================================== -# MYSQL CONNECTION -# ========================================== -mysql = pymysql.connect( - host="192.168.1.76", - port=3307, - user="root", - password="Vlado9674+", - database="medevio", - charset="utf8mb4", - autocommit=True -) +MYSQL_CONFIG = { + "host": "192.168.1.76", + "port": 3307, + "user": "root", + "password": "Vlado9674+", + "database": "medevio", + "charset": "utf8mb4", + "autocommit": True +} # ========================================== # INIT CONNECTIONS # ========================================== -db = MedicusDB(HOST, DB_PATH) +print("Connecting to Medicus...") +medicus = MedicusDB(MEDICUS_HOST, MEDICUS_DB_PATH) + +print("Connecting to MySQL...") +mysql = pymysql.connect( + cursorclass=pymysql.cursors.DictCursor, + **MYSQL_CONFIG +) # ========================================== -# FETCH REGISTERED PATIENTS +# FETCH REGISTERED PATIENTS (MEDICUS) # ========================================== -patients = db.get_active_registered_patients() +print("Fetching registered patients from Medicus...") +patients = medicus.get_active_registered_patients(as_dict=True) -sqlcon= -select * from (select *, ROW_NUMBER() over (partition by rc order by k_datu desc) as rn from vzp_stav_pojisteni) t -where t.rn=1 and t.stav<>"1"; \ No newline at end of file +patients_by_rc = { + p["rodcis"]: p + for p in patients +} + +print(f"Loaded {len(patients_by_rc)} registered patients") + +# ========================================== +# FETCH LAST INSURANCE STATES (MYSQL) +# ========================================== +print("Fetching last insurance states from MySQL...") + +sql_last_states = """ +SELECT + rc, + stav +FROM ( + SELECT + rc, + stav, + ROW_NUMBER() OVER ( + PARTITION BY rc + ORDER BY k_datu DESC + ) AS rn + FROM vzp_stav_pojisteni +) t +WHERE t.rn = 1 +""" + +with mysql.cursor() as cur: + cur.execute(sql_last_states) + last_states = cur.fetchall() + +print(f"Loaded {len(last_states)} last insurance states") + +# ========================================== +# COMPARE & FIND NON-OK STATES +# ========================================== +suspected = [] + +for row in last_states: + rc = row["rc"] + stav = row["stav"] + + if rc in patients_by_rc and stav != "1": + p = patients_by_rc[rc] + suspected.append({ + "rc": rc, + "prijmeni": p["prijmeni"], + "jmeno": p["jmeno"], + "poj": p["poj"], + "stav": stav + }) + +# ========================================== +# OUTPUT +# ========================================== +print("\n==========================================") +print("PACIENTI S NEOK STAVEM POJIŠTĚNÍ") +print("==========================================") + +if not suspected: + print("✔️ Všichni registrovaní pacienti mají stav 1") +else: + for s in suspected: + print( + f'{s["rc"]} | {s["prijmeni"]} {s["jmeno"]} ' + f'| pojišťovna={s["poj"]} | stav={s["stav"]}' + ) + +print("\nCelkem nalezeno:", len(suspected)) + +# ========================================== +# CLEANUP +# ========================================== +medicus.close() +mysql.close() diff --git a/knihovny/medicus_db.py b/knihovny/medicus_db.py index b8de965..c652dfa 100644 --- a/knihovny/medicus_db.py +++ b/knihovny/medicus_db.py @@ -22,7 +22,7 @@ class MedicusDB: cols = [d[0].strip().lower() for d in self.cur.description] return [dict(zip(cols, row)) for row in self.cur.fetchall()] - def get_active_registered_patients(self): + def get_active_registered_patients(self, as_dict=False): sql = """ SELECT kar.rodcis, @@ -36,7 +36,9 @@ class MedicusDB: AND kar.rodcis IS NOT NULL AND kar.rodcis <> '' """ - return self.query(sql) # or self.query_dict(sql) + if as_dict: + return self.query_dict(sql) + return self.query(sql) def close(self): self.conn.close()