r-io suiter-io suiteuse case docs
← IMT Albi Healthcare
IMT Albi Healthcare / Guided scenario

Recovery procedures on an implementation risk

A complete walkthrough of the IMT Albi Healthcare use case: a voltage sensor makes a software outage more and more likely, a solution is deduced for a routine check-up while the risk is still uncertain, then the outage occurs and the running task is interrupted and replaced by its recovery procedures.

Packaged scenario changed

The Default_With10Steps game scenario and its ten-measurement dataset are no longer packaged. IMT Albi Healthcare now ships Default Game Scenario in game_scenarios/Default_Game_Scenario/: a one-hour timeline whose Electrical Voltage Detector dataset emits eight values in preparation/principal pairs (230/225, 217.15/212.85, 196.95/193.05 and 171.7/168.3 V), the last three pairs falling below the 215, 195 and 170 V thresholds described below, and three planned actualities: Risk of software unavailability (33 %), Risk of software unavailability (66 %) and Sofware unavailable. The values quoted in the steps (230, 205, 180, 150 V) and their captures remain a historical example; see the scenario migration notes.

What this scenario demonstrates

Some risks do not threaten the situation but the way it is handled. Here the Blood test Request and Preparation of equipment functions both rely on the healthcare software, so an electrical failure makes each of them risky to run. Such an implementation risk is attached to the task itself: the planner wires its recovery with an Exception_Flow, a boundary on the task.

Unlike the Event_Flow of an emerging risk, which starts a corrective in parallel, an Exception_Flow is interrupting. When the risk occurs while the task is running, the task is stopped and flagged in error, and its recovery procedures take over. A task that has not started yet keeps its recovery idle.

01 · Step

Start from the planned care

The project already holds an actuality: a routine check-up of the patient James Miller, treated by an objective and planned in the default planning. It is the work the hospital intends to do, before any incident.

  1. In r-ioga, load IMT Albi Healthcare from the Projects workspace, then open Project List.
  2. Launch r-iocal from the Applications column of the project row.
  3. Launch r-ioda the same way and stay on the Objectives tab, with only the Active status filter checked.

ResultThree active nodes: My default planning, which plans Treat Routine checkup of James Miller, which treats the actuality Routine checkup of James Miller. No risk is visible yet.

02 · Step

Start the voltage detector

The Electrical Voltage Detector replays a dataset of ten measurements: 230, 205, 180, 150, then 110 volts. Three CEP rules watch it, each one firing when the voltage crosses a threshold downwards: 215, 195 and 170 volts.

  1. Launch r-iosemit from Project List and click the Electrical Voltage Detector sensor card.
  2. Click Play selected dataset step by step (the swipe_right_alt icon) in the Selected dataset action row.
  3. The sensor is not started yet: answer Yes to the confirmation.

ResultThe first measurement, 230 V, is sent. It crosses no threshold, so no CEP rule fires.

03 · Step

Watch the potentiality and its risks appear

A live sensor is enough to make a danger possible. The Generated_By relation between the danger and the sensor carries a 2L activation condition: as soon as the sensor reports a value, the danger becomes active, and the Is_Susceptible_To relation of the healthcare software activates the risks it generates.

  1. Go back to r-ioda, still on the Objectives tab.

ResultThe tree appears: Danger of Electrical Failure, generated by the detector, then Risk of software unavailability and its two children, one per function: … for Blood Test Request Function and … for Preparation of equipment Function. All three risks are at probability 0: the children copy the probability of their parent.

04 · Step

Raise the probability step by step

Each threshold crossed makes the outage more likely. The CEP rules do not create a new risk: they update the probability of the same risk node, and the 2L conditions propagate it to the two function-level risks.

  1. In r-iosemit, click Play selected dataset step by step once, then look at r-ioda.
  2. Click it a second time, then look at r-ioda again. Stop there for now.

ResultAt 205 V the first rule sets the probability to 0.33, at 180 V the second one sets it to 0.66, on all three risks. The rule also renames the parent risk Risk of software unavailability at École des mines d'Albi-Carmaux. The risk is likely, but it has not occurred.

