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.
In r-ioga, load IMT Albi Healthcare from the Projects workspace, then open Project List.
Launch r-iocal from the Applications column of the project row.
Launch r-ioda the same way and stay on the Objectives tab, with only the Active status filter checked.
r-iocal - Treat Routine checkup of James Miller planned in My default planning.r-ioda - the planning, the objective and the routine check-up actuality.
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.
Launch r-iosemit from Project List and click the Electrical Voltage Detector sensor card.
Click Play selected dataset step by step (the swipe_right_alt icon) in the Selected dataset action row.
The sensor is not started yet: answer Yes to the confirmation.
r-iosemit - the voltage detector, its 10-step dataset and the three thresholds drawn on the chart.The sensor is still in CREATED state, so r-iosemit asks before starting it.
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.
Go back to r-ioda, still on the Objectives tab.
r-ioda - the Danger of Electrical Failure and its three risks, all at probability 0.
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.
In r-iosemit, click Play selected dataset step by step once, then look at r-ioda.
Click it a second time, then look at r-ioda again. Stop there for now.
Second step, 205 V: the three risks at probability 0.33.Third step, 180 V: the three risks at probability 0.66.
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.
Launch r-iota from Project List: the routine check-up is counted as a sure alert.
Click FIND SOLUTION(S) and keep the preselected strategy.
Leave Deduce and run on YES and click Find, then wait for Deduction, deployment and supervision completed.
r-iota - the routine check-up counted as one sure alert, waiting for a strategy.The deduction dialog preselects Drools - Healthcare Satisfaction Strategy, matching the Health domain.Solution deployed and supervised: 8 tasks in total, objective 0 of 1.
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.
In r-iota, open the second tab of the dashboard, Execution graph, and zoom out until the first tasks are visible.
In r-ioga, click the checklist icon to open the To Do List, in list view.
r-iota - Blood test Request in progress (orange), its recoveries Paper Record and White Board Centralisation still neutral.r-ioga - 8 tasks: Blood test Request started in orange, the others still expected in grey.
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.
In r-iosemit, click Play selected dataset step by step a fourth time.
Look at r-ioda.
r-ioda - the risks are frozen and three actualities appear: the software outage and one per function.
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.
Look at r-iota: the map and the execution graph.
Look at the r-ioga to-do list.
r-iota - Blood test Request interrupted (red), Paper Record and White Board Centralisation running (orange), blue pulsars on the map.r-ioga - Blood test Request in red, the two recovery tasks started in orange.
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.
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.
Dans r-ioga, chargez IMT Albi Healthcare depuis le Projects workspace, puis ouvrez Project List.
Lancez r-iocal depuis la colonne Applications de la ligne du projet.
Lancez r-ioda de la même façon et restez sur l’onglet Objectives, avec seulement le filtre de statut Active coché.
r-iocal - Treat Routine checkup of James Miller planifié dans My default planning.r-ioda - le planning, l’objectif et l’actualité du bilan de santé.
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.
Lancez r-iosemit depuis Project List et cliquez sur la carte du capteur Electrical Voltage Detector.
Cliquez sur Play selected dataset step by step (l’icône swipe_right_alt) dans la rangée d’actions du Selected dataset.
Le capteur n’est pas encore démarré : répondez Yes à la confirmation.
r-iosemit - le détecteur de tension, son jeu de 10 pas et les trois seuils tracés sur le graphique.Le capteur est encore à l’état CREATED : r-iosemit demande avant de le démarrer.
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.
Revenez dans r-ioda, toujours sur l’onglet Objectives.
r-ioda - le Danger of Electrical Failure et ses trois risques, tous à la probabilité 0.
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.
Dans r-iosemit, cliquez une fois sur Play selected dataset step by step, puis regardez r-ioda.
Cliquez une deuxième fois, puis regardez de nouveau r-ioda. Arrêtez-vous là pour l’instant.
Deuxième pas, 205 V : les trois risques à la probabilité 0.33.Troisième pas, 180 V : les trois risques à la probabilité 0.66.
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.
Lancez r-iota depuis Project List : le bilan de santé y compte pour une alerte sûre.
Cliquez sur FIND SOLUTION(S) et gardez la stratégie présélectionnée.
Laissez Deduce and run sur YES et cliquez sur Find, puis attendez Deduction, deployment and supervision completed.
r-iota - le bilan de santé compté comme une alerte sûre, en attente d’une stratégie.Le dialogue de déduction présélectionne Drools - Healthcare Satisfaction Strategy, qui correspond au domaine Health.Solution déployée et supervisée : 8 tâches au total, objectif 0 sur 1.
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.
Dans r-iota, ouvrez le deuxième onglet du tableau de bord, Execution graph, et dézoomez jusqu’à voir les premières tâches.
Dans r-ioga, cliquez sur l’icône checklist pour ouvrir la To Do List, en vue list.
r-iota - Blood test Request en cours (orange), ses recouvrements Paper Record et White Board Centralisation encore neutres.r-ioga - 8 tâches : Blood test Request démarrée en orange, les autres encore prévues en gris.
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.
Dans r-iosemit, cliquez une quatrième fois sur Play selected dataset step by step.
Regardez r-ioda.
r-ioda - les risques sont gelés et trois actualités apparaissent : la panne logicielle et une par fonction.
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.
Regardez r-iota : la carte et le graphe d’exécution.
Regardez la todo-list de r-ioga.
r-iota - Blood test Request interrompue (rouge), Paper Record et White Board Centralisation en cours (orange), pulsars bleus sur la carte.r-ioga - Blood test Request en rouge, les deux tâches de recouvrement démarrées en orange.
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.