# 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 (97–111), 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 9–10 číslic za klíčovým slovem (CP, RC, ID…), nebo plain 9–10 čí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`