05 · Step

Deduce and deploy a solution

The routine check-up still has to be done. The deduction builds a process for it, and because the two functions it uses are exposed to an active implementation risk, it attaches a recovery to each of them.

  1. Launch r-iota from Project List: the routine check-up is counted as a sure alert.
  2. Click FIND SOLUTION(S) and keep the preselected strategy.
  3. Leave Deduce and run on YES and click Find, then wait for Deduction, deployment and supervision completed.

ResultThe strategy Drools - Healthcare Satisfaction Strategy is preselected because it matches the Health domain of the project. The deployed solution counts 8 tasks: the nominal chain from Blood test Request to Receipt of Test Results, and three recoveries carried by Exception_Flow edges.

06 · Step

Read the running process and the to-do list

Before the outage, the recoveries are deployed but idle. Only the first nominal task is running.

  1. In r-iota, open the second tab of the dashboard, Execution graph, and zoom out until the first tasks are visible.
  2. In r-ioga, click the checklist icon to open the To Do List, in list view.

ResultIn the graph, Blood test Request is orange; Paper Record and White Board Centralisation, its two recoveries, and Edition by Handwritten note, the recovery of Preparation of equipment, are neutral. The to-do list shows the same 8 tasks: one started, seven expected.

07 · Step

Make the implementation risk occur

The fourth measurement crosses the last threshold: the probability reaches certainty, and a certain risk is no longer a risk but a fact.

  1. In r-iosemit, click Play selected dataset step by step a fourth time.
  2. Look at r-ioda.

ResultAt 150 V the third rule sets the probability to 1. The risks are frozen and leave the active view; the actualities they generate appear instead: Sofware unavailable, Healthcare software unavailability for Blood Test Request Function and Healthcare sofware unavailability for Preparation of equipment Function.

08 · Step

Watch the recovery replace the running task

The Exception_Flow conditions of Blood test Request become true while the task is running. The workflow engine interrupts it and starts both recoveries, without any page reload.

  1. Look at r-iota: the map and the execution graph.
  2. Look at the r-ioga to-do list.

ResultBlood test Request turns red: it is marked in error and replaced. Paper Record and White Board Centralisation turn orange: they run, and appear as started in the to-do list. On the map, the software outage now carries a blue pulsar, next to the routine check-up: both are handled by the solution. Edition by Handwritten note stays neutral, because Preparation of equipment had not started.

In depth

What actually fired it

Each recovery is wired to its task by an Exception_Flow edge whose condition is written in the 2L language and evaluated on every poll of the workflow engine while the task runs. Both recoveries of Blood test Request watch the same actuality:

findNodeInstance("Actuality", "Healthcare software unavailability for Blood Test Request Function").isActive()

When the condition becomes true during the execution, the engine logs 2 rule(s) became true while running, interrupting the task, marks the human task Achieved=ERROR and starts the two recovery sub-processes. The same condition on a task that is not running yet has no effect: the boundary only exists while its task executes.

IMT Albi Healthcare / Scénario guidé

Procédures de recouvrement sur un risque d’implémentation

Un parcours complet du cas d’usage IMT Albi Healthcare : un capteur de tension rend une panne logicielle de plus en plus probable, une solution est déduite pour un bilan de santé tant que le risque reste incertain, puis la panne survient et la tâche en cours est interrompue et remplacée par ses procédures de recouvrement.

Scénario empaqueté modifié

Le scénario de jeu Default_With10Steps et son jeu de dix mesures ne sont plus empaquetés. IMT Albi Healthcare fournit désormais Default Game Scenario dans game_scenarios/Default_Game_Scenario/ : une chronologie d’une heure dont le jeu de données de l’Electrical Voltage Detector émet huit valeurs en paires préparation/principale (230/225, 217.15/212.85, 196.95/193.05 et 171.7/168.3 V), les trois dernières paires passant sous les seuils 215, 195 et 170 V décrits ci-dessous, et trois actualités planifiées : Risk of software unavailability (33 %), Risk of software unavailability (66 %) et Sofware unavailable. Les valeurs citées dans les étapes (230, 205, 180, 150 V) et leurs captures restent un exemple historique ; voir les notes de migration des scénarios.

