import os import json import logging from typing import Dict, Any, Optional logger = logging.getLogger("TicketDataLoader") class TicketDataLoader: """ Charge uniquement les tickets au format JSON pour le pipeline. """ def charger(self, chemin_fichier: str) -> Dict[str, Any]: """ Charge un ticket JSON depuis un chemin de fichier. Args: chemin_fichier: str - chemin complet vers le fichier JSON Returns: dict - contenu JSON enrichi de métadonnées """ if not os.path.exists(chemin_fichier): raise FileNotFoundError(f"Fichier introuvable : {chemin_fichier}") try: with open(chemin_fichier, "r", encoding="utf-8") as f: donnees = json.load(f) # Ajout de métadonnées utiles if "metadata" not in donnees: donnees["metadata"] = {} donnees["metadata"]["source_file"] = chemin_fichier donnees["metadata"]["format"] = "json" return donnees except Exception as e: logger.error(f"Erreur lors du chargement du ticket : {e}") raise def trouver_ticket(self, ticket_dir: str, ticket_id: str) -> Optional[str]: """ Tente de retrouver le chemin du rapport JSON d'analyse d'un ticket. Args: ticket_dir: str - chemin du répertoire d'extraction du ticket ticket_id: str - code du ticket (ex: T1234) Returns: str | None - chemin du fichier JSON ou None si non trouvé """ rapport_dir = os.path.join(ticket_dir, f"{ticket_id}_rapports") if os.path.isdir(rapport_dir): for fichier in os.listdir(rapport_dir): if fichier.endswith(".json") and ticket_id in fichier: return os.path.join(rapport_dir, fichier) # fallback : recherche directe dans l'extraction si besoin for fichier in os.listdir(ticket_dir): if fichier.endswith(".json") and ticket_id in fichier and not fichier.startswith("ticket_"): return os.path.join(ticket_dir, fichier) logger.warning(f"Aucun rapport JSON trouvé pour {ticket_id} dans {ticket_dir}") return None