mirror of
https://github.com/Ladebeze66/llm_ticket3.git
synced 2025-12-13 17:37:05 +01:00
67 lines
2.2 KiB
Python
67 lines
2.2 KiB
Python
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
|