Skip to content

Temperature Alarm: a small, complete model

This page explains the Temperature Alarm SysML model. It is not a list of things to model. Follow the code and the relationships to see the whole safety argument: a nurse monitors a patient, the device detects a deviation, the alarm supports a critical task, a foreseeable use error creates a hazard, and a design control is checked with evidence.

File Role
model/temperature_alarm.sysml public parent package
model/catalog/temperature_alarm.sysml model elements and relationships
model/viewpoints/temperature_alarm_overview.sysml view of the catalog
flowchart LR
    U["ICU nurse"] --> UC["Monitor patient temperature"]
    UC --> F["Detect temperature deviation"]
    F --> A["Temperature alarm banner"]
    A --> T["Assess and acknowledge"]
    T --> E["Silence without assessment"]
    E --> H["Undetected deviation"]
    C["Auto re-annunciation"] --> H
    C --> A
    F --> V["Alarm-latency test"] --> EV["Test report"]
    T --> UV["Usability validation"]

Clinical purpose and human work

The use case states the clinical goal once. The Initiates connection says who starts that use. The acknowledgement activity contains a critical task, so the human work can be traced to its possible harm and validation.

part icuNurse : User {
    attribute :>> id = "TA-USR-001";
    attribute :>> name = "ICUNurse";
    attribute :>> actorKind = ActorKind::clinician;
}
use case ucMonitorTemp : UseCase {
    attribute :>> id = "TA-UC-001";
    attribute :>> name = "MonitorPatientTemperature";
    attribute :>> useCaseKind = UseCaseKind::clinical;
    attribute :>> goalStatement =
        "Continuously monitor core temperature and be alerted when it leaves the safe range.";
}
connection : Initiates connect initiatingUser ::> icuNurse
    to initiatedUseCase ::> ucMonitorTemp;

action taskAckAlarm : CriticalTask {
    attribute :>> name = "AcknowledgeTemperatureAlarm";
    attribute :>> taskGoal = "recognize, assess, and acknowledge the alarm";
    attribute :>> potentialHarm = "delayed intervention for hypo-/hyperthermia";
}
connection : Composes connect parent ::> actAcknowledgeAlarm
    to child ::> taskAckAlarm;

System responsibility and logical channel

fnDetectDeviation is the technology-independent responsibility. It is allocated to chMonitor, a logical channel. The model can later allocate that channel to software or hardware without changing the functional claim.

part fnDetectDeviation : SystemFunction {
    attribute :>> id = "TA-FN-001";
    attribute :>> name = "DetectTemperatureDeviation";
    attribute :>> perspective = ArchitecturePerspectiveKind::functional;
    attribute :>> disciplines =
        (EngineeringDisciplineKind::safety, EngineeringDisciplineKind::'verification');
}
part chMonitor : LogicalComponent {
    attribute :>> name = "TemperatureMonitorChannel";
    attribute :>> componentRole = ComponentRoleKind::channel;
    attribute :>> channelRole = ChannelRoleKind::monitor;
}
connection : AllocatedTo connect function ::> fnDetectDeviation
    to allocatedElement ::> chMonitor;

Alarm interaction and safety control

The alarm banner is an element in the model. It triggers an acknowledgement action and supports the critical task. The connections below form a readable safety argument: task → use error → hazard; risk control → mitigated hazard; risk control → the element that implements it.

part elAlarmBanner : UIElement {
    attribute :>> name = "TempAlarmBanner";
    attribute :>> alarmPriority = NotificationPriorityKind::high;
    attribute :>> annunciationModality = "flashing banner + tone";
    attribute :>> silenceable = true;
}
connection : ElementTriggersAction connect element ::> elAlarmBanner
    to triggeredAction ::> uiaAcknowledge;
connection : Supports { attribute :>> supportKind = SupportKind::task;
    connect supporter ::> uiBedside to supported ::> taskAckAlarm; }

connection : CommitsUseError connect task ::> taskAckAlarm
    to useError ::> ueSilenceAndForget;
connection : Causes { attribute :>> causeKind = CauseKind::useErrorLeadsToHazard;
    connect cause ::> ueSilenceAndForget to effect ::> hzUndetectedDeviation; }
connection : Mitigates { attribute :>> mitigationKind = MitigationKind::hazard;
    connect control ::> rcReAnnunciate to mitigatedElement ::> hzUndetectedDeviation; }
connection : ControlImplementedBy connect riskControl ::> rcReAnnunciate
    to implementingElement ::> elAlarmBanner;

Evidence is separate from the design

The latency test checks the detection function. The usability validation checks the nurse's acknowledgement task. These are different claims and therefore different model elements. The verification case produces a test report.

part vcAlarmLatency : VerificationCase {
    attribute :>> name = "VerifyAlarmLatency";
    attribute :>> methodKind = VerificationMethodKind::test;
    attribute :>> acceptanceCriteria = "annunciation within 2 s of sustained deviation";
}
part uvAckTask : UsabilityValidation {
    attribute :>> name = "SummativeAlarmAcknowledgement";
    attribute :>> acceptanceCriteria =
        "no critical-task failures; all alarms assessed before silencing";
}
connection : VerifiedBy connect verificationCase ::> vcAlarmLatency
    to verificationTarget ::> fnDetectDeviation;
connection : Validates connect validationCase ::> uvAckTask
    to validationTarget ::> taskAckAlarm;
connection : ProducesEvidence connect producer ::> vcAlarmLatency
    to producedEvidence ::> evLatencyReport;

The viewpoint does not duplicate the model

The overview view exposes the catalog. It selects and presents existing elements; it does not introduce a second temperature-alarm architecture.

view temperatureAlarmOverview : MemoDiagramView {
    expose memo_examples_temperature_alarm::*;
    attribute depth = 2;
    attribute :>> title = "Temperature Alarm Overview";
    attribute :>> viewKind = DiagramViewKind::general;
    attribute :>> diagramType = "bdd";
}

The full catalog source contains the remaining attributes and elements used by these excerpts.

Where this sits in MEMO

Every tutorial is one slice of the same structure. This example populates these layers:

Layer Element types it uses Reference
Operational OperationalActivity, UseCase, User, UserTask Operational
Functional SystemFunction Functional
Logical LogicalComponent Logical
Implementation and realization UIAction, UIElement, UserInterface Implementation and realization
Assurance Evidence, Hazard, RiskControlMeasure, UsabilityValidation, UseError, VerificationCase, MemoScenario[scenarioKind=memoVerification] Assurance
Views and methodology MemoDiagramView Views and methodology

Typed links it uses: ActionInvokesFunction, AllocatedTo, Causes, CommitsUseError, Composes, ControlImplementedBy, ElementTriggersAction, ExecutesScenario, IndependentOf, Initiates, Mitigates, ProducesEvidence … +3 — see Relationships for what each one claims and which ends are legal.

Narrative treatment: Context and Use · Functional Analysis · Requirements and Architecture · Risk, Cybersecurity, and Assurance.

Source model: examples/temperature-alarm