import joblib import os MODEL_UNIFIED_PATH = "../pickle_result/nexus_modele_final_V35.pkl" # ===================================================================== # MATRICE LÉGALE DE L'ÉTAT FRANÇAIS (SGDSN / DISPOSITIF ORSEC) # Cloisonnement strict des cibles par domaine d'intervention # ===================================================================== MATRICE_CIBLES_ISOLEES = { "MÉDICAL": {"CITOYEN": 1, "VIP_LOCAL": 2, "PRESIDENT": 5}, "POLICE": {"CITOYEN": 1, "VIP_LOCAL": 2, "PRESIDENT": 5}, "POMPIER": {"CITOYEN": 1, "VIP_LOCAL": 2, "PRESIDENT": 5}, "CYBERSÉCURITÉ": {"CITOYEN": 1, "VIP_LOCAL": 3, "PRESIDENT": 4}, "ÉNERGIE & INFRASTRUCTURES": {"CITOYEN": 1, "VIP_LOCAL": 3, "PRESIDENT": 4}, "TRANSPORT & MOBILITÉ": {"CITOYEN": 1, "VIP_LOCAL": 3, "PRESIDENT": 4}, "RISQUES ENVIRONNEMENTAUX": {"CITOYEN": 1, "VIP_LOCAL": 3, "PRESIDENT": 3}, "SERVICES URBAINS": {"CITOYEN": 1, "VIP_LOCAL": 2, "PRESIDENT": 2}, "ASSISTANCE SOCIALE": {"CITOYEN": 1, "VIP_LOCAL": 2, "PRESIDENT": 2}, "ANIMALIER": {"CITOYEN": 1, "VIP_LOCAL": 2, "PRESIDENT": 2}, "DIGITAL SUPPORT": {"CITOYEN": 1, "VIP_LOCAL": 1, "PRESIDENT": 1} } class QualificationEngine: def __init__(self): if os.path.exists(MODEL_UNIFIED_PATH): self.model = joblib.load(MODEL_UNIFIED_PATH) self.mode = "ML" print(f"🔌 Moteur d'inférence chargé : {MODEL_UNIFIED_PATH}") else: self.model = None self.mode = "SIMULATION" print(f"⚠️ ERREUR FATALE : Modèle ML introuvable à {MODEL_UNIFIED_PATH}. Mode SIMULATION (0.2) activé.") def traduire_cible_ml(self, cible_id): cible_id = int(cible_id) if cible_id == 0: return "CITOYEN" elif cible_id == 2: return "VIP_LOCAL" elif cible_id == 4: return "PRESIDENT" return "CITOYEN" def calculer_priorite_sgdsn(self, domaine, severite, impact, profil_