Files
ordinaceprojekt/Medevio/70 DěleníSouboruPDF/NOTES.md
T
2026-05-04 12:47:00 +02:00

3.0 KiB
Raw Blame History

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