z230
This commit is contained in:
@@ -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`
|
||||
Reference in New Issue
Block a user