Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
3.0 KiB
Report: Pravidelná medikace z lékového záznamu
Soubor
report_server.py — HTTP server na portu 8765, generuje HTML report z MySQL (medicus).
Spuštění: .venv/Scripts/python report_server.py
Zdroj dat
Tabulky v MySQL (db medicus):
| Tabulka | Obsah |
|---|---|
predpis |
předepsané léky, ATC, datum, množství, návod |
vydej |
vydání léku lékárnou |
predepisujici |
lékař — UUID, jméno, IČZ, IČP |
vydavajici |
lékárník — UUID, jméno, PZS |
vzp_pracoviste |
VZP číselník IČP → odbornost (import týdně) |
Algoritmus pravidelnosti
Krok 1 — Základní metriky (SQL)
GROUP BY LEFT(atc, 5) -- ATC na 5. místě (4. úroveň)
pocet_predpisu = COUNT(DISTINCT predpis.id)
celkove_mnozstvi = SUM(mnozstvi)
avg_mnozstvi = AVG(mnozstvi)
rozpeti_dni = DATEDIFF(MAX(datum), MIN(datum))
Krok 2 — Výpočet normalizovaného intervalu (Python)
avg_interval = rozpeti_dni / (pocet_predpisu - 1) # průměr dní mezi předpisy
norm_interval = avg_interval / avg_mnozstvi # normalizováno na 1 balení
norm_interval = odhad, na kolik dní jedno balení vystačí.
Krok 3 — Klasifikace
| Kategorie | Podmínka |
|---|---|
| nepravidelný | pocet_predpisu < 2 nebo rozpeti_dni = 0 |
| dle potřeby (PRN) | většina návodů obsahuje klíčová slova: dle potřeby, p.p., D.p., při bolesti |
| pravidelný | norm_interval ≤ 100 dní |
| možná | norm_interval 100–185 dní |
| epizodický | norm_interval > 185 dní |
Důležité:
rozpeti_dni = 0znamená, že všechny předpisy byly vystaveny ve stejný den (lékař dal více balení najednou). Není to opakované předepisování — musí být klasifikováno jako nepravidelné.
Krok 4 — Řazení výstupu
- Pravidelné
- Možná pravidelné
- Epizodické
- PRN
V rámci kategorie sestupně dle počtu vydání.
Odbornost předepisujícího
JOIN: predpis → predepisujici → vzp_pracoviste
Číselník VZP je aktuální snapshot — neobsahuje historická data. Recepty starší než
platnost_od nejnovějšího záznamu pro dané IČP by JOIN na datum nesplnily.
Řešení: vždy vzít nejnovější záznam pro IČP bez ohledu na datum předpisu:
LEFT JOIN vzp_pracoviste vp
ON vp.icp = pre.icp
AND vp.id = (
SELECT id FROM vzp_pracoviste
WHERE icp = pre.icp
ORDER BY platnost_od DESC LIMIT 1
)
Odbornost se prakticky nemění — IČP ordinace praktického lékaře zůstane 001 bez ohledu
na datum předpisu.
Barevné kódování reportu
| Barva řádku | Kategorie |
|---|---|
| Zelená | pravidelný |
| Žlutá | možná pravidelný |
| Šedá | epizodický |
| Červená | dle potřeby (PRN) |
| Odznak odbornosti | Barva |
|---|---|
| Praktický lékař (001, 002) | zelená |
| Specialista | modrá |
| Neznámá | šedá |