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

107 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ý (dnešní) stav pojištění je "X",
ke změně došlo dne Y, kdy stav byl "Z"
Používá pouze tabulku vzp_stav_pojisteni
Kompatibilní s ONLY_FULL_GROUP_BY
"""
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 REPORT
# ==========================================
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í (poslední) 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
-- první den změny po posledním stavu = '1'
(
SELECT p2.rc, p2.k_datu, p2.stav
FROM vzp_stav_pojisteni p2
JOIN (
SELECT rc, MIN(k_datu) AS change_date
FROM vzp_stav_pojisteni
WHERE stav <> '1'
AND k_datu > (
SELECT MAX(k_datu)
FROM vzp_stav_pojisteni t
WHERE t.rc = vzp_stav_pojisteni.rc
AND t.stav = '1'
)
GROUP BY rc
) y
ON y.rc = p2.rc
AND y.change_date = p2.k_datu
) chg
ON chg.rc = cur.rc
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:
jmeno = f"{r['prijmeni']} {r['jmeno']}".strip()
print(
f"pacient {jmeno}, "
f"současný (dnešní) stav pojištění je \"{r['current_stav']}\", "
f"ke změně došlo dne {r['change_date']}, "
f"kdy stav byl \"{r['change_stav']}\""
)
print("\nKONEC REPORTU.")
# ==========================================
if __name__ == "__main__":
main()