Worked example · reactor-startup-nonroutine
Twenty factor levels to one screening band
Every tile on the left is an analyst judgement. Every step on the right is one grounding of one rule, in the order the engine's own fixpoint loop discovered it. Nothing here is summarised: this is the trace python -m ehs_hfo assess --json produces, read back out.
Scenario
Batch reactor restart after an unplanned trip. The assigned operator qualified three weeks ago and has not run this recovery before; the recovery sequence is not covered by an approved procedure; the outage window is fixed by a downstream commitment.
Illustrative worked example written by hand for this repository. It is not a record of a real event at any site and contains no site data.
The scenario
Four IDHEAS-G context categories, twenty factors, one analyst-assigned level each.
The derivation
89 rule firings ran to reach the screening band. Step through them, or press play.
The final assessment
Printed verbatim by python -m ehs_hfo assess against the committed scenario file, including its own trace of the screening-band rule.
EHS human-factors context screening
------------------------------------------------------------------------------
Scenario: reactor-startup-nonroutine
Description: Batch reactor restart after an unplanned trip. The assigned operator qualified three weeks ago and has not run this recovery before; the recovery sequence is not covered by an approved procedure; the outage window is fixed by a downstream commitment.
Provenance: Illustrative worked example written by hand for this repository. It is not a record of a real event at any site and contains no site data.
Assessment coverage: 20 of 20 factors assessed
Context dimensions
------------------------------------------------------------------------------
Human context [IDHEAS-G category: xw:idheas-Personnel] 5/5 assessed
degraded Procedures, guidance and instructions
degraded Training
Operational context [IDHEAS-G category: xw:idheas-EnvironmentAndSituation] 5/5 assessed
System context [IDHEAS-G category: xw:idheas-System] 3/3 assessed
Task context [IDHEAS-G category: xw:idheas-Task] 7/7 assessed
severely degraded Scenario familiarity
degraded Time pressure and stress
Macrocognitive functions (IDHEAS-G)
------------------------------------------------------------------------------
Challenged: action execution
elevated failure of action execution <- Procedures, guidance and instructions
Challenged: decisionmaking
aggravated failure of decisionmaking <- Procedures, guidance and instructions
aggravated failure of decisionmaking <- Scenario familiarity
aggravated failure of decisionmaking <- Time pressure and stress
aggravated failure of decisionmaking <- Training
Challenged: understanding
aggravated failure of understanding <- Scenario familiarity
aggravated failure of understanding <- Time pressure and stress
aggravated failure of understanding <- Training
Findings
------------------------------------------------------------------------------
Unsupported control demand: ehs:KnowledgeBasedControl
Aggravated error mode: knowledge-based mistake
Aggravated error mode: rule-based mistake
Degraded with no control claimed: Procedures, guidance and instructions, Scenario familiarity, Time pressure and stress, Training
Screening band: stop-and-review
Ordinal label only. Produced by rules marked 'convention'. Not a probability, not a rate.
Derivation trace: screening band
------------------------------------------------------------------------------
screeningBand(stop-and-review) <- R33-band-stop-and-review [convention; no source]
rule: screeningBand(stop-and-review) :- severelyDegradedFactor(?F), not mitigatedFactor(?F), aggravatedErrorMode(?M).
because: A severely degraded factor occurring alongside an aggravated error mode puts the scenario in the stop-and-review band. Threshold chosen by the author; no source supports it.
severelyDegradedFactor(ehs:ScenarioFamiliarity) <- R02-severely-degraded [literature; nureg2198]
rule: severelyDegradedFactor(?F) :- factorLevel(?F, ?L), levelSeverelyDegraded(?L).
because: A factor at the lowest assessed level is severely degraded.
factorLevel(ehs:ScenarioFamiliarity, ehs:LevelSeverelyDegraded) [given]
levelSeverelyDegraded(ehs:LevelSeverelyDegraded) [given]
aggravatedErrorMode(ehs:KnowledgeBasedMistake) <- R22-aggravated-by-second-factor [literature; groth2012]
rule: aggravatedErrorMode(?M) :- degradedFactor(?F), factorPredisposesTo(?F, ?M), degradedFactor(?G), factorPredisposesTo(?G, ?M), lt(?F, ?G).
because: An error mode flagged by one degraded factor and flagged again by a second, distinct degraded factor is recorded as aggravated. This says two independent routes to the same failure class are open. It does not say the risk has doubled; nothing here supports a multiplicative claim.
degradedFactor(ehs:ScenarioFamiliarity) <- R01-degraded [literature; nureg2198]
rule: degradedFactor(?F) :- factorLevel(?F, ?L), levelDegraded(?L).
because: A factor assessed below the nominal condition is a degraded factor. Levels and their ordinal ranks come from the ontology, not from here.
factorLevel(ehs:ScenarioFamiliarity, ehs:LevelSeverelyDegraded) [given]
levelDegraded(ehs:LevelSeverelyDegraded) [given]
factorPredisposesTo(ehs:ScenarioFamiliarity, ehs:KnowledgeBasedMistake) [given]
degradedFactor(ehs:TimePressureAndStress) <- R01-degraded [literature; nureg2198]
rule: degradedFactor(?F) :- factorLevel(?F, ?L), levelDegraded(?L).
because: A factor assessed below the nominal condition is a degraded factor. Levels and their ordinal ranks come from the ontology, not from here.
factorLevel(ehs:TimePressureAndStress, ehs:LevelDegraded) [given]
levelDegraded(ehs:LevelDegraded) [given]
factorPredisposesTo(ehs:TimePressureAndStress, ehs:KnowledgeBasedMistake) [given]
(3 further derivations recorded and not expanded here)
(2 further derivations recorded and not expanded here)
Derivation trace: failureModeAggravated(ehs:Decisionmaking, ehs:FailureOfDecisionmaking)
failureModeAggravated(ehs:Decisionmaking, ehs:FailureOfDecisionmaking) <- R12-failure-mode-aggravated [literature; nureg2198]
rule: failureModeAggravated(?N, ?K) :- failureModeElevated(?N, ?K, ?F), failureModeElevated(?N, ?K, ?G), lt(?F, ?G).
because: Two distinct degraded factors raising the same failure mode of the same function. Two routes to one failure mode are open; no multiplicative claim is made.
failureModeElevated(ehs:Decisionmaking, ehs:FailureOfDecisionmaking, ehs:ProceduresGuidanceAndInstructions) <- R09-failure-mode-elevated [literature; nureg2198]
rule: failureModeElevated(?N, ?K, ?F) :- degradedFactor(?F), factorAffectsFailureMode(?F, ?K), failureModeOfFunction(?K, ?N).
because: A degraded factor raises the cognitive failure mode of the function it affects. The function is carried in the conclusion so the trace shows which function and which failure mode the finding belongs to.
degradedFactor(ehs:ProceduresGuidanceAndInstructions) <- R01-degraded [literature; nureg2198]
rule: degradedFactor(?F) :- factorLevel(?F, ?L), levelDegraded(?L).
because: A factor assessed below the nominal condition is a degraded factor. Levels and their ordinal ranks come from the ontology, not from here.
factorLevel(ehs:ProceduresGuidanceAndInstructions, ehs:LevelDegraded) [given]
levelDegraded(ehs:LevelDegraded) [given]
factorAffectsFailureMode(ehs:ProceduresGuidanceAndInstructions, ehs:FailureOfDecisionmaking) [given]
failureModeOfFunction(ehs:FailureOfDecisionmaking, ehs:Decisionmaking) [given]
failureModeElevated(ehs:Decisionmaking, ehs:FailureOfDecisionmaking, ehs:ScenarioFamiliarity) <- R09-failure-mode-elevated [literature; nureg2198]
rule: failureModeElevated(?N, ?K, ?F) :- degradedFactor(?F), factorAffectsFailureMode(?F, ?K), failureModeOfFunction(?K, ?N).
because: A degraded factor raises the cognitive failure mode of the function it affects. The function is carried in the conclusion so the trace shows which function and which failure mode the finding belongs to.
degradedFactor(ehs:ScenarioFamiliarity) <- R01-degraded [literature; nureg2198]
rule: degradedFactor(?F) :- factorLevel(?F, ?L), levelDegraded(?L).
because: A factor assessed below the nominal condition is a degraded factor. Levels and their ordinal ranks come from the ontology, not from here.
factorLevel(ehs:ScenarioFamiliarity, ehs:LevelSeverelyDegraded) [given]
levelDegraded(ehs:LevelSeverelyDegraded) [given]
factorAffectsFailureMode(ehs:ScenarioFamiliarity, ehs:FailureOfDecisionmaking) [given]
failureModeOfFunction(ehs:FailureOfDecisionmaking, ehs:Decisionmaking) [given]
(5 further derivations recorded and not expanded here)
Derivation trace: failureModeAggravated(ehs:Understanding, ehs:FailureOfUnderstanding)
failureModeAggravated(ehs:Understanding, ehs:FailureOfUnderstanding) <- R12-failure-mode-aggravated [literature; nureg2198]
rule: failureModeAggravated(?N, ?K) :- failureModeElevated(?N, ?K, ?F), failureModeElevated(?N, ?K, ?G), lt(?F, ?G).
because: Two distinct degraded factors raising the same failure mode of the same function. Two routes to one failure mode are open; no multiplicative claim is made.
failureModeElevated(ehs:Understanding, ehs:FailureOfUnderstanding, ehs:ScenarioFamiliarity) <- R09-failure-mode-elevated [literature; nureg2198]
rule: failureModeElevated(?N, ?K, ?F) :- degradedFactor(?F), factorAffectsFailureMode(?F, ?K), failureModeOfFunction(?K, ?N).
because: A degraded factor raises the cognitive failure mode of the function it affects. The function is carried in the conclusion so the trace shows which function and which failure mode the finding belongs to.
degradedFactor(ehs:ScenarioFamiliarity) <- R01-degraded [literature; nureg2198]
rule: degradedFactor(?F) :- factorLevel(?F, ?L), levelDegraded(?L).
because: A factor assessed below the nominal condition is a degraded factor. Levels and their ordinal ranks come from the ontology, not from here.
factorLevel(ehs:ScenarioFamiliarity, ehs:LevelSeverelyDegraded) [given]
levelDegraded(ehs:LevelSeverelyDegraded) [given]
factorAffectsFailureMode(ehs:ScenarioFamiliarity, ehs:FailureOfUnderstanding) [given]
failureModeOfFunction(ehs:FailureOfUnderstanding, ehs:Understanding) [given]
failureModeElevated(ehs:Understanding, ehs:FailureOfUnderstanding, ehs:TimePressureAndStress) <- R09-failure-mode-elevated [literature; nureg2198]
rule: failureModeElevated(?N, ?K, ?F) :- degradedFactor(?F), factorAffectsFailureMode(?F, ?K), failureModeOfFunction(?K, ?N).
because: A degraded factor raises the cognitive failure mode of the function it affects. The function is carried in the conclusion so the trace shows which function and which failure mode the finding belongs to.
degradedFactor(ehs:TimePressureAndStress) <- R01-degraded [literature; nureg2198]
rule: degradedFactor(?F) :- factorLevel(?F, ?L), levelDegraded(?L).
because: A factor assessed below the nominal condition is a degraded factor. Levels and their ordinal ranks come from the ontology, not from here.
factorLevel(ehs:TimePressureAndStress, ehs:LevelDegraded) [given]
levelDegraded(ehs:LevelDegraded) [given]
factorAffectsFailureMode(ehs:TimePressureAndStress, ehs:FailureOfUnderstanding) [given]
failureModeOfFunction(ehs:FailureOfUnderstanding, ehs:Understanding) [given]
(2 further derivations recorded and not expanded here)
Derivation trace: aggravatedErrorMode(ehs:KnowledgeBasedMistake)
------------------------------------------------------------------------------
aggravatedErrorMode(ehs:KnowledgeBasedMistake) <- R22-aggravated-by-second-factor [literature; groth2012]
rule: aggravatedErrorMode(?M) :- degradedFactor(?F), factorPredisposesTo(?F, ?M), degradedFactor(?G), factorPredisposesTo(?G, ?M), lt(?F, ?G).
because: An error mode flagged by one degraded factor and flagged again by a second, distinct degraded factor is recorded as aggravated. This says two independent routes to the same failure class are open. It does not say the risk has doubled; nothing here supports a multiplicative claim.
degradedFactor(ehs:ScenarioFamiliarity) <- R01-degraded [literature; nureg2198]
rule: degradedFactor(?F) :- factorLevel(?F, ?L), levelDegraded(?L).
because: A factor assessed below the nominal condition is a degraded factor. Levels and their ordinal ranks come from the ontology, not from here.
factorLevel(ehs:ScenarioFamiliarity, ehs:LevelSeverelyDegraded) [given]
levelDegraded(ehs:LevelSeverelyDegraded) [given]
factorPredisposesTo(ehs:ScenarioFamiliarity, ehs:KnowledgeBasedMistake) [given]
degradedFactor(ehs:TimePressureAndStress) <- R01-degraded [literature; nureg2198]
rule: degradedFactor(?F) :- factorLevel(?F, ?L), levelDegraded(?L).
because: A factor assessed below the nominal condition is a degraded factor. Levels and their ordinal ranks come from the ontology, not from here.
factorLevel(ehs:TimePressureAndStress, ehs:LevelDegraded) [given]
levelDegraded(ehs:LevelDegraded) [given]
factorPredisposesTo(ehs:TimePressureAndStress, ehs:KnowledgeBasedMistake) [given]
(3 further derivations recorded and not expanded here)
Derivation trace: aggravatedErrorMode(ehs:RuleBasedMistake)
------------------------------------------------------------------------------
aggravatedErrorMode(ehs:RuleBasedMistake) <- R22-aggravated-by-second-factor [literature; groth2012]
rule: aggravatedErrorMode(?M) :- degradedFactor(?F), factorPredisposesTo(?F, ?M), degradedFactor(?G), factorPredisposesTo(?G, ?M), lt(?F, ?G).
because: An error mode flagged by one degraded factor and flagged again by a second, distinct degraded factor is recorded as aggravated. This says two independent routes to the same failure class are open. It does not say the risk has doubled; nothing here supports a multiplicative claim.
degradedFactor(ehs:ProceduresGuidanceAndInstructions) <- R01-degraded [literature; nureg2198]
rule: degradedFactor(?F) :- factorLevel(?F, ?L), levelDegraded(?L).
because: A factor assessed below the nominal condition is a degraded factor. Levels and their ordinal ranks come from the ontology, not from here.
factorLevel(ehs:ProceduresGuidanceAndInstructions, ehs:LevelDegraded) [given]
levelDegraded(ehs:LevelDegraded) [given]
factorPredisposesTo(ehs:ProceduresGuidanceAndInstructions, ehs:RuleBasedMistake) [given]
degradedFactor(ehs:Training) <- R01-degraded [literature; nureg2198]
rule: degradedFactor(?F) :- factorLevel(?F, ?L), levelDegraded(?L).
because: A factor assessed below the nominal condition is a degraded factor. Levels and their ordinal ranks come from the ontology, not from here.
factorLevel(ehs:Training, ehs:LevelDegraded) [given]
levelDegraded(ehs:LevelDegraded) [given]
factorPredisposesTo(ehs:Training, ehs:RuleBasedMistake) [given]
Rules that fired
------------------------------------------------------------------------------
R01-degraded [literature; nureg2198]
R02-severely-degraded [literature; nureg2198]
R06-unmitigated [literature; hse_pifs]
R07-degraded-for-function [literature; nureg2198]
R08-function-challenged [literature; nureg2198]
R09-failure-mode-elevated [literature; nureg2198]
R10-control-demand [literature; rasmussen1983]
R11-unsupported-demand [literature; rasmussen1983, reason1990]
R12-failure-mode-aggravated [literature; nureg2198]
R13-multi-function [literature; nureg2198]
R20-elevated-from-factor [literature; reason1990]
R21-elevated-from-unsupported-demand [literature; rasmussen1983, reason1990]
R22-aggravated-by-second-factor [literature; groth2012]
R23-time-pressure-on-knowledge-based [literature; rasmussen1983, reason1990]
R24-procedure-substitution [literature; rasmussen1983, hollnagel1998]
R30-band-review [convention; no source]
R31-band-elevated-multi-function [convention; no source]
R32-band-elevated-aggravated [convention; no source]
R33-band-stop-and-review [convention; no source]
R34-band-stop-and-review-no-fallback [convention; no source]
R35-band-elevated-failure-mode-aggravated [convention; no source]
Standing caveats
------------------------------------------------------------------------------
- The four context dimensions are the four PIF context categories of IDHEAS-G (NUREG-2198, 2021), relabelled. They are not original to this tool.
- No human error probability is computed. The screening band is an ordinal label produced by rules marked 'convention', not a rate and not a probability.
- Factor levels are analyst judgements supplied as input. This tool does not derive them from data and does not check them.
- The links from factors to error modes are theoretical propositions taken from the cited literature. No effect size is attached to any of them, and none has been validated against injury or incident outcomes.
- SPAR-H multipliers are not used. They were estimated for at-power nuclear power plant operations, and NUREG-2198 states that existing methods are not necessarily adequate outside that context.
What a level is
“Factor levels are analyst-assigned ordinals. The observable proxies suggested for deriving them from operational data are proposed, not validated.” — README, Honest limits.
Load your own scenario
Not offered here. The engine is a stratified Datalog evaluator with unification, negation-as-failure and built-ins (lt, not) over twenty-one rules and roughly ninety firings for this one scenario — porting it exactly to JavaScript, rather than approximating it, is a second implementation of the reasoner, not a page. See src/ehs_hfo/engine.py. Run the CLI on a new scenario file instead: python -m ehs_hfo assess --json your_scenario.json.