55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
"""
|
|
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,
|
|
)
|