diff --git a/Medevio/60 ScansProcessing/Extract_pacient_info_v1.0.py b/Medevio/60 ScansProcessing/Extract_pacient_info_v1.0.py index 172661d..d6eb804 100644 --- a/Medevio/60 ScansProcessing/Extract_pacient_info_v1.0.py +++ b/Medevio/60 ScansProcessing/Extract_pacient_info_v1.0.py @@ -27,6 +27,7 @@ import base64 import gc import io import json +import logging import os import re import shutil @@ -44,6 +45,7 @@ from pdf2image import convert_from_path sys.path.insert(0, str(Path(__file__).parent.parent)) from Knihovny.najdi_dropbox import get_dropbox_root +from Knihovny.central_logging import setup_logging # centrální logování → Loki přes gateway import tkinter as tk @@ -624,6 +626,7 @@ def _medicus_connect(): return fdb.connect(**FB_CONFIG) except Exception as e: print(f" [Medicus] Nepřipojeno: {e}") + logging.warning("Medicus nepřipojen: %s", e) return None def _lookup_by_rc(cur, rc_digits: str) -> dict | None: @@ -997,6 +1000,7 @@ def extract_info(pdf_path: Path, known_patient: str | None = None, known_rc: str return {"nazev_souboru": None, "raw": raw} except Exception as e: print(f" VAROVÁNÍ: Claude API selhalo ({e}) — otevírám dialog pro ruční vyplnění.") + logging.exception("Claude Vision API selhalo (soubor %s): %s", pdf_path.name, e) return {"nazev_souboru": None} @@ -1081,6 +1085,7 @@ def generate_name_variants(info: dict, nazev_prvni: str) -> list[str]: except Exception as e: print(f" VAROVÁNÍ: generování variant selhalo ({e})") + logging.warning("Generování variant názvů selhalo: %s", e) return [nazev_prvni] if nazev_prvni else [] @@ -1327,6 +1332,7 @@ def _present_file(analyzed: dict): set_single_page_view(dest) pdf_path.unlink() print(f" ✓ Uloženo: {dest.name}") + logging.info("Uložen dokument: %s", dest.name) for t in temp_files: t.unlink(missing_ok=True) @@ -1360,6 +1366,7 @@ def process_folder(folder: Path): analyzed = next_future.result() except Exception as e: print(f" CHYBA při analýze {f.name}: {e}") + logging.exception("Chyba při analýze souboru %s: %s", f.name, e) if i + 1 < len(files): next_future = executor.submit(_analyze_file, files[i + 1]) continue @@ -1373,28 +1380,42 @@ def process_folder(folder: Path): _present_file(analyzed) except Exception as e: print(f" CHYBA při zpracování {f.name}: {e}") + logging.exception("Chyba při zpracování souboru %s: %s", f.name, e) print("\nHotovo.") + logging.info("Dávka dokončena | zpracováno souborů=%d", len(files)) if __name__ == "__main__": import time as _time + # Centrální logování (Loki přes gateway). keep_file=False — skript dosud + # logoval jen do konzole přes print(), ty zůstávají. Token + gateway se + # berou z ENV (CENTRAL_LOG_TOKEN, CENTRAL_LOG_GATEWAY). + setup_logging("medevio_scans_extract", keep_file=False) + PROCESSED.mkdir(exist_ok=True) TO_PROCESS.mkdir(exist_ok=True) target = Path(sys.argv[1]) if len(sys.argv) > 1 else TO_PROCESS _start = _time.time() + logging.info("Start zpracování | cíl=%s", target) - if target.is_file(): - process_file(target) - elif target.is_dir(): - process_folder(target) - else: - print("Použití: python extract_patient_info_novy.py [soubor.pdf nebo složka]") - sys.exit(1) + try: + if target.is_file(): + process_file(target) + elif target.is_dir(): + process_folder(target) + else: + print("Použití: python extract_patient_info_novy.py [soubor.pdf nebo složka]") + logging.error("Neplatný cíl: %s", target) + sys.exit(1) + except Exception: + logging.exception("Neočekávaný pád skriptu") + raise elapsed = _time.time() - _start print(f"\n{'─'*50}") print(f" Celková cena API: ${_total_cost:.4f} ({_total_cost*25:.2f} Kč)") print(f" Celková doba: {int(elapsed//60)}m {int(elapsed%60)}s") print(f"{'─'*50}") + logging.info("Konec | cena_USD=%.4f | doba_s=%d", _total_cost, int(elapsed)) diff --git a/Medevio/60 ScansProcessing/corrections.json b/Medevio/60 ScansProcessing/corrections.json index f2dcb65..1b62b08 100644 --- a/Medevio/60 ScansProcessing/corrections.json +++ b/Medevio/60 ScansProcessing/corrections.json @@ -1882,5 +1882,53 @@ { "original": "405712023 2026-06-05 Pilná, Marta [EKG] [bez hodnocení].pdf", "corrected": "405712023 2026-06-05 Pilná, Marta [EKG] [bez hodnocení].pdf" + }, + { + "original": "400510088 2026-05-18 Kameník, Jaroslav [LZ léčba bolesti] [kontrola, M511 radikulopatie + polyneuropatie NS, vířivka isotherm. obě DK 7x, ko za půl roku].pdf", + "corrected": "400510088 2026-05-18 Kameník, Jaroslav [LZ rehabilitace] [kontrola, M511 radikulopatie + polyneuropatie NS, vířivka isotherm. obě DK 7x, ko za půl roku].pdf" + }, + { + "original": "496219079 2025-08-14 Jindrová, Jiskra [LZ kardiologie] [Nevýznamná aortální regurgitace 1-2/4 ke sledování, ko za půl roku].pdf", + "corrected": "496219079 2025-08-14 Jindrová, Jiskra [LZ kardiologie] [Nevýznamná aortální regurgitace 1-24 ke sledování, ko za půl roku].pdf" + }, + { + "original": "496219079 2025-10-01 Jindrová, Jiskra [LZ cévní] [CVD CEAP 4s, povrch. žíly bez významné insuficience, ko 3/2026].pdf", + "corrected": "496219079 2025-10-01 Jindrová, Jiskra [LZ cévní] [CVD CEAP 4s, povrch. žíly bez významné insuficience, ko 32026].pdf" + }, + { + "original": "7755035376 2026-06-08 Yates, Hana [EKG] [bez hodnocení].pdf", + "corrected": "7755035376 2026-06-08 Yates, Hana [EKG] [bez hodnocení].pdf" + }, + { + "original": "6158201456 2026-06-08 Hradilová, Zdenka [EKG] [bez hodnocení].pdf", + "corrected": "6158201456 2026-06-08 Hradilová, Zdenka [EKG] [bez hodnocení].pdf" + }, + { + "original": "0356030983 2022-05-11 Pelcová, Eliška [Výpis ze zdravotní dokumentace] [Eutrof. 58.7kg/165cm, polyvalentní alergie, migrény, atop. ekzém, funk. blokáda C páteře].pdf", + "corrected": "0356030983 2022-05-11 Pelcová, Eliška [Výpis ze zdravotní dokumentace] [Eutrof. 58.7kg165cm, polyvalentní alergie, migrény, atop. ekzém, funk. blokáda C páteře].pdf" + }, + { + "original": "480529219 2026-06-04 Nytra, Vlastimil [LZ urologie] [PIRADS 4 k fúzní Bx prostaty, PSA 06/2026 8.611, ko 23JUL2026].pdf", + "corrected": "480529219 2026-06-04 Nytra, Vlastimil [LZ urologie] [PIRADS 4 k fúzní Bx prostaty, PSA 062026 8.611, ko 23JUL2026].pdf" + }, + { + "original": "6162102023 2018-08-20 Vandirkova, Tetjana [EKG] [předoper, sinusový rytmus 60/min, intermed poloha, fyziologický záznam].pdf", + "corrected": "6162102023 2018-08-20 Vandirkova, Tetjana [EKG] [předoper, sinusový rytmus 60min, intermed poloha, fyziologický záznam].pdf" + }, + { + "original": "6405250808 2026-05-29 Švéda, Jan [Laboratoř] [dg. Z000, CKD-EPI 1.25 ml/s CHRIG2, HDL 0.94 (↓), P_Glukóza 5.9 (↑)].pdf", + "corrected": "6405250808 2026-05-29 Švéda, Jan [Laboratoř] [dg. Z000, CKD-EPI 1.25 mls CHRIG2, HDL 0.94 (↓), P_Glukóza 5.9 (↑)].pdf" + }, + { + "original": "6758120446 2026-06-01 Bečicová, Markéta [Laboratoř] [dg. N309 - kultivace moči: kontaminace, směs mikroflóry 10E3 CFU/ml].pdf", + "corrected": "6758120446 2026-06-01 Bečicová, Markéta [Laboratoř] [dg. N309 - kultivace moči kontaminace, směs mikroflóry 10E3 CFUml].pdf" + }, + { + "original": "8004110081 2016-03-07 Čuda, Petr [LZ ORL] [stp tonsilitidem, lipoma ? epiglottidis, zítra incize útvaru na ling. ploše epiglottis].pdf", + "corrected": "8004110081 2016-03-07 Čuda, Petr [LZ ORL] [stp tonsilitidem, lipoma epiglottidis, zítra incize útvaru na ling. ploše epiglottis].pdf" + }, + { + "original": "9062110431 2026-06-03 Chriti Vinš, Jeanette [Laboratoř] [dg. Z000, S_AST <0.13 (↓)].pdf", + "corrected": "9062110431 2026-06-03 Chriti Vinš, Jeanette [Laboratoř] [dg. Z000, S_AST 0.13 (↓)].pdf" } ] \ No newline at end of file