6.1 KiB
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 1130–1134 |
TOKS |
dokladd + vykony | Kódy 15118–15121 |
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 dnespracne='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 = T→nezpůsobilýZpusobPodminka = B:1→způsobilý s podmínkouPosouzeni = T→způ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 registruODESLANO– 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):
sheet.autofit()na všech listech – správné šířky sloupců- Na listu
Recepty: centrování sloupců C, E, F, G, I, M, N 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)