# Occurrences

> La chronologie durable de chaque front d'occurrence, observé par le juge d'un essai ou par le surveillant Toujours hors essai, avec la condition figée qui se trouve derrière.

L'onglet Occurrences de [Événements](events) (`/events?view=occurrences`) est la chronologie durable
de ce qu'ont fait les objets sous essai : une ligne par **front d'occurrence**, qu'il ait été observé
par le juge d'un essai ou par le surveillant **Toujours** hors essai. Le voir demande **Voir les
événements** ; exporter demande **Exporter/importer les historiques**. Les occurrences se
définissent par modèle sous [Process > Réglage > Occurrences](process-occurrences) ; cet onglet lit
leur historique et ne change rien.

Il suit la conduite commune aux trois chronologies décrite sur
[Événements](events#how-the-three-timelines-behave) : 500 lignes par page avec une pagination
dessous, une période, une recherche temporisée, l'actualisation en direct, un volet de détail,
l'export CSV et JSON de toute la période.

## Ce qu'est une ligne {#what-one-row-is}

Une occurrence est une condition booléenne sur les voies d'un modèle, avec un retard à la montée et
un retard à la retombée. Une ligne est l'une des quatre transitions d'une **session d'observation** :

| Transition | Signification |
| --- | --- |
| Activée | La condition est montée et s'est maintenue pendant le retard à la montée. |
| Levée | La condition est retombée et s'est maintenue pendant le retard à la retombée. |
| Indisponible | Une ou plusieurs voies que la condition référence ont cessé de livrer une valeur. Le juge conserve sa dernière condition confirmée et ne fabrique jamais une retombée. |
| Rétablie | Toutes les voies référencées livrent de nouveau ; la condition est évaluée à neuf et son retard repart. |

Chaque ligne dit aussi dans quelle **portée** elle a été observée et pourquoi sa session a commencé :

| Champ | Valeurs | Signification |
| --- | --- | --- |
| Portée | **Essai**, **Hors essai** | Essai : le juge propre à un essai, armé par la procédure ; le front est aussi écrit dans le fichier de cet essai. Hors essai : le surveillant Toujours, qui lit les liaisons de l'unité entre deux essais. |
| Motif | **Exécution démarrée**, **Exécution reprise**, **Surveillance démarrée**, **Observation hors exécution reprise**, **Définition modifiée** | Pourquoi une nouvelle session d'observation a commencé : un essai a démarré ; un essai a repris après un redémarrage de l'application ; le surveillant Toujours a démarré pour cette occurrence et cette unité ; l'unité est revenue à l'observation hors essai après un essai ; ou la condition, les retards, les voies référencées, l'état d'activation ou le mode d'armement ont été modifiés. |

Une nouvelle session part de rien : aucun état de condition, de disponibilité ou d'anti-rebond n'est
reporté à travers un intervalle non observé, donc une condition déjà vraie peut produire une
nouvelle transition **Activée** quand un essai démarre ou quand l'application revient, et il n'y a
pas de ligne synthétique « session démarrée » dans cette chronologie. Le fichier propre à l'essai
enregistre la frontière de session même quand aucune transition ne suit ; les historiques et les
rapports s'en servent pour classer une activation ouverte plus ancienne comme Interrompue. Ce
marqueur reste hors de cette chronologie et ne déclenche aucune notification. Les modifications
purement d'affichage (nom, message, gravité) conservent la session et ne changent que les
instantanés ultérieurs.

## Recherche et filtre {#search-and-filter}

| Contrôle | Valeurs | Ce qu'il fait |
| --- | --- | --- |
| Recherche | Texte d'exemple « Rechercher un nom, un message, un modèle, une unité ou une procédure » | Comparaison « contient » sur le nom de l'occurrence, son message, le nom du modèle, le nom de l'unité et le nom de la procédure, tels qu'ils ont été figés sur le moment. |
| Gravité | **Toutes les gravités** (par défaut), **Critique**, **Avertissement**, **Information** | Ne garde que les transitions des occurrences qui portaient cette gravité au moment où elles ont eu lieu. |
| Actualiser | | Relit le journal ; infobulle « Actualiser les occurrences ». |
| Exporter | **Exporter en CSV…**, **Exporter en JSON…** | Écrit chaque transition que la recherche, la gravité et la période atteignent, page après page, et pas seulement les lignes actuellement listées. Dessiné uniquement avec **Exporter/importer les historiques** ; grisé tant que la liste est vide. |

## Les lignes {#the-rows}

| Partie de la ligne | Contenu |
| --- | --- |
| Heure | Date et heure auxquelles le juge a observé le front (pour un essai, l'horodatage propre à l'échantillon jugé). |
| Point | La teinte de la gravité : critique pour Critique, prudence pour Avertissement, neutre pour Information. |
| Nom | Le nom de l'occurrence sur le moment. |
| Résumé | « Transition · obs. N (Motif) · Modèle / Unité · contexte », où N est le rang du front dans sa session et où le contexte est « Essai · » suivi du nom de la procédure (ou simplement « Essai » quand aucun nom de procédure n'a été enregistré) ou « Hors essai ». Exemple : « Activée · obs. 1 (Exécution démarrée) · Furnace / Ligne 2 · Essai · Cuisson 180 ». |
| Niveau | Le mot de la gravité. |

Le message que porte une ligne est le message propre à l'occurrence pour **Activée** et **Levée**
(vide quand la définition n'en a pas, affiché comme « Aucun message capturé. » dans le volet), et,
pour les fronts de disponibilité, « Signal indisponible : » ou « Signal rétabli : » suivi des noms
des voies concernées, séparés par des virgules.

## Le volet de détail {#the-detail-panel}

Sélectionner une ligne ouvre le volet avec le badge de gravité et le nom, l'horodatage complet, la
ligne de résumé, le message, et quatre cartes :

| Carte | Champ | Contenu |
| --- | --- | --- |
| ÉVÉNEMENT | Niveau | La gravité. |
| ÉVÉNEMENT | ID d'événement | L'identité de ce front dans le journal. Pour une observation d'essai, c'est le même identifiant que celui que détient le fichier d'essai. |
| INSTANTANÉ DE L'OCCURRENCE | Transition | Activée, Levée, Indisponible ou Rétablie. |
| INSTANTANÉ DE L'OCCURRENCE | Modèle | Le nom du modèle sur le moment. |
| INSTANTANÉ DE L'OCCURRENCE | Unité | Le nom de l'unité sur le moment. |
| INSTANTANÉ DE L'OCCURRENCE | Portée | Essai ou Hors essai. |
| INSTANTANÉ DE L'OCCURRENCE | Procédure | Seulement pour la portée Essai : le nom de la procédure, ou un tiret quand aucun n'a été enregistré. |
| INSTANTANÉ DE L'OCCURRENCE | ID d'essai | Seulement pour la portée Essai : l'identifiant de l'essai, le même que celui qu'affichent les historiques. |
| INSTANTANÉ DE L'OCCURRENCE | ID de modèle, ID d'unité, ID d'occurrence | Les identifiants stables derrière les noms, inchangés par un changement de nom. |
| SESSION D'OBSERVATION | Séquence du journal | Le numéro d'insertion de la ligne dans le journal, qui ordonne les lignes partageant un horodatage. |
| SESSION D'OBSERVATION | ID d'observation | L'identité de la session qui a observé le front ; chaque front d'une même session le partage. |
| SESSION D'OBSERVATION | Séquence de transition | L'ordre du front dans la session, à partir de 1. Un trou signale un front que le journal n'a pas pu persister. |
| SESSION D'OBSERVATION | Début | Quand la session a commencé, en horodatage complet. |
| SESSION D'OBSERVATION | Motif | Exécution démarrée, Exécution reprise, Surveillance démarrée, Observation hors exécution reprise ou Définition modifiée. |
| CONFIGURATION FIGÉE | Condition surveillée | La condition JavaScript que la session a réellement jugée. |
| CONFIGURATION FIGÉE | Retard à la montée / à la retombée | « x ms / y ms », l'anti-rebond qu'a employé la session. |
| CONFIGURATION FIGÉE | ID des voies référencées | Les identifiants des voies qui conditionnaient la condition, séparés par des points-virgules. |

**Copier l'événement** copie une seule ligne : « horodatage | Occurrence | gravité | nom | résumé |
message | EventId=… | OccurrenceId=… | ObservationId=… | ObservationSequence=… |
ObservationStartedAt=… | ObservationReason=… | Condition=… | OnDelayMs=… | OffDelayMs=… |
ReferencedChannelIds=… ».

## Colonnes de l'export {#export-columns}

Le CSV et le JSON portent les mêmes champs, dans cet ordre : `Timestamp` (l'en-tête du CSV y ajoute
la référence de temps, « Timestamp (UTC-03:00) »), `JournalSequence`, `Severity`, `Name`,
`Transition`, `Scope`, `Model`, `ModelId`, `Unit`, `UnitId`, `Procedure`, `RunId`, `Message`,
`EventId`, `OccurrenceId`, `ObservationId`, `ObservationSequence`, `ObservationStartedAt`,
`ObservationReason`, `Condition`, `OnDelayMs`, `OffDelayMs` et `ReferencedChannelIds` (séparés par
des points-virgules dans le CSV, un tableau dans le JSON). Le JSON est une enveloppe avec `TimeZone`
et `Events`. Les noms de fichier sont `occurrence-history-<yyyyMMdd-HHmmss>.csv` et `.json`. Le CSV
suit la préférence de séparateur décimal de la station comme tous les autres exports : avec le point
décimal, le séparateur de liste est `,` ; avec la virgule décimale, c'est `;`. Une cellule qui
commence par `=`, `+`, `-` ou `@` est préfixée d'une apostrophe pour qu'un tableur la lise comme du
texte.

## Où une occurrence est enregistrée par ailleurs {#where-else-an-occurrence-is-recorded}

Une observation d'essai est d'abord écrite dans le fichier propre à l'essai, puis copiée ici avec le
même identifiant d'événement et le contexte de l'essai ; si la copie échoue, le fichier d'essai
détient tout de même le front et Console porte une ligne Error qui le dit. Une observation hors
essai n'existe qu'ici. Chaque front laisse aussi une ligne de Console sous le domaine Process : une
activation au niveau de sa gravité (Critique en erreur, Avertissement en avertissement, Information
en information), une perte de signal à ce même niveau, une retombée et un rétablissement en
information. Une activation lève en plus une notification dans la fenêtre, intitulée « Occurrence relevée · »
suivi du nom de l'unité et, pour une activation Avertissement ou Critique observée pendant un essai,
une notification du système d'exploitation tant que la fenêtre est masquée ou réduite.

## États vides et ligne d'état {#empty-states-and-the-status-line}

- « Aucune occurrence pour l'instant » avec « Les transitions d'occurrence, venues des essais et de
  la surveillance permanente hors essai, apparaîtront ici. »
- « Rien dans les occurrences ne correspond à ces filtres » avec « Ajustez la gravité ou les termes de
  recherche pour élargir cet historique. »
- La ligne d'état indique « N affichés · page 1 », puis « · filtré » quand une recherche, une
  gravité ou une période est en vigueur ; à droite, « 1 sélectionné » et
  « Mise à jour hh:mm:ss ».

## Ce que l'onglet Occurrences ne fait pas {#what-the-occurrences-tab-does-not-do}

- Il ne définit, n'arme ni ne modifie une occurrence
  ([Process > Réglage > Occurrences](process-occurrences)).
- Il n'apparie pas les fronts en épisodes avec des durées : cette vue dérivée, avec ses
  classements Interrompu et Incomplet, se trouve dans [Historiques](histories) pour un essai et sur
  les volets propres à l'unité.
- Il n'a ni filtre d'unité, ni d'essai, ni de portée, ni de date ; cherchez par le nom de l'unité,
  du modèle ou de la procédure, ou ouvrez l'essai dans les historiques.
- Il ne montre aucun état en direct : savoir si une occurrence est active en ce moment se lit sur le
  volet de l'unité, pas ici.