Ce que ce scénario démontre

Certains risques ne menacent pas la situation mais la façon de la traiter. Ici, les fonctions Blood test Request et Preparation of equipment s’appuient toutes deux sur le logiciel de santé : une panne électrique rend donc chacune d’elles risquée à exécuter. Un tel risque d’implémentation est attaché à la tâche elle-même : le planificateur câble son recouvrement par un Exception_Flow, une frontière posée sur la tâche.

À la différence de l’Event_Flow d’un risque émergent, qui démarre un correctif en parallèle, un Exception_Flow est interruptif. Si le risque survient pendant que la tâche s’exécute, la tâche est arrêtée et marquée en erreur, et ses procédures de recouvrement prennent le relais. Une tâche qui n’a pas encore démarré garde son recouvrement inerte.

01 · Étape

Partir des soins planifiés

Le projet contient déjà une actualité : un bilan de santé de routine du patient James Miller, traité par un objectif et planifié dans le planning par défaut. C’est le travail que l’hôpital compte faire, avant tout incident.

  1. Dans r-ioga, chargez IMT Albi Healthcare depuis le Projects workspace, puis ouvrez Project List.
  2. Lancez r-iocal depuis la colonne Applications de la ligne du projet.
  3. Lancez r-ioda de la même façon et restez sur l’onglet Objectives, avec seulement le filtre de statut Active coché.

RésultatTrois nœuds actifs : My default planning, qui planifie Treat Routine checkup of James Miller, qui traite l’actualité Routine checkup of James Miller. Aucun risque n’est encore visible.

02 · Étape

Démarrer le détecteur de tension

L’Electrical Voltage Detector rejoue un jeu de dix mesures : 230, 205, 180, 150, puis 110 volts. Trois règles CEP le surveillent, chacune se déclenchant quand la tension passe sous un seuil : 215, 195 et 170 volts.

  1. Lancez r-iosemit depuis Project List et cliquez sur la carte du capteur Electrical Voltage Detector.
  2. Cliquez sur Play selected dataset step by step (l’icône swipe_right_alt) dans la rangée d’actions du Selected dataset.
  3. Le capteur n’est pas encore démarré : répondez Yes à la confirmation.

RésultatLa première mesure, 230 V, est envoyée. Elle ne franchit aucun seuil : aucune règle CEP ne se déclenche.

03 · Étape

Voir apparaître la potentialité et ses risques

Un capteur actif suffit à rendre un danger possible. La relation Generated_By entre le danger et le capteur porte une condition d’activation 2L : dès que le capteur remonte une valeur, le danger devient actif, et la relation Is_Susceptible_To du logiciel de santé active les risques qu’il génère.

  1. Revenez dans r-ioda, toujours sur l’onglet Objectives.

RésultatL’arbre apparaît : Danger of Electrical Failure, généré par le détecteur, puis Risk of software unavailability et ses deux enfants, un par fonction : … for Blood Test Request Function et … for Preparation of equipment Function. Les trois risques sont à la probabilité 0 : les enfants recopient la probabilité de leur parent.

04 · Étape

Faire monter la probabilité pas à pas

Chaque seuil franchi rend la panne plus probable. Les règles CEP ne créent pas de nouveau risque : elles mettent à jour la probabilité du même nœud, et les conditions 2L la propagent aux deux risques propres aux fonctions.

  1. Dans r-iosemit, cliquez une fois sur Play selected dataset step by step, puis regardez r-ioda.
  2. Cliquez une deuxième fois, puis regardez de nouveau r-ioda. Arrêtez-vous là pour l’instant.

