Přidán podprojekt Recepty (eRecept SÚKL)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
# 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)
|
||||
```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 = 0` znamená, ž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
|
||||
1. Pravidelné
|
||||
2. Možná pravidelné
|
||||
3. Epizodické
|
||||
4. 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:
|
||||
```sql
|
||||
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á |
|
||||
Reference in New Issue
Block a user