This commit is contained in:
2026-05-04 12:47:00 +02:00
parent eed6e192f1
commit 194ac6c62e
+66
View File
@@ -0,0 +1,66 @@
# 70 DěleníSouboruPDF
## Účel
Dělení vícestránkového PDF (hromadný sken ze skeneru Ricoh Fi-8040) na jednotlivé skupiny pacientů. Každá skupina = jeden výstupní PDF pojmenovaný podle RČ a jména pacienta z Medicus.
## Spuštění
```
python rozdelit_pdf.py [soubor.pdf]
```
Bez argumentu → file dialog (výchozí složka: Ricoh Fi-8040).
Pro vývoj: `TESTOVANI = True` + `PATH_TO_TESTFILE` na začátku skriptu.
## Workflow
1. Vyber vstupní PDF
2. UI se otevře, thumbnaily se renderují na pozadí
3. OCR běží na pozadí (Tesseract → Claude Vision fallback)
4. Jména a RČ se doplňují průběžně pod každou stránkou
5. Po dokončení OCR se auto-detekují hranice pacientů (červené čáry)
6. Ručně uprav hranice, přesuň nebo smaž stránky, otočte je
7. Enter → export do Split/
## Klávesnice (numerická)
| Klávesa | Akce |
|---------|------|
| `4` / `6` | navigace ←/→ |
| `7` / `9` | skok o 4 stránky |
| `5` / `Space` | přepni hranici pacienta před touto stránkou |
| `1` / `3` | přesuň stránku doleva / doprava |
| `/` | otočit CCW (counterclockwise) |
| `*` | otočit CW (clockwise) |
| `Del` / `.` | smaž stránku (vynech z exportu) |
| `Enter` | exportuj všechny skupiny |
| `Esc` | konec |
> Funguje s NumLock ON i OFF — detekce přes keycode (97111), ne keysym.
## OCR pipeline
1. **Tesseract** (`C:\Program Files\Tesseract-OCR\tesseract.exe`, lang=ces, 144 DPI)
2. **Regex** — hledá RČ ve formátu `XXXXXX/XXXX`, nebo 910 číslic za klíčovým slovem (CP, RC, ID…), nebo plain 910 číslic s validací (měsíc, den)
3. **Medicus Firebird** — lookup přes `fdb`, tabulka `KAR`, pole `RODCIS`
4. **Fuzzy matching** — 1. úroveň: záměna podobných číslic (0↔8, 1↔7, 5↔6, 6↔1, …) + vynechání/přidání číslice; 2. úroveň: kombinace dvou chyb, filtrováno checksumem `/11`
5. **Claude Vision fallback** — volá se když Tesseract nenašel RČ, nebo když Tesseract našel RČ ale Medicus říká `not_found`
## Cache
OCR výsledky se ukládají do `{pdf_stem}_ocr_cache.json` vedle vstupního PDF.
Obsahuje: `rc`, `medicus`, `tesseract_text`, `claude_raw`.
Druhé spuštění se stejným PDF je okamžité (cache se načte, OCR neběží).
Smazání cache = znovu spustí OCR.
## Auto-detekce hranic
Hranice se nastaví jen tam, kde **obě** sousední stránky mají RČ potvrzené v Medicus (`ok` nebo `fuzzy`) a patří různým pacientům. Stránky s `not_found` nebo bez RČ hranici nevyvolají — brání falešným hranicím z misreadů.
## Výstup
Složka: `{Dropbox}/Ordinace/Dokumentace_ke_zpracování/Ricoh Fi-8040/Split/`
Název souboru:
- Pokud známo RČ: `{RČ} {Příjmení}, {Jméno} split_{NNN}.pdf`
- Neznámý pacient: `split_{NNN}.pdf`
## Závislosti
- `PyMuPDF` (fitz) — rendering, manipulace PDF
- `pytesseract` + Tesseract OCR — primární OCR
- `Pillow` — rotace, thumbnail
- `fdb` — Firebird / Medicus
- `anthropic` — Claude Vision fallback
- `tkinter` — UI (součást Pythonu)
- `Knihovny/najdi_medicus.py`, `Knihovny/najdi_dropbox.py`