[
  {
    "id": "olt-firmware-update",
    "title": "Mise a jour firmware OLT Raisecom 68xx",
    "category": "firmware",
    "equipment": "Raisecom ISCOM 6800/6860",
    "risk_level": "dangerous",
    "commands": [
      {
        "cmd": "show card",
        "description": "Affiche l'etat des cartes de controle (active/standby)",
        "risk": "safe",
        "notes": "Identifier quelle carte est inservice (active) et laquelle est standby avant toute operation"
      },
      {
        "cmd": "show version slot 9",
        "description": "Affiche la version firmware du slot 9 (system1/system2, active/committed)",
        "risk": "safe",
        "notes": "Sur le 6800, les cartes smca sont dans les slots 9 et 10"
      },
      {
        "cmd": "show version slot 10",
        "description": "Affiche la version firmware du slot 10",
        "risk": "safe",
        "notes": "Sur le 6800, les cartes smca sont dans les slots 9 et 10"
      },
      {
        "cmd": "show version slot 1",
        "description": "Affiche la version firmware du slot 1",
        "risk": "safe",
        "notes": "Sur le 6860, les cartes smca sont dans les slots 1 et 2"
      },
      {
        "cmd": "show version slot 2",
        "description": "Affiche la version firmware du slot 2",
        "risk": "safe",
        "notes": "Sur le 6860, les cartes smca sont dans les slots 1 et 2"
      },
      {
        "cmd": "download system2 tftp 10.5.2.80 {firmwareFileName} slot {slotNumber}",
        "description": "Telecharge le firmware sur le systeme NON-actif du slot specifie via TFTP",
        "risk": "dangerous",
        "notes": "Toujours mettre a jour le systeme NON-actif (si system1 est actif, telecharger sur system2 et vice-versa). Serveur TFTP: 10.5.14.29, fichiers dans /tftpboot. Aucun NAT permis entre OLT et serveur TFTP."
      },
      {
        "cmd": "commit system2 slot {slotNumber}",
        "description": "Valide le firmware telecharge comme version de demarrage",
        "risk": "dangerous",
        "notes": "Commit le systeme qui vient d'etre telecharge"
      },
      {
        "cmd": "reboot slot {slotNumber}",
        "description": "Redemarrage d'un slot specifique (failover vers standby si disponible)",
        "risk": "caution",
        "notes": "Si une carte standby existe, le failover est automatique et sans interruption de service"
      },
      {
        "cmd": "ha force-switch",
        "description": "Force le basculement de carte de controle active sans redemarrage",
        "risk": "caution",
        "notes": "Permet de basculer vers la carte standby sans reboot"
      },
      {
        "cmd": "reboot",
        "description": "ATTENTION: Redemarrage complet du systeme",
        "risk": "dangerous",
        "notes": "INTERDIT sans approbation explicite. Reboot complet = coupure de service de ~3 minutes pour tous les clients de cet OLT"
      }
    ],
    "steps": [
      "Verifier l'etat des cartes de controle avec 'show card' — identifier active vs standby",
      "Verifier les versions firmware actuelles avec 'show version slot N' pour chaque carte smca (slots 9/10 sur 6800, slots 1/2 sur 6860)",
      "Identifier quel system (system1 ou system2) est actif et lequel est committed",
      "Telecharger le firmware sur le systeme NON-actif: 'download system2 tftp 10.5.2.80 {fichier} slot {N}'",
      "Attendre la fin du telechargement (verifier avec 'show version slot N')",
      "Commit le nouveau firmware: 'commit system2 slot {N}'",
      "Redemarrer le slot mis a jour: 'reboot slot {N}' — le failover vers standby se fait automatiquement",
      "Verifier que le slot redemarre correctement avec 'show card' et 'show version slot N'",
      "Repeter la procedure pour l'autre carte de controle si necessaire",
      "Utiliser 'ha force-switch' pour basculer sur la carte mise a jour si besoin"
    ],
    "warnings": [
      "NE JAMAIS executer 'reboot' sans numero de slot — cela redemarre tout l'OLT et cause une coupure de ~3 minutes pour tous les clients",
      "Toujours mettre a jour le systeme NON-actif (pas celui qui roule presentement)",
      "Le serveur TFTP est a 10.5.14.29, les fichiers doivent etre dans /tftpboot",
      "Aucun NAT ne doit exister entre l'OLT et le serveur TFTP sinon le transfert echouera",
      "Sur le 6800: cartes smca dans slots 9/10. Sur le 6860: cartes smca dans slots 1/2",
      "Planifier la mise a jour en dehors des heures de pointe si possible"
    ]
  },
  {
    "id": "onu-deco-m4-setup",
    "title": "Configuration ONU avec TP-Link Deco M4",
    "category": "device-config",
    "equipment": "TP-Link Deco M4",
    "risk_level": "caution",
    "commands": [
      {
        "cmd": "ip dhcp-server pool {poolName} static-bind {macAddress} 192.168.1.254",
        "description": "Reservation DHCP pour le Deco M4 a l'adresse 192.168.1.254",
        "risk": "caution",
        "notes": "L'adresse MAC du Deco sur le reseau est celle de l'etiquette +1 (ex: 40:3f:8c:f4:78:e1 sur l'etiquette = 40:3f:8c:f4:78:e2 sur le reseau)"
      },
      {
        "cmd": "ip nat dmz 192.168.1.254 interface 4_INTERNET_R_VID_40",
        "description": "Configure le DMZ sur l'interface WAN vers le Deco",
        "risk": "caution",
        "notes": "L'interface WAN est 4_INTERNET_R_VID_40"
      }
    ],
    "steps": [
      "Identifier l'adresse MAC sur l'etiquette du Deco M4 et ajouter +1 au dernier octet (ex: e1 → e2) — c'est le MAC reel utilise sur le reseau",
      "Configurer une reservation DHCP dans l'ONU pour cette adresse MAC → 192.168.1.254",
      "Configurer le DMZ sur l'interface WAN 4_INTERNET_R_VID_40 pointant vers 192.168.1.254",
      "Brancher le Deco M4 et le redemarrer",
      "Ajouter l'appareil dans le systeme legacy comme enfant (child device), categorie 'tplink_device2'",
      "Configurer le WiFi: Radio 1 (2.4GHz) + Radio 2 (5GHz) avec le SSID et mot de passe du client (minimum 8 caracteres)",
      "Attendre jusqu'a 5 minutes pour que la configuration se propage completement"
    ],
    "warnings": [
      "L'adresse MAC sur l'etiquette du Deco n'est PAS celle utilisee sur le reseau — il faut ajouter +1 au dernier octet",
      "Le mot de passe WiFi doit contenir au minimum 8 caracteres",
      "La configuration peut prendre jusqu'a 5 minutes pour s'appliquer completement",
      "S'assurer de configurer les deux radios (2.4GHz et 5GHz)"
    ]
  },
  {
    "id": "olt-diagnostic-commands",
    "title": "Commandes diagnostiques OLT (lecture seule)",
    "category": "diagnostic",
    "equipment": "Raisecom ISCOM 6800/6860",
    "risk_level": "safe",
    "commands": [
      {
        "cmd": "show card",
        "description": "Etat des cartes de controle et de ligne",
        "risk": "safe",
        "notes": "Affiche inservice/standby/offline pour chaque slot"
      },
      {
        "cmd": "show version slot {slotNumber}",
        "description": "Version firmware d'un slot specifique",
        "risk": "safe",
        "notes": "Montre system1/system2, version active et version committed"
      },
      {
        "cmd": "show alarm current",
        "description": "Alarmes actives sur l'OLT",
        "risk": "safe",
        "notes": "Inclut les alarmes LOS (Loss of Signal) critiques pour le diagnostic de coupure fibre"
      },
      {
        "cmd": "show system",
        "description": "Informations systeme generales",
        "risk": "safe",
        "notes": "Uptime, temperature, informations materielles"
      },
      {
        "cmd": "show gpon onu state gpon{X}/{Y}/{Z}:{N}",
        "description": "Etat d'un ONU specifique (online/offline/dying-gasp)",
        "risk": "safe",
        "notes": "X=chassis, Y=slot, Z=port, N=numero ONU. Essentiel pour verifier si un client est connecte"
      },
      {
        "cmd": "show gpon onu optical-info gpon{X}/{Y}/{Z}:{N}",
        "description": "Niveaux de puissance optique d'un ONU",
        "risk": "safe",
        "notes": "rxPower < -28dBm ou absent = probable coupure fibre. Valeurs normales entre -8dBm et -25dBm"
      },
      {
        "cmd": "show interface gpon {X}/{Y}/{Z}",
        "description": "Etat d'un port GPON",
        "risk": "safe",
        "notes": "Montre si le port est up/down et les statistiques"
      },
      {
        "cmd": "show running-config interface gpon {X}/{Y}/{Z}",
        "description": "Configuration actuelle d'un port GPON",
        "risk": "safe",
        "notes": "Montre la configuration en cours (VLANs, profils, ONUs provisionnees)"
      },
      {
        "cmd": "show gpon onu detail gpon{X}/{Y}/{Z}:{N}",
        "description": "Details complets d'un ONU (modele, firmware, serial, profils)",
        "risk": "safe",
        "notes": "Informations detaillees incluant le modele, le serial number et les profils assignes"
      }
    ],
    "steps": [
      "Utiliser 'show card' pour verifier l'etat general de l'OLT",
      "Verifier les alarmes actives avec 'show alarm current'",
      "Pour un client specifique, verifier l'etat ONU avec 'show gpon onu state gponX/Y/Z:N'",
      "Verifier les niveaux optiques avec 'show gpon onu optical-info gponX/Y/Z:N'",
      "Si necessaire, verifier la configuration du port avec 'show running-config interface gpon X/Y/Z'",
      "Pour plus de details sur l'ONU, utiliser 'show gpon onu detail gponX/Y/Z:N'"
    ],
    "warnings": [
      "Ces commandes sont en lecture seule et peuvent etre executees en toute securite",
      "Le module IA de diagnostic peut automatiser ces commandes via telnet",
      "Les valeurs optiques normales sont entre -8dBm et -25dBm; en dessous de -28dBm indique un probleme"
    ]
  },
  {
    "id": "fiber-cut-diagnosis",
    "title": "Diagnostic de coupure fibre",
    "category": "troubleshooting",
    "equipment": "Raisecom ISCOM 6800/6860",
    "risk_level": "safe",
    "commands": [
      {
        "cmd": "show gpon onu state gpon{X}/{Y}/{Z}:{N}",
        "description": "Verifier si l'ONU est en ligne ou hors ligne",
        "risk": "safe",
        "notes": "Si l'ONU est offline ou en dying-gasp, possible coupure fibre"
      },
      {
        "cmd": "show gpon onu optical-info gpon{X}/{Y}/{Z}:{N}",
        "description": "Verifier la puissance optique recue",
        "risk": "safe",
        "notes": "rxPower tres bas (< -28dBm) ou absent = coupure fibre confirmee"
      },
      {
        "cmd": "show gpon onu state gpon{X}/{Y}/{Z}",
        "description": "Verifier l'etat de tous les ONUs sur le meme port",
        "risk": "safe",
        "notes": "Si plusieurs ONUs sont down sur le meme port = probleme de splitter ou fibre trunk"
      },
      {
        "cmd": "show alarm current",
        "description": "Verifier les alarmes LOS (Loss of Signal)",
        "risk": "safe",
        "notes": "Les alarmes LOS confirment une perte de signal optique"
      }
    ],
    "steps": [
      "Verifier la reachabilite de l'OLT dans Uptime Kuma",
      "Consulter le cache SNMP pour l'etat de l'ONU (attention: les donnees peuvent etre obsoletes)",
      "Se connecter en telnet a l'OLT et verifier l'etat de l'ONU avec 'show gpon onu state gponX/Y/Z:N'",
      "Verifier la puissance optique avec 'show gpon onu optical-info gponX/Y/Z:N' — si rxPower < -28dBm ou absent = coupure fibre",
      "Verifier si d'autres ONUs sur le meme port sont affectes avec 'show gpon onu state gponX/Y/Z' (probleme de splitter vs fibre individuelle)",
      "Consulter les alarmes avec 'show alarm current' pour les alarmes LOS (Loss of Signal)",
      "Si coupure fibre confirmee: dispatcher un technicien avec un OTDR"
    ],
    "warnings": [
      "Le cache SNMP peut etre obsolete — toujours confirmer via telnet direct a l'OLT",
      "rxPower < -28dBm ou absent = forte indication de coupure fibre",
      "Si plusieurs ONUs sur le meme port sont down, le probleme est probablement au niveau du splitter ou de la fibre trunk, pas d'une fibre individuelle",
      "Un technicien avec OTDR est necessaire pour localiser l'emplacement exact de la coupure"
    ]
  },
  {
    "id": "dangerous-commands-blacklist",
    "title": "Commandes dangereuses — NE JAMAIS automatiser",
    "category": "troubleshooting",
    "equipment": "Raisecom ISCOM 6800/6860",
    "risk_level": "dangerous",
    "commands": [
      {
        "cmd": "shutdown",
        "description": "Desactive une interface",
        "risk": "dangerous",
        "notes": "NE JAMAIS automatiser. Cause une coupure de service immediate sur l'interface"
      },
      {
        "cmd": "no shutdown",
        "description": "Active une interface",
        "risk": "dangerous",
        "notes": "NE JAMAIS automatiser. Modification de configuration en production"
      },
      {
        "cmd": "config terminal",
        "description": "Entre en mode configuration",
        "risk": "dangerous",
        "notes": "NE JAMAIS automatiser. Ouvre l'acces aux commandes de modification"
      },
      {
        "cmd": "configure",
        "description": "Entre en mode configuration (alias)",
        "risk": "dangerous",
        "notes": "NE JAMAIS automatiser. Alias de config terminal"
      },
      {
        "cmd": "write",
        "description": "Sauvegarde la configuration en cours",
        "risk": "dangerous",
        "notes": "NE JAMAIS automatiser. Persiste les changements de configuration"
      },
      {
        "cmd": "write memory",
        "description": "Sauvegarde la configuration en memoire",
        "risk": "dangerous",
        "notes": "NE JAMAIS automatiser. Alias de write"
      },
      {
        "cmd": "copy running-config startup-config",
        "description": "Copie la config active vers la config de demarrage",
        "risk": "dangerous",
        "notes": "NE JAMAIS automatiser. Persiste les changements de configuration"
      },
      {
        "cmd": "reboot",
        "description": "Redemarrage complet du systeme",
        "risk": "dangerous",
        "notes": "NE JAMAIS automatiser. Coupure de service de ~3 minutes pour tous les clients de l'OLT"
      },
      {
        "cmd": "delete",
        "description": "Suppression de fichiers ou configurations",
        "risk": "dangerous",
        "notes": "NE JAMAIS automatiser. Perte de donnees potentielle irreversible"
      },
      {
        "cmd": "reset",
        "description": "Reinitialisation de composants ou statistiques",
        "risk": "dangerous",
        "notes": "NE JAMAIS automatiser. Peut reinitialiser des configurations critiques"
      },
      {
        "cmd": "download",
        "description": "Telechargement de firmware",
        "risk": "dangerous",
        "notes": "NE JAMAIS automatiser. Operation de firmware qui doit etre supervisee par un humain"
      },
      {
        "cmd": "commit",
        "description": "Validation de firmware",
        "risk": "dangerous",
        "notes": "NE JAMAIS automatiser. Definit le firmware de demarrage"
      }
    ],
    "steps": [
      "Ces commandes ne doivent JAMAIS etre incluses dans une liste blanche d'automatisation",
      "Toute commande en mode configuration (config terminal) est interdite d'automatisation",
      "Seules les commandes 'show' en mode enable sont autorisees pour l'automatisation",
      "Le module IA doit seulement SUGGERER ces commandes au technicien, jamais les executer"
    ],
    "warnings": [
      "AUCUNE de ces commandes ne doit etre executee automatiquement par le systeme IA",
      "Le module IA doit UNIQUEMENT suggerer ces commandes au technicien humain qui les executera manuellement",
      "Toute commande qui modifie l'etat du systeme (write, config, shutdown, reboot, download, commit, delete, reset) est strictement interdite d'automatisation",
      "En cas de doute, ne PAS executer la commande — demander au technicien"
    ]
  }
]
