From 194ac6c62e87a3c2552144c80f54f82b8df02a90 Mon Sep 17 00:00:00 2001 From: "vladimir.buzalka" Date: Mon, 4 May 2026 12:47:00 +0200 Subject: [PATCH] z230 --- Medevio/70 DěleníSouboruPDF/NOTES.md | 66 ++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Medevio/70 DěleníSouboruPDF/NOTES.md diff --git a/Medevio/70 DěleníSouboruPDF/NOTES.md b/Medevio/70 DěleníSouboruPDF/NOTES.md new file mode 100644 index 0000000..a425a56 --- /dev/null +++ b/Medevio/70 DěleníSouboruPDF/NOTES.md @@ -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 (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`