RésultatÀ 205 V, la première règle porte la probabilité à 0.33 ; à 180 V, la deuxième la porte à 0.66, sur les trois risques. La règle renomme aussi le risque parent en Risk of software unavailability at École des mines d'Albi-Carmaux. Le risque est probable, mais il n’est pas survenu.

05 · Étape

Déduire et déployer une solution

Le bilan de santé reste à faire. La déduction construit un processus pour le réaliser et, comme les deux fonctions qu’il utilise sont exposées à un risque d’implémentation actif, elle attache un recouvrement à chacune d’elles.

  1. Lancez r-iota depuis Project List : le bilan de santé y compte pour une alerte sûre.
  2. Cliquez sur FIND SOLUTION(S) et gardez la stratégie présélectionnée.
  3. Laissez Deduce and run sur YES et cliquez sur Find, puis attendez Deduction, deployment and supervision completed.

RésultatLa stratégie Drools - Healthcare Satisfaction Strategy est présélectionnée parce qu’elle correspond au domaine Health du projet. La solution déployée compte 8 tâches : la chaîne nominale de Blood test Request à Receipt of Test Results, et trois recouvrements portés par des arêtes Exception_Flow.

06 · Étape

Lire le processus en cours et la todo-list

Avant la panne, les recouvrements sont déployés mais inertes. Seule la première tâche nominale s’exécute.

  1. Dans r-iota, ouvrez le deuxième onglet du tableau de bord, Execution graph, et dézoomez jusqu’à voir les premières tâches.
  2. Dans r-ioga, cliquez sur l’icône checklist pour ouvrir la To Do List, en vue list.

RésultatDans le graphe, Blood test Request est orange ; Paper Record et White Board Centralisation, ses deux recouvrements, et Edition by Handwritten note, le recouvrement de Preparation of equipment, sont neutres. La todo-list montre les mêmes 8 tâches : une démarrée, sept prévues.

07 · Étape

Faire survenir le risque d’implémentation

La quatrième mesure franchit le dernier seuil : la probabilité atteint la certitude, et un risque certain n’est plus un risque mais un fait.

  1. Dans r-iosemit, cliquez une quatrième fois sur Play selected dataset step by step.
  2. Regardez r-ioda.

RésultatÀ 150 V, la troisième règle porte la probabilité à 1. Les risques sont gelés et quittent la vue active ; les actualités qu’ils génèrent apparaissent à leur place : Sofware unavailable, Healthcare software unavailability for Blood Test Request Function et Healthcare sofware unavailability for Preparation of equipment Function.

08 · Étape

Voir le recouvrement remplacer la tâche en cours

Les conditions Exception_Flow de Blood test Request deviennent vraies pendant que la tâche s’exécute. Le moteur de workflow l’interrompt et démarre les deux recouvrements, sans aucun rechargement de page.

  1. Regardez r-iota : la carte et le graphe d’exécution.
  2. Regardez la todo-list de r-ioga.

RésultatBlood test Request passe en rouge : elle est marquée en erreur et remplacée. Paper Record et White Board Centralisation passent en orange : elles s’exécutent, et apparaissent démarrées dans la todo-list. Sur la carte, la panne logicielle porte désormais un pulsar bleu, à côté du bilan de santé : les deux sont pris en charge par la solution. Edition by Handwritten note reste neutre, car Preparation of equipment n’avait pas démarré.

Pour aller plus loin

Ce qui l’a réellement déclenché

Chaque recouvrement est relié à sa tâche par une arête Exception_Flow dont la condition est écrite dans le langage 2L et évaluée à chaque scrutation du moteur de workflow tant que la tâche s’exécute. Les deux recouvrements de Blood test Request surveillent la même actualité :

findNodeInstance("Actuality", "Healthcare software unavailability for Blood Test Request Function").isActive()

Quand la condition devient vraie pendant l’exécution, le moteur journalise 2 rule(s) became true while running, interrupting the task, marque la tâche humaine Achieved=ERROR et démarre les deux sous-processus de recouvrement. La même condition sur une tâche qui ne s’exécute pas encore reste sans effet : la frontière n’existe que pendant l’exécution de sa tâche.