This commit is contained in:
2026-04-28 09:59:40 +02:00
parent 90bd0ecdf5
commit f31b271e93
6 changed files with 131 additions and 11 deletions
+24 -10
View File
@@ -40,10 +40,13 @@ def _load_env():
_load_env()
POPPLER_PATH = r"C:/Poppler/Library/bin"
CORRECTIONS = True # True = corrections.json se načítá a ukládá; False = ignorovat
_DROPBOX = Path(get_dropbox_root())
TO_PROCESS = _DROPBOX / r"Ordinace\Dokumentace_ke_zpracování\Ricoh Fi-8040\KeZpracování"
PROCESSED = _DROPBOX / r"Ordinace\Dokumentace_ke_zpracování\Ricoh Fi-8040\Zpracováno"
CORRECTIONS_FILE = Path(__file__).parent / "corrections.json"
NAMING_RULES_FILE = Path(__file__).parent / "naming_rules.md"
DOKUMENTACE = _DROPBOX / r"Ordinace\Dokumentace_zpracovaná"
import threading
@@ -180,6 +183,8 @@ def load_corrections() -> list[dict]:
return []
def save_correction(original: str, corrected: str):
if not CORRECTIONS:
return
corrections = load_corrections()
for c in corrections:
if c["original"] == original and c["corrected"] == corrected:
@@ -190,7 +195,16 @@ def save_correction(original: str, corrected: str):
)
print(f" ✓ Korekce uložena ({len(corrections)} celkem)")
def load_naming_rules() -> str:
if NAMING_RULES_FILE.exists():
content = NAMING_RULES_FILE.read_text(encoding="utf-8").strip()
if content:
return f"Pravidla pro pojmenování souborů (dodržuj vždy):\n{content}\n\n"
return ""
def build_corrections_prompt() -> str:
if not CORRECTIONS:
return ""
corrections = load_corrections()
if not corrections:
return ""
@@ -221,6 +235,7 @@ def extract_info(pdf_path: Path) -> dict:
image_b64 = base64.standard_b64encode(buf.getvalue()).decode("utf-8")
prompt = (
load_naming_rules() +
build_corrections_prompt() +
"Toto je naskenovaná lékařská zpráva v češtině. "
"Vrať JSON s těmito poli:\n"
@@ -235,11 +250,7 @@ def extract_info(pdf_path: Path) -> dict:
"- \"poznamka\": krátká klinická poznámka česky, max 80 znaků. "
"DŮLEŽITÉ: pokud zpráva obsahuje sekci \"Závěr:\" nebo \"Závěr vyšetření:\", "
"použij VÝHRADNĚ obsah této sekce — je nejdůležitější. "
"Teprve pokud závěr chybí, shrň obsah z celé zprávy. "
"U laboratorních výsledků uváděj POUZE hodnoty mimo normu (patologické nálezy) — hodnoty v normě vynech. "
"Osmolalitu nikdy nezmiňuj ani jako patologický nález. "
"Pokud výsledky obsahují glomerulární filtraci (eGFR nebo C_CKD-EPI), přidej její klasifikaci velkými písmeny podle CKD-EPI: "
"eGFR ≥ 90 → CHRI G1, 6089 → CHRI G2, 4559 → CHRI G3a, 3044 → CHRI G3b, 1529 → CHRI G4, < 15 → CHRI G5.\n"
"Teprve pokud závěr chybí, shrň obsah z celé zprávy.\n"
"- \"nazev_souboru\": název souboru ve formátu "
"\"{rodne_cislo} {datum_zpravy} {Příjmení}, {Jméno} [{typ_dokumentu}] [{poznamka}].pdf\" "
"(jméno bez titulu, RČ bez lomítka)\n"
@@ -314,6 +325,10 @@ def run_variant_picker(variants_data: list) -> str | None:
capture_output=True, text=True, encoding="utf-8",
)
tmp.unlink(missing_ok=True)
if proc.returncode != 0 or not proc.stdout.strip():
print(f" [variant_picker] returncode={proc.returncode}")
if proc.stderr.strip():
print(f" [variant_picker] CHYBA:\n{proc.stderr.strip()}")
out = proc.stdout.strip()
return json.loads(out).get("chosen") if out else None
@@ -410,11 +425,10 @@ def process_file(pdf_path: Path):
PROCESSED.mkdir(exist_ok=True)
dest = PROCESSED / final_name
if dest.exists():
print(f" VAROVÁNÍ: '{final_name}' již existuje, přeskakuji.")
else:
shutil.copy2(chosen, dest)
pdf_path.unlink()
print(f" ✓ Uloženo: {dest.name}")
print(f" Přepisuji existující: {dest.name}")
shutil.copy2(chosen, dest)
pdf_path.unlink()
print(f" ✓ Uloženo: {dest.name}")
for t in temp_files:
t.unlink(missing_ok=True) # originál mezi temp_files není, je bezpečné