z230
This commit is contained in:
+221
-12
@@ -16,8 +16,210 @@ import fdb
|
||||
import pymysql
|
||||
import pymysql.cursors
|
||||
|
||||
# Kody odbornosti dle SUKL / VZP (posledni 3 cislice ICP)
|
||||
ODBORNOST = {
|
||||
# Základní ambulantní odbornosti
|
||||
"001": "Praktický lékař",
|
||||
"002": "Pediatr (prakt.)",
|
||||
"003": "Chirurgie",
|
||||
"004": "Ortopedie",
|
||||
"005": "ORL",
|
||||
"006": "Gynekologie",
|
||||
"007": "Urologie",
|
||||
"008": "Neurologie",
|
||||
"009": "Psychiatrie",
|
||||
"010": "Oftalmologie",
|
||||
"011": "Zubní lékařství",
|
||||
"012": "Dermatovenerologie",
|
||||
"013": "Infekční lékařství",
|
||||
"014": "Radiodiagnostika",
|
||||
"015": "Stomatochirurgie",
|
||||
"016": "Čelistní ortopedie",
|
||||
"017": "Dětská psychiatrie",
|
||||
"018": "Pneumologie",
|
||||
"019": "Anesteziologie",
|
||||
"020": "Rehabilitace",
|
||||
"021": "Radiodiagnostika",
|
||||
"022": "Radioterapie",
|
||||
"023": "Nukleární medicína",
|
||||
"024": "Klin. biochemie",
|
||||
"025": "Alergologie/imunologie",
|
||||
"026": "Hematologie",
|
||||
"027": "Soudní lékařství",
|
||||
"028": "Soudní psychiatrie",
|
||||
"029": "Lékařská genetika",
|
||||
"031": "Gastroenterologie",
|
||||
"032": "Nefrologie",
|
||||
"033": "Kardiologie",
|
||||
"034": "Endokrinologie/diab.",
|
||||
"035": "Revmatologie",
|
||||
"040": "Vnitřní lékařství",
|
||||
"041": "Geriatrie",
|
||||
"042": "Klin. farmakologie",
|
||||
"043": "Diabetologie",
|
||||
"044": "Endokrinologie",
|
||||
"045": "Hepatologie",
|
||||
"052": "Dětská neurologie",
|
||||
"060": "Dětská chirurgie",
|
||||
"065": "Plastická chirurgie",
|
||||
"066": "Cévní chirurgie",
|
||||
"067": "Kardiochirurgie",
|
||||
"072": "Foniatrie",
|
||||
"074": "Neurochirurgie",
|
||||
"077": "Maxilofaciální chir.",
|
||||
"079": "Hrudní chirurgie",
|
||||
"082": "Urologie",
|
||||
"083": "Andrologie",
|
||||
"085": "Proktologie",
|
||||
"091": "Gynekolog. onkologie",
|
||||
"092": "Reprodukční medicína",
|
||||
"096": "Léčebná rehabilitace",
|
||||
"097": "Fyzioterapie",
|
||||
# Interní a specializované odbornosti
|
||||
"101": "Vnitřní lékařství",
|
||||
"102": "Kardiologie",
|
||||
"104": "Kardiologie",
|
||||
"105": "Gastroenterologie",
|
||||
"106": "Hepatologie",
|
||||
"107": "Nefrologie",
|
||||
"108": "Nefrologie",
|
||||
"110": "Diabetologie",
|
||||
"111": "Endokrinologie",
|
||||
"114": "Pneumologie",
|
||||
"115": "Ftizeologie",
|
||||
"121": "Endokrinologie",
|
||||
"122": "Diabetologie",
|
||||
"129": "Andrologie",
|
||||
"143": "Psychiatrie",
|
||||
"144": "Psychoterapie",
|
||||
"145": "Adiktologie",
|
||||
"148": "Dětská psychiatrie",
|
||||
"155": "Oční onkologie",
|
||||
"156": "Hematologie",
|
||||
"157": "Hemostáza",
|
||||
"160": "Neurologie",
|
||||
"162": "Epileptologie",
|
||||
"163": "Dětská neurologie",
|
||||
"164": "Neurorehabilit.",
|
||||
"168": "Klin. neurofyziologie",
|
||||
"169": "Revmatologie",
|
||||
"174": "Ortoped. protetika",
|
||||
"181": "Infektologie",
|
||||
"183": "Tropická medicína",
|
||||
"185": "Mikrobiologie",
|
||||
"188": "Virologie",
|
||||
# Chirurgické a dětské odbornosti
|
||||
"200": "Stomatologie",
|
||||
"201": "Stomatochirurgie",
|
||||
"202": "Maxilofaciální chir.",
|
||||
"203": "Parodontologie",
|
||||
"204": "Ortodoncie",
|
||||
"205": "Zubní protetika",
|
||||
"206": "Dětská stomatologie",
|
||||
"220": "Pediatrie",
|
||||
"221": "Neonatologie",
|
||||
"222": "Dětská endokrinol.",
|
||||
"223": "Dětská gastroenterol.",
|
||||
"234": "Dětská hematologie",
|
||||
"239": "Dětská nefrologie",
|
||||
"243": "Dětská pneumologie",
|
||||
"245": "Dětská psychiatrie",
|
||||
"246": "Dětská revmatologie",
|
||||
"247": "Dětská kardiologie",
|
||||
"250": "Dětská neurologie",
|
||||
"251": "Dětská neurologie",
|
||||
"258": "Dětská onkologie",
|
||||
"261": "Dětská chirurgie",
|
||||
"262": "Dětská ortopedie",
|
||||
"263": "Urologie",
|
||||
"264": "Dětská stomatologie",
|
||||
"271": "Dětská klin. biochem.",
|
||||
"272": "Alergologie",
|
||||
"273": "Dětská alergologie",
|
||||
"281": "Dětská dermatologie",
|
||||
"282": "Dětská radiologie",
|
||||
"283": "Dětská neurochir.",
|
||||
"289": "Dětská kardiochir.",
|
||||
"291": "Dětská onkol. chir.",
|
||||
"294": "Dětská oftalmologie",
|
||||
"295": "Dětská gynekologie",
|
||||
# Onkologie a zobrazovací metody
|
||||
"300": "Onkologie",
|
||||
"301": "Klin. onkologie",
|
||||
"302": "Radiodiagnostika",
|
||||
"303": "Radioterapie",
|
||||
"304": "Nukleární medicína",
|
||||
"305": "Nukleární kardiologie",
|
||||
"316": "Klin. genetika",
|
||||
"319": "Soudní lékařství",
|
||||
"321": "Cytologie",
|
||||
"324": "Klin. onkologie",
|
||||
"333": "Onkologie",
|
||||
# Stomatologie (500-599)
|
||||
"501": "Zubní lékařství",
|
||||
"502": "Čelistní ortopedie",
|
||||
"503": "Stomatochirurgie",
|
||||
"508": "Parodontologie",
|
||||
"509": "Ortodoncie",
|
||||
"510": "Dětská stomatologie",
|
||||
"513": "Zubní protetika",
|
||||
"535": "Orální medicína",
|
||||
"555": "Stomatologie",
|
||||
"558": "Zubní lékařství",
|
||||
"559": "Stomatologie",
|
||||
"560": "Stomatologie",
|
||||
"562": "Stomatologie",
|
||||
"571": "Stomatologie",
|
||||
"574": "Stomatologie",
|
||||
"580": "Stomatologie",
|
||||
"581": "Stomatologie",
|
||||
"582": "Stomatologie",
|
||||
"584": "Stomatologie",
|
||||
"590": "Lékárenství",
|
||||
# Onkologie (600-699)
|
||||
"600": "Onkologie",
|
||||
"601": "Klin. onkologie",
|
||||
"603": "Onkologie",
|
||||
"606": "Radioterapie",
|
||||
"607": "Nukleární medicína",
|
||||
"615": "Onkologie",
|
||||
# Kardiochirurgie, ostatní (700+)
|
||||
"700": "Chirurgie",
|
||||
"701": "Cévní chirurgie",
|
||||
"702": "Hrudní chirurgie",
|
||||
"704": "Kardiochirurgie",
|
||||
"705": "Chirurgie",
|
||||
"706": "Plastická chirurgie",
|
||||
"719": "Dětská chirurgie",
|
||||
"721": "Ortopedie",
|
||||
"722": "Ortopedie",
|
||||
"723": "Ortopedie",
|
||||
# Fyzioterapie, rehabilitace (800+)
|
||||
"801": "Fyzioterapie",
|
||||
"802": "Ergoterapie",
|
||||
"852": "Fyzioterapie",
|
||||
"853": "Fyzioterapie",
|
||||
"858": "Fyzioterapie",
|
||||
"860": "Fyzioterapie",
|
||||
"862": "Fyzioterapie",
|
||||
"873": "Fyzioterapie",
|
||||
"880": "Rehabilitace",
|
||||
"881": "Endokrinologie",
|
||||
"885": "Rehabilitace",
|
||||
"889": "Rehabilitace",
|
||||
"890": "Rehabilitace",
|
||||
}
|
||||
|
||||
|
||||
def odbornost_z_icp(icp):
|
||||
"""Vrati nazev odbornosti z ICP kodu (posledni 3 cislice)."""
|
||||
if not icp or len(icp) < 3:
|
||||
return ""
|
||||
kod = icp[-3:]
|
||||
return ODBORNOST.get(kod, f"odb. {kod}")
|
||||
|
||||
# ── NASTAVENÍ ─────────────────────────────────────────────────────────────────
|
||||
RODNE_CISLO = "7/1234" # s lomitkem i bez lomitka
|
||||
RODNE_CISLO = "440802/018" # funguje s lomitkem i bez: 7309208104 nebo 730920/8104
|
||||
DATUM_OD = "01.01.2025" # None = vsechny predpisy
|
||||
# ─────────────────────────────────────────────────────────────────────────────
|
||||
|
||||
@@ -37,8 +239,8 @@ DB = dict(
|
||||
cursorclass = pymysql.cursors.DictCursor,
|
||||
)
|
||||
|
||||
SEP = "-" * 100
|
||||
SEP2 = "-" * 140
|
||||
SEP = "-" * 110
|
||||
SEP2 = "-" * 165
|
||||
|
||||
|
||||
def parse_datum(s, nazev):
|
||||
@@ -85,13 +287,14 @@ def tiskni_lekare(cur, pacient_id, prijmeni, jmena, datum_narozeni):
|
||||
cur.execute(
|
||||
"""
|
||||
SELECT pr.prijmeni, pr.jmena,
|
||||
pr.icp,
|
||||
CONCAT(pr.pzs_nazev, ', ', pr.ulice, ', ', pr.psc, ' ', pr.mesto) AS adresa,
|
||||
COUNT(*) AS pocet_predpisu
|
||||
FROM zprava z
|
||||
JOIN predpis p ON p.zprava_id = z.id
|
||||
JOIN predepisujici pr ON pr.lekar_kod = p.kod_predepisujiciho
|
||||
WHERE z.pacient_id = %s
|
||||
GROUP BY pr.lekar_kod, pr.prijmeni, pr.jmena, pr.pzs_nazev, pr.ulice, pr.psc, pr.mesto
|
||||
GROUP BY pr.lekar_kod, pr.prijmeni, pr.jmena, pr.icp, pr.pzs_nazev, pr.ulice, pr.psc, pr.mesto
|
||||
ORDER BY pocet_predpisu DESC
|
||||
""",
|
||||
(pacient_id,),
|
||||
@@ -102,11 +305,12 @@ def tiskni_lekare(cur, pacient_id, prijmeni, jmena, datum_narozeni):
|
||||
print(f" PACIENT: {prijmeni} {jmena} | nar. {datum_narozeni.strftime('%d.%m.%Y')}")
|
||||
print(SEP)
|
||||
print(f"\nPREDEPISUJICI LEKARI:")
|
||||
print(f"{'#':<4} {'Lekar':<30} {'Pracoviste a adresa':<55} {'Predpisu':>8}")
|
||||
print(f"{'#':<4} {'Lekar':<30} {'Odbornost':<25} {'Pracoviste a adresa':<50} {'Predpisu':>8}")
|
||||
print(SEP)
|
||||
for i, r in enumerate(rows, 1):
|
||||
lekar = f"{r['prijmeni']} {r['jmena']}"
|
||||
print(f"{i:<4} {lekar:<30} {r['adresa']:<55} {r['pocet_predpisu']:>8}")
|
||||
lekar = f"{r['prijmeni']} {r['jmena']}"
|
||||
odb = odbornost_z_icp(r['icp'])
|
||||
print(f"{i:<4} {lekar:<30} {odb:<25} {r['adresa']:<50} {r['pocet_predpisu']:>8}")
|
||||
if not rows:
|
||||
print(" Zadne predpisy nenalezeny.")
|
||||
|
||||
@@ -118,11 +322,13 @@ def tiskni_predpisy(cur, pacient_id, datum_od):
|
||||
cur.execute(
|
||||
f"""
|
||||
SELECT p.datum_vystaveni,
|
||||
COALESCE(v.nazev, '(nevyzvednuto)') AS vydany_lek,
|
||||
COALESCE(v.nazev, p.nazev) AS vydany_lek,
|
||||
v.nazev IS NULL AS nevyzvednuto,
|
||||
p.atc,
|
||||
p.navod,
|
||||
pr.prijmeni,
|
||||
pr.jmena,
|
||||
pr.icp,
|
||||
CONCAT(pr.pzs_nazev, ', ', pr.ulice, ', ', pr.psc, ' ', pr.mesto) AS adresa
|
||||
FROM zprava z
|
||||
JOIN predpis p ON p.zprava_id = z.id
|
||||
@@ -138,15 +344,18 @@ def tiskni_predpisy(cur, pacient_id, datum_od):
|
||||
|
||||
od_text = f"od {datum_od.strftime('%d.%m.%Y')}" if datum_od else "vse"
|
||||
print(f"\nVSECHNY PREDPISY ({od_text}) — celkem {len(rows)}:")
|
||||
print(f"{'#':<4} {'Datum':<12} {'Vydany lek':<30} {'ATC':<8} {'Navod':<25} {'Lekar':<25} Adresa")
|
||||
print(f"{'#':<4} {'Datum':<12} {'Vydany lek':<30} {'ATC':<8} {'Navod':<20} {'Lekar':<25} {'Odbornost':<22} Adresa")
|
||||
print(SEP2)
|
||||
for i, r in enumerate(rows, 1):
|
||||
datum = r["datum_vystaveni"].strftime("%d.%m.%Y")
|
||||
lekar = f"{r['prijmeni']} {r['jmena']}"
|
||||
lek = (r["vydany_lek"] or "")[:29]
|
||||
navod = (r["navod"] or "")[:24]
|
||||
lek = (r["vydany_lek"] or "")[:28]
|
||||
if r["nevyzvednuto"]:
|
||||
lek = f"{lek} *NV"
|
||||
navod = (r["navod"] or "")[:19]
|
||||
atc = (r["atc"] or "")
|
||||
print(f"{i:<4} {datum:<12} {lek:<30} {atc:<8} {navod:<25} {lekar:<25} {r['adresa']}")
|
||||
odb = odbornost_z_icp(r["icp"])[:21]
|
||||
print(f"{i:<4} {datum:<12} {lek:<30} {atc:<8} {navod:<20} {lekar:<25} {odb:<22} {r['adresa']}")
|
||||
if not rows:
|
||||
print(" Zadne predpisy nenalezeny.")
|
||||
print()
|
||||
|
||||
Reference in New Issue
Block a user