Z230
This commit is contained in:
@@ -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, 60–89 → CHRI G2, 45–59 → CHRI G3a, 30–44 → CHRI G3b, 15–29 → 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é
|
||||
|
||||
Reference in New Issue
Block a user