diff --git a/Medevio/60 ScansProcessing/CLAUDE.md b/Medevio/60 ScansProcessing/CLAUDE.md index 31798e2..0627566 100644 --- a/Medevio/60 ScansProcessing/CLAUDE.md +++ b/Medevio/60 ScansProcessing/CLAUDE.md @@ -2,46 +2,48 @@ Agent pro zpracování naskenovaných lékařských zpráv (PDF i JPG/PNG). -## Skripty +## Hlavní skript -### `extract_patient_info.py` — hlavní agent -Spuštění: `python extract_patient_info.py` (bez argumentů = celá složka ToProcess) +### `Extract_pacient_info_v1.0.py` +Verze: 1.0 | Datum: 2026-06-02 | Autor: Vladimír Bužalka + +Spuštění: `python Extract_pacient_info_v1.0.py` (bez argumentů = celá složka KeZpracování) **Workflow:** -1. Načte soubory z `ToProcess/` -2. Claude Vision API (sonnet-4-6) extrahuje: jméno, RČ, datum, typ dokumentu, poznámku, navržený název, rotaci -3. Ověří pacienta v Medicus Firebird (tabulka KAR, pole RODCIS/PRIJMENI/JMENO) -4. Fuzzy matching RČ při nenalezení: vynechání cifry + záměna podobných (0↔8, 1↔7, 5↔6, 3↔8) + checksum /11 - - Fallback: pokud RČ stále nenalezeno, vyhledá dle příjmení+jméno (z Claude) — status `by_name` / `by_name_multi` -5. Upozorní na duplicitu v `U:\Dropbox\Ordinace\Dokumentace_zpracovaná\` -6. Interaktivní schválení / oprava názvu -7. JPG/PNG → skutečné PDF (správná orientace, DPI=150, quality=80) -8. Přesun do `Processed/`, smazání z `ToProcess/` -9. Opravy názvů se ukládají do `corrections.json` jako few-shot příklady +1. Načte soubory z `KeZpracování/` +2. Claude Vision API (sonnet-4-6) — 1. volání s obrázkem: extrahuje jméno, RČ, datum, typ dokumentu, poznámku, navržený název, rotaci +3. Claude API — 2. volání (jen text): vygeneruje 5 variant názvu dle naming_rules.md, deduplikuje vůči 1. návrhu +4. Ověří pacienta v Medicus Firebird (tabulka KAR); fuzzy matching RČ + fallback na jméno +5. Zkontroluje duplicity v archivu `Dokumentace_zpracovaná/` +6. Zobrazí hlavní viewer (tkinter, celá šířka monitoru): + - Horní část: náhled originálu | náhled vybrané duplicity | seznam duplicit (Text widget s wrappingem) + - Spodní panel: info o pacientovi | textbox pro název (multiline, bílý) | návrhy pojmenování +7. Po schválení názvu nabídne 5 kompresních variant (300/200/150/120/96 DPI) k výběru +8. Uloží vybranou variantu do `Zpracováno/`, smaže originál +9. Opravy názvů se ukládají do `corrections.json` jako few-shot příklady (jen pokud se liší od všech navržených variant) -**Formát názvu souboru:** -`{RČ} {YYYY-MM-DD} {Příjmení}, {Jméno} [{typ dokumentu}] [{poznámka}].pdf` +**EKG větev:** PDFCreator metadata → rotace o 90° → Tesseract OCR → Medicus ověření -Příklady typů: `LZ chirurgie`, `LZ kardiologie`, `Laboratoř`, `CT břicha`, `kolonoskopie`, `poukaz FT` +**Formát názvu souboru:** viz `naming_rules.md` -### `jpg_to_pdf.py` — konverze obrázku na PDF -``` -python jpg_to_pdf.py soubor.jpg [vystup.pdf] [rotace_ccw] -``` -- Opravuje EXIF orientaci -- Rotace: 0 / 90 / 180 / 270 (CCW) -- A4, DPI=150, quality=80, bez okrajů -- Používá se i interně z `extract_patient_info.py` +## Konfigurační soubory + +| Soubor | Účel | +|---|---| +| `naming_rules.md` | Pravidla pro pojmenování — předávají se Claudovi v každém volání | +| `corrections.json` | Few-shot příklady korekcí názvů z minulých běhů | +| `layout_settings.json` | Pozice a rozměry oken podle hostname počítače | ## Složky | Složka | Účel | |---|---| -| `ToProcess/` | Sem se házejí nové skeny (PDF, JPG, PNG) | -| `Processed/` | Správně pojmenované PDF po schválení | -| `U:\Dropbox\Ordinace\Dokumentace_zpracovaná\` | Finální archiv | +| `KeZpracování/` | Vstupní skeny (PDF, JPG, PNG) | +| `Zpracováno/` | Správně pojmenované PDF po schválení | +| `Dokumentace_zpracovaná/` | Finální archiv (Dropbox) — prohledává se kvůli duplicitám | +| `Testy/` | Archiv starších verzí skriptů | ## Konfigurace -- API klíč: `U:\Medevio\.env` → `ANTHROPIC_API_KEY` -- Medicus: `localhost:c:\medicus 3\data\medicus.fdb` (Firebird, SYSDBA) -- Few-shot korekce: `corrections.json` +- API klíč: `Medevio/.env` → `ANTHROPIC_API_KEY` +- Medicus Firebird: `reporter:c:\medicus\medicus.fdb` (SYSDBA) +- Layout oken: `layout_settings.json` — klíč = hostname.upper() (aktuálně: `Z230`) diff --git a/Medevio/60 ScansProcessing/extract_patient_info_novy.py b/Medevio/60 ScansProcessing/Extract_pacient_info_v1.0.py similarity index 97% rename from Medevio/60 ScansProcessing/extract_patient_info_novy.py rename to Medevio/60 ScansProcessing/Extract_pacient_info_v1.0.py index d14273b..3b497df 100644 --- a/Medevio/60 ScansProcessing/extract_patient_info_novy.py +++ b/Medevio/60 ScansProcessing/Extract_pacient_info_v1.0.py @@ -1,9 +1,27 @@ """ -Zpracování naskenovaných PDF — nová verze. -1. Preview originálu + Claude Vision API -2. Rename dialog -3. 5 variant komprese → uživatel vybere -4. Uložit do Processed, smazat originál +Extract_pacient_info_v1.0.py + +Verze: 1.0 +Datum: 2026-06-02 +Autor: Vladimír Bužalka + +Popis: + Zpracování naskenovaných lékařských dokumentů (PDF, JPG). + Skript projde soubory ve složce KeZpracování, pro každý: + 1. Zavolá Claude Vision API — extrahuje metadata pacienta a navrhne název souboru + 2. Zavolá Claude API podruhé — vygeneruje 5 variant názvu (bez obrázku) + 3. Ověří pacienta v databázi Medicus (Firebird) — fuzzy matching RČ, fallback na jméno + 4. Zkontroluje duplicity v archivu Dokumentace_zpracovaná + 5. Zobrazí hlavní viewer: náhled originálu | náhled duplicity | seznam duplicit + + spodní panel: info o pacientovi | textbox pro název | návrhy pojmenování + 6. Po schválení názvu nabídne 5 kompresních variant (300→96 DPI) k výběru + 7. Uloží vybranou variantu do složky Zpracováno, smaže originál + +Závislosti: + Python balíčky: anthropic, pdf2image, PyMuPDF (fitz), Pillow, fdb, pikepdf, pytesseract + Externí: Poppler, Tesseract OCR (jen EKG větev) + Systémové: Medicus Firebird DB, Dropbox, .env s ANTHROPIC_API_KEY + Soubory: naming_rules.md, corrections.json, layout_settings.json """ import base64 import gc