""" paths.py — sdílené cesty a souborové utility pro IWRS pipeline. Verze: 1.0 | Datum: 2026-06-10 Tok souborů: IWRS/Incoming/ — sem padají všechny stažené reporty (pacienti i léky) IWRS/Incoming/Processed/ — sem se přesouvají po úspěšném importu do MongoDB Při chybě importu soubor zůstává v Incoming/ a zpracuje se při příštím běhu. """ import os import shutil import datetime IWRS_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) INCOMING_DIR = os.path.join(IWRS_DIR, "Incoming") PROCESSED_DIR = os.path.join(INCOMING_DIR, "Processed") STUDIES = ["77242113UCO3001", "42847922MDD3003"] def ensure_dirs(): os.makedirs(INCOMING_DIR, exist_ok=True) os.makedirs(PROCESSED_DIR, exist_ok=True) def unique_path(directory, stem, ext=".xlsx"): """Cesta bez kolize — při kolizi přidá ' HHMM' před příponu.""" path = os.path.join(directory, f"{stem}{ext}") if not os.path.exists(path): return path time_tag = datetime.datetime.now().strftime("%H%M") return os.path.join(directory, f"{stem} {time_tag}{ext}") def move_done(path, done_dir=None): """Přesune zpracovaný soubor do Processed/. Kolize → přepíše (Mongo už má aktuální data, soubor je jen archiv). """ dst_dir = done_dir or PROCESSED_DIR os.makedirs(dst_dir, exist_ok=True) dst = os.path.join(dst_dir, os.path.basename(path)) if os.path.exists(dst): os.remove(dst) shutil.move(path, dst) def sorted_by_mtime(paths): """Nejstarší první, bez Excel lock souborů (~$...).""" return sorted( (p for p in paths if not os.path.basename(p).startswith("~$")), key=os.path.getmtime, )