Files
Vladimir Buzalka a9c143ba24 notebookvb
2026-04-29 06:51:47 +02:00

6.1 KiB
Raw Permalink Blame History

MedicusWithClaudeKomplexniReport CLAUDE_NOTES

Co skript dělá

komplexni_report.py generuje komplexní Excel přehled ordinace. Soubor se ukládá do u:\Dropbox\!!!Days\Downloads Z230\YYYY-MM-DD_HH-MM-SS_Pacienti.xlsx. Předchozí verze (*Pacienti.xlsx) se před zápisem automaticky smažou.

Spuštění

C:\Python\python.exe komplexni_report.py

Trvá cca 10 minut (kvůli xlwings autofit přes celý Excel). Spouští se automaticky v noci → nevadí.

Připojení k DB

fdb.connect(
    host='localhost',
    database=r'c:\MEDICUS 3\data\medicus.FDB',
    user='sysdba', password='masterkey', charset='WIN1250'
)

Závislosti

pip install fdb openpyxl xlwings extract-msg beautifulsoup4 python-dateutil

Listy v Excelu (pořadí)

List Zdroj Popis
Registrovani registr + kar Aktivní registrovaní pacienti
Očkování ockzaz + registr + kar Záznamy o očkování registrovaných
Recepty recept + recept_epodani + kar Všechny recepty, eRECEPT čísla, ceny
Vykony dokladd + kar + vykony Všechny výkony (s platným číselníkem)
Neschopenky všechny nes + kar Všechny neschopenky
Neschopenky aktivní nes + kar Pouze aktivní (pracne='A')
Preventivni prohlidky dokladd + vykony Kódy 1021, 1022
INR dokladd + vykony Kód 1443
CRP dokladd + vykony Kódy 2230, 9111
Holter dokladd + vykony Kód 17129
Prostata dokladd + vykony Kódy 11301134
TOKS dokladd + vykony Kódy 1511815121
COVID dokladd + vykony Kód 1306
Streptest dokladd + vykony Kód 2220
Posudky řidičák HISTDOC (TYP=MOTORVO) + KAR Ruční posudky k řízení MV
ePosudky registr HISTDOC (TYP=EPOSMRO) + HISTDOC_EPOSUDEK + KAR Elektronická podání do centrálního registru

Pomocné funkce

sanitize(val)

Opraví znaky neplatné pro Excel:

  • µu
  • řídící znaky (ord < 32, kromě tab/LF/CR) → _
  • náhradní znaky Unicode (0xFFFE, 0xFFFF, surrogáty) → _

Použito ve všech listech kde hrozí problematická data z DB.

fmt(val)

Vrátí '' pro None, jinak zavolá sanitize().

add_vykony_sheet(sheet_name, kody)

Helper pro listy s výkony. Přijme název listu a seznam kódů výkonů. SQL: dokladd JOIN kar JOIN vykony WHERE kod IN (...) AND platnost kódu platí. Řazení: datum DESC, rodcis, kod.

pocet_dni(zacnes, konnes, pracne)

Výpočet délky neschopenky:

  • pracne='A' (aktivní) → dny od začátku do dnes
  • pracne='N' → dny od začátku do konce
  • jinak → "NA"

parse_data(data_str)

Parsuje key=value text z pole HISTDOC.DATA do slovníku. Každý řádek = jeden klíč/hodnota oddělené =.

parse_date(val)

Převede formát D:DD.MM.YYYY (jak ho ukládá Medicus) na datetime.date.

style_header(ws) / autofit_ws(ws)

Styl záhlaví (modrý fill, bílý tučný text, centrování) a šířky sloupců (max 50 znaků). Používají se jen na listech s posudky (ostatní listy řeší xlwings).


Listy s posudky detail

Posudky řidičák (MOTORVO)

Data jsou uložena v HISTDOC.DATA jako key=value text. Parsovaná pole:

Sloupec Zdroj v DATA
PorCislo PorCislo nebo HISTDOC.PORCISLO
DatumVyd DatumVyd (formát D:DD.MM.YYYY)
DatKonec DatKonec (formát D:DD.MM.YYYY)
DruhProh DruhProh
Posouzeni odvozeno z Posouzeni, Posouzeni2, ZpusobPodminka
ZpusobPodminka ZpusobPodminka
SkupinaPodminka SkupinaPodminka
Skupiny ZpusobJe

Logika Posouzeni:

  • Posouzeni2 = Tnezpůsobilý
  • ZpusobPodminka = B:1způsobilý s podmínkou
  • Posouzeni = Tzpůsobilý

Sloupec ePosudek: ANO pokud existuje záznam v HISTDOC s TYP='EPOSMRO' pro stejného pacienta (IDPACI) a stejné datum. Párování: (IDPACI, DATUM) přímá FK vazba mezi MOTORVO a EPOSMRO neexistuje. Buňka s ANO je zelená (fill + font).

Zebra pruhování: liché řádky bílé, sudé světle modré (DCE6F1).

ePosudky registr (EPOSMRO)

Elektronická podání do centrálního registru způsobilosti. Stát tuto funkci zavedl přibližně od aktualizace Medicusu (03/2026).

Data parsovaná z HISTDOC.DATA:

Sloupec Zdroj v DATA
DatumVyd DatumVystaveni
DatKonec PlatnostDo
DruhProhlidky DruhProhlidkyNazev
DruhPosudku DruhPosudkuNazev
Vysledek VysledekNazev
StavPosudku StavPosudkuNazev
TypAkce TypAkceNazev

Stavová pole z HISTDOC_EPOSUDEK:

  • ID_PODANI ID podání do registru
  • ODESLANO timestamp odeslání
  • STATUS_ODESL stav odpovědi z registru (O = odesláno)

Zneplatnění: StavPosudku = zneplatneny = lékař aktivně odvolal způsobilost (např. pacient prodělal mrtvici, epileptický záchvat atp.). Zneplatnění je samostatný EPOSMRO záznam, ne modifikace původního.


xlwings závěrečný krok

Po wb.save() se soubor otevře přes xlwings (vyžaduje plný Excel):

  1. sheet.autofit() na všech listech správné šířky sloupců
  2. Na listu Recepty: centrování sloupců C, E, F, G, I, M, N
  3. wb_xw.save() + zavření

xlwings je nutný pro spolehlivý autofit (openpyxl ho neumí přesně). Trvá ~10 minut, spouští se v noci.


Pořadí zpracování (pro debugování)

DB connect
→ smazání starých souborů
→ SQL dotazy (Registrovani, Očkování, Recepty, Výkony, Neschopenky)
→ add_vykony_sheet × 8
→ MOTORVO + EPOSMRO listy (s parsováním DATA)
→ autofilter na všech listech
→ con.close() + wb.save()
→ xlwings autofit + centrování
→ Hotovo.

Print výstup v konzoli ukazuje počty řádků každého listu užitečné pro kontrolu.


Rozšíření v budoucnu

  • Přidat další typy posudků (pracovní, vstupní, sportovní...) ze VS_POSUDKY
  • Případně sledovat stav podání EPOSMRO v čase (datum odeslání vs. datum posudku)
  • Automatické spouštění přes Windows Task Scheduler (jako faktury_report.py)