feat: output miroir de input, viewer lisible, mode 100% local

- CLI accepte plusieurs chemins en entrée (nargs="*")
- Un dossier patient passé directement utilise son nom comme subdir
- Filtres Jinja format_dossier_name (15_23096332 → Dossier 23096332)
  et format_doc_name (CRO_xxx_cim10 → CRO, Trackare, Fusionné)
- Sidebar : noms lisibles, fusionné mis en avant (★)
- NER CamemBERT en local_files_only (aucun appel réseau)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
dom
2026-02-11 22:52:10 +01:00
parent 31c29078a1
commit b38f87ac7a
5 changed files with 66 additions and 25 deletions

View File

@@ -144,9 +144,9 @@ def main(input_path: str | None = None) -> None:
)
parser.add_argument(
"input",
nargs="?",
default=input_path or "input/",
help="Chemin vers un PDF ou un dossier de PDFs (défaut: input/)",
nargs="*",
default=[input_path or "input/"],
help="Chemin(s) vers des PDFs, dossiers patients, ou le dossier racine (défaut: input/)",
)
parser.add_argument(
"--no-ner",
@@ -209,28 +209,34 @@ def main(input_path: str | None = None) -> None:
if args.no_rag:
_use_rag = False
input_p = Path(args.input)
input_paths = args.input
# Collecte des groupes (pdfs, subdir) à traiter
groups: list[tuple[list[Path], str | None]] = []
if input_p.is_file():
groups.append(([input_p], None))
elif input_p.is_dir():
# PDFs à la racine
root_pdfs = sorted(input_p.glob("*.pdf"))
if root_pdfs:
groups.append((root_pdfs, None))
for p in input_paths:
input_p = Path(p)
if input_p.is_file():
# Fichier unique → subdir = nom du dossier parent (si ce n'est pas input/)
subdir = input_p.parent.name if input_p.parent.name != "input" else None
groups.append(([input_p], subdir))
elif input_p.is_dir():
# Vérifier s'il y a des PDFs directement dans ce dossier
root_pdfs = sorted(input_p.glob("*.pdf"))
# Vérifier s'il y a des sous-dossiers avec PDFs
sub_dirs = [c for c in sorted(input_p.iterdir()) if c.is_dir() and list(c.glob("*.pdf"))]
# Sous-dossiers directs (un seul niveau)
for child in sorted(input_p.iterdir()):
if child.is_dir():
sub_pdfs = sorted(child.glob("*.pdf"))
if sub_pdfs:
if sub_dirs:
# C'est un dossier racine (comme input/) → traiter chaque sous-dossier
for child in sub_dirs:
sub_pdfs = sorted(child.glob("*.pdf"))
groups.append((sub_pdfs, child.name))
else:
logger.error("Chemin introuvable : %s", input_p)
sys.exit(1)
elif root_pdfs:
# C'est un dossier patient directement → utiliser son nom comme subdir
groups.append((root_pdfs, input_p.name))
else:
logger.error("Chemin introuvable : %s", input_p)
sys.exit(1)
total = sum(len(pdfs) for pdfs, _ in groups)
if total == 0: