Files
insurance/10 Tests/2026-01-17 01.py
2026-01-17 09:59:18 +01:00

109 lines
2.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
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Í
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")
Používá pouze tabulku vzp_stav_pojisteni
"""
import pymysql
# ==========================================
# MYSQL CONFIG
# ==========================================
MYSQL_CONFIG = {
"host": "192.168.1.76",
"port": 3307,
"user": "root",
"password": "Vlado9674+",
"database": "medevio",
"charset": "utf8mb4",
"cursorclass": pymysql.cursors.DictCursor,
}
# ==========================================
# SQL KOREKTNÍ DEFINICE ZMĚNY (1 → X)
# ==========================================
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
-- aktuální stav pacienta
(
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
-- poslední den pojištění
(
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
-- JEDEN konkrétní řádek změny (nejmenší ID)
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():
mysql = pymysql.connect(**MYSQL_CONFIG)
with mysql.cursor() as cur:
cur.execute(SQL)
rows = cur.fetchall()
mysql.close()
print("\nREPORT ZMĚNA STAVU POJIŠTĚNÍ\n")
for r in rows:
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()