{
  "exercise": {
    "id": "exemple",
    "name": "Rançongiciel — plateforme logistique",
    "sector": "Transport et logistique",
    "objectives": "Éprouver la mobilisation de la cellule, la tenue de la main courante et la coordination de la communication externe.",
    "status": "CLOSED",
    "createdAt": "2026-06-11T07:45:00.000Z"
  },
  "durationSec": 6300,
  "stats": {
    "participants": 6,
    "characters": 9,
    "injectsPlanned": 10,
    "injectsSent": 9,
    "emails": 34,
    "chatMessages": 78,
    "socialPosts": 12,
    "socialPostsByPlayers": 2,
    "newsArticles": 3,
    "documents": 7,
    "logEntries": 21,
    "observerNotes": 8
  },
  "injectTimeline": [
    {
      "title": "Alerte du prestataire d'infogérance",
      "subject": "Comportement anormal sur vos serveurs de fichiers",
      "channel": "EMAIL",
      "trigger": "SCHEDULED",
      "status": "SENT",
      "plannedOffsetSec": 0,
      "actualAtSec": 0,
      "deltaSec": 0
    },
    {
      "title": "Rançongiciel : note des attaquants",
      "subject": "Vos données sont chiffrées",
      "channel": "EMAIL",
      "trigger": "SCHEDULED",
      "status": "SENT",
      "plannedOffsetSec": 720,
      "actualAtSec": 880,
      "deltaSec": 160
    },
    {
      "title": "Relance des attaquants",
      "subject": "Le délai court toujours",
      "channel": "EMAIL",
      "trigger": "SCHEDULED",
      "status": "SKIPPED",
      "plannedOffsetSec": 2700,
      "actualAtSec": null,
      "deltaSec": null
    }
  ],
  "logEntries": [
    {
      "atExerciseSec": 240,
      "category": "FAIT",
      "message": "Alerte reçue du prestataire, transmise au responsable informatique.",
      "authorLabel": "Direction"
    },
    {
      "atExerciseSec": 900,
      "category": "DECISION",
      "message": "Isolement du serveur de fichiers, malgré l'arrêt des expéditions.",
      "authorLabel": "Direction"
    },
    {
      "atExerciseSec": 2280,
      "category": "ACTION",
      "message": "Message d'attente publié à destination des clients.",
      "authorLabel": "Communication"
    }
  ],
  "observerNotes": [
    {
      "atExerciseSec": 780,
      "note": "Cellule constituée en 13 minutes. Rôle du juridique non attribué au départ.",
      "authorLabel": "Observateur 1"
    },
    {
      "atExerciseSec": 3300,
      "note": "Deux prises de parole externes non alignées entre elles.",
      "authorLabel": "Observateur 1"
    }
  ],
  "retex": {
    "open": false,
    "respondents": 6,
    "averageScore": 3.5,
    "categories": [
      {
        "id": "cat-1",
        "order": 0,
        "name": "Alerte et mobilisation",
        "averageScore": 3.9,
        "questions": [
          {
            "id": "q-1",
            "order": 0,
            "text": "L'alerte initiale vous est parvenue de façon claire et exploitable.",
            "averageScore": 4.2,
            "answers": 6,
            "comments": ["Le message du prestataire était clair, mais il est arrivé sur une seule boîte."]
          },
          {
            "id": "q-2",
            "order": 1,
            "text": "La cellule a été constituée dans un délai adapté à la situation.",
            "averageScore": 3.5,
            "answers": 6,
            "comments": []
          }
        ]
      },
      {
        "id": "cat-2",
        "order": 1,
        "name": "Communication",
        "averageScore": 2.8,
        "questions": [
          {
            "id": "q-3",
            "order": 0,
            "text": "Les messages diffusés à l'extérieur étaient cohérents entre eux.",
            "averageScore": 2.8,
            "answers": 6,
            "comments": ["Deux versions ont circulé pendant une vingtaine de minutes."]
          }
        ]
      }
    ]
  }
}
