DeviceAlert
Introduction
Scope and Usage
DeviceAlert represents a single alert condition detected and signaled by a device to create clinician's awareness of a patient safety risk that needs to be addressed.
The device is often a communicating, physical, patient-connected health/medical device operating in an acute care setting (e.g., patient monitor, ventilator, infusion pump, etc.). However, Software as a Medical Device (SaMD), non-patient connected devices, and other Health Software “apps,” as well as lower acuity care settings (e.g., a fall detector app running on a patient's mobile device at home) are in scope as well.
Alerts can relate to physiological (e.g., Patient Lucy has a low SpO2), technical (e.g., Infusion Pump #2 has a fluid line occlusion), or other conditions. Alerts can also have different priorities based on the hazard's severity and urgency of clinicians' action, ranging from High (e.g., a life-threatening condition requiring immediate response) to Advisory (e.g., information to create contextual awareness without requiring timely response).
DeviceAlert is intended for capturing device alert information for documentation and display purposes (e.g., to enable analytics towards alarm noise reduction opportunities). DeviceAlert is not intended for controlling alarms (e.g., remote pausing the audio of an alarm signal). Additionally, any actions that follow from the alert are not part of the resource.
[%dragons-start%]
Prompt, assured, and accurate notification of patient-safety–related conditions is a complex subject. Use of FHIR, in itself, is not sufficient to guarantee delivery of alerts. Critical alerting capabilities are to be considered as part of complete systems engineering activity to achieve timely, reliable, alert notification.
[%dragons-end%]
The specifics of an alert are preferably described using medical device nomenclature from the Alerts and events partition of the ISO/IEEE 11073-10101 standard for Medical Device Communication Nomenclature. DeviceAlert is also aligned with the ISO/IEC 60601-1-8 medical device alarm systems standard. Internationally, medical device regulatory agencies require conformance to ISO/IEC 60601-1-8. Moreover, DeviceAlert is aligned with other standards and specifications such as the Gemini (IHE/HL7) SDPi-Alerting (SDPi-A) Profile, the IHE Alert Communication Management (ACM) profile, and other ISO/IEEE 11073 standards from the Service-Oriented Point-of-Care Medical Device Communication (SDC) standards family.
DeviceAlert models both the concept of alert condition detection as well as its related signaling. Both concepts are combined in one resource due to their high, complex state dynamics and strong interrelationship. For instance, the “Presence” state of an alert signal (e.g., monitor beeps or not) depends on the “Presence” state of the triggering condition, the “Activation” state of the triggering condition (e.g., detectable or not), and the “Activation” state of the signal itself. More information on this can be found in the Background and Context section below.
Some of the resources listed in the Boundaries and Relationships section, below, might be used complementarily. For example, in a home care setting, a patient fall condition detected by a phone app (DeviceAlert) could trigger a remote alert signal in the caregiving family member app (DeviceAlert), while, days later, the treating physician receives a “patient fell 2–5 times in the last 3 months” message on her clinician app (Communication) or see such message flagged in the EMR (Flag).
Usage Scenarios
The following scenarios provide examples of what this resource is utilized for:
- A vital signs monitor detects a low heart rate condition and signals an alarm that gets communicated to a FHIR-enabled system for information documentation purposes.
- A patient-worn watch monitoring heart information identifies a hypertensive condition and issues an alarm to notify the user.
- Alert conditions from devices associated with a patient are consumed by a nursing “dashboard” application and integrated into a display that synthesizes all the information for review by clinical staff.
- A smart alerting system consumes medical device alerts and other information from an ensemble of devices around a patient point-of-care, analyzes the information in real-time and signals patient alert conditions that are not recognized by any single device, or filters out lower-priority/duplicative alert conditions detected by individual devices.
- A medication management workflow application subscribes to all the alert information from infusion pumps for a specific patient, to determine pump operational changes that might impact clinical workflow.
- A quality analytics application periodically reviews device alert information and identifies opportunities for process improvement.
Boundaries and Relationships
Resource Relationships
This resource directly references:
- Device or DeviceMetric to identify the device or part thereof that originated the detection of the alert condition (e.g., the heart rate device metric that detected a tachycardia alert). These resources (or extensions on them) might contain additional data elements to describe the alert activation states (e.g., if detection of all or a subset of alerts is on, paused or off).
- Patient to identify the patient the physiological alert is about, or Device to identify the device the technical alert is about. Additional potential subjects of an alert could be Location, Medication, BiologicallyDerivedProduct, Specimen, or NutritionProduct.
- Observation to identify any evidentiary data needed to interpret the alert condition or that is the reason why the alert condition is present.
- Procedure and Encounter to identify relevant context of the alert condition.
Resource Boundaries
Flag
The primary distinction between Flag and DeviceAlert lies in their origin and intent: Flag highlights selected information from the patient record for general awareness, while DeviceAlert originates from a device, based on device-generated data (often outside the patient record), and is designed for regulated, automated alerting that could trigger immediate clinical response through visual, audible or haptic signals. DeviceAlert also tracks alert condition and signal states, though for low-priority alerts, a Flag could be a suitable supplementary means of annunciating through the patient record.
DetectedIssue
DetectedIssue identifies clinical concerns linked to proposed or ongoing actions, while DeviceAlert is typically triggered by physiological or physical events, not clinical decisions. These resources differ not only in origin, but also in how they are processed and directed: Detected issue is part of clinical reasoning workflows, while DeviceAlert is often part of automated device monitoring systems.
Communication
In Communication, there is a specific intended sender and receiver, and the information is delivered only once. Device-generated alerts are not necessarily (or even usually) targeted at a specific intended receiver, and they are often continuous and ongoing.
Observation
Observation is intended for capturing measurements and subjective point-in-time assessments, and complements DeviceAlert, identifying any evidentiary data needed to interpret the alert condition (that is, the reason why the alert condition is present).
Subscription
Subscription differs from from DeviceAlert in origin and behavior: Subscription reflects a client's request for filtered notifications from a FHIR server, while DeviceAlert represents unsolicited events triggered by devices based on physiological or physical conditions. Due to the vast number and variability of device alerts, consumer-controlled filtering (subscription) is typically impractical. Moreover, DeviceAlert supports documentation and logging use cases, while subscriptions have a run-time nature.
AuditEvent
AuditEvent is primarily for administrative and operational tracking, while DeviceAlert serves clinical purposes, often prompting action. DeviceAlert captures multiple dynamic states across an alert's lifecycle, which would be inefficient and duplicative to model using separate AuditEvents, especially since AuditEvents are usually immutable and DeviceAlert often requires updates.
Background and Context
DeviceAlert models two alert aspects: the condition detected by a device, and the signal, representing how the alert is announced (and by which attention is drawn to the existence of the alert condition). Signal behavior is determined by device design and configuration and could persist beyond the condition itself due to features like latching (extending brief alerts for visibility).
The DeviceAlert state machine showing transitions, and the interplay between alert conditions and signals.
The center row of the diagram shows the flow between the states of the device alert record taking into account both the alert condition and the signals being emitted by the device. The upper row shows the values of key attributes of the DeviceAlert resource instance and of the associated DeviceMetric or Device in the corresponding states. Note that the alert detection activation state of the associated DeviceMetric or Device is represented through a resource extension, more specifically through the `activationState` sub-extension of the Device Alert Detection extension, which could be applied to either Device or DeviceMetric. The bottom row shows values of key attributes of the DeviceAlert resource instance in the corresponding states.
StructureDefinition
Elements (Simplified)
- DeviceAlert [0..*]: - Documentation of an alert (a.k.a. alarm) generated by a device indicating a noteworthy condition
- DeviceAlert.identifier [0..*]: Identifier Business identifier for this device alert
- DeviceAlert.procedure [0..*]: Reference(Procedure) Procedure during which the alert occurred
- DeviceAlert.status [1..1]: code required:devicealert-status in-progress | completed | entered-in-error | unknown
- DeviceAlert.category [0..*]: CodeableConcept example:devicealert-category High level categorization of device alert
- DeviceAlert.type [0..1]: CodeableConcept extensible:devicealert-type physiological | technical
- DeviceAlert.priority [0..1]: CodeableConcept extensible:devicealert-priority high | medium | low | info
- DeviceAlert.code [1..1]: CodeableConcept preferred:devicealert-condition The meaning of the alert
- DeviceAlert.subject [1..1]: [Reference(Patient](/Reference(Patient), Device, BiologicallyDerivedProduct, Group, Location, Medication, NutritionProduct, Specimen)) Who or what the alert is about
- DeviceAlert.encounter [0..1]: Reference(Encounter) Encounter during which the alert condition occurred
- DeviceAlert.presence [1..1]: boolean Whether the alert condition is currently active
- DeviceAlert.occurrence[x] [0..1]: dateTime, Period When the alert condition occurred/is occurring
- DeviceAlert.device [0..1]: [Reference(Device](/Reference(Device), DeviceMetric)) The Device (or DeviceMetric) that detected the alert condition
- DeviceAlert.acknowledged [0..1]: boolean Whether the alert condition has been acknowledged
- DeviceAlert.acknowledgedBy [0..1]: [Reference(Patient](/Reference(Patient), Device, Practitioner, PractitionerRole, RelatedPerson)) Who acknowledged the alert condition
- DeviceAlert.location [0..1]: Reference(Location) Location of the subject when the alert was raised
- DeviceAlert.derivedFrom [0..*]: BackboneElement The value causing the alert condition
- DeviceAlert.derivedFrom.observation [1..1]: Reference(Observation) The Observation having a value causing the alert condition
- DeviceAlert.derivedFrom.component [0..1]: Coding example:observation-codes The Observation.component having a value causing the alert condition
- DeviceAlert.derivedFrom.limit [0..1]: Range The boundaries beyond which a value was detected to cause the alert condition
- DeviceAlert.label [0..1]: string Text to be displayed for the alert condition
- DeviceAlert.signal [0..*]: BackboneElement Annunciation or notification of the alert condition
- DeviceAlert.signal.activationState [1..1]: CodeableConcept extensible:devicealert-activationState on | off | paused
- DeviceAlert.signal.presence [0..1]: CodeableConcept extensible:devicealert-presence on | latched | off | ack
- DeviceAlert.signal.annunciator [0..1]: CodeableReference required:devicealert-annunciation Where the signal is being annunciated
- DeviceAlert.signal.manifestation [0..1]: CodeableConcept extensible:devicealert-manifestation How the signal is being annunciated
- DeviceAlert.signal.type [0..*]: CodeableConcept example:devicealert-signalType Characteristics of the signal manifestation
- DeviceAlert.signal.indication [0..1]: Period When the signal was being annunciated
Mappings
- DeviceAlert Mappings — 57 mapping entries
Resource Packs
list-DeviceAlert-packs.xml
<?xml version="1.0" encoding="UTF-8"?>
<List xmlns="http://hl7.org/fhir"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://hl7.org/fhir ../../publish/List.xsd">
<id value="DeviceAlert-packs" />
<status value="current" />
<mode value="working" />
</List>
Search Parameters
- identifier — token — The identifier of the alert —
DeviceAlert.identifier - patient — reference — The patient subject of the alert —
DeviceAlert.subject.where(resolve() is Patient) - subject — reference — Subject of the alert —
DeviceAlert.subject - status — token — Status of the alert —
DeviceAlert.status - code — token — Alert condition code —
DeviceAlert.code - category — token — Alert category —
DeviceAlert.category - presence — token — Whether the alert condition is currently occurring —
DeviceAlert.presence - acknowledged — token — Whether the alert condition has been acknowledged —
DeviceAlert.acknowledged - occurrence — date — When the alert condition occurred —
DeviceAlert.occurrence.ofType(Period) | occurrence.ofType(dateTime) - priority — token — Priority of the alert condition —
DeviceAlert.priority - type — token — Whether the alert is physiological or technical —
DeviceAlert.type - device — reference — The device detecting the condition —
DeviceAlert.device - derived-from — reference — Whether the alert is currently occurring —
DeviceAlert.derivedFrom.observation - signal-presence — token — Whether the alert is currently occurring —
DeviceAlert.signal.presence - annunciator-concept — token — The whether the signalling device annunciating the condition is local or remote to the detecting device —
DeviceAlert.signal.annunciator.concept - annunciator-device — reference — The signalling device annunciating the condition —
DeviceAlert.signal.annunciator.reference - manifestation — token — How the alert signal is manifested —
DeviceAlert.signal.manifestation - indication — date — When the signal was being annunciated —
DeviceAlert.signal.indication - procedure — reference — Procedure during which the alert occurred —
DeviceAlert.procedure - encounter — reference — Encounter during which the alert occurred —
DeviceAlert.encounter - location — reference — Location of the subject at time of alert —
DeviceAlert.location - acknowledged-by — reference — Who acknowledged the alert —
DeviceAlert.acknowledgedBy
Examples
- devicealert-example — devicealert-example
- devicealert-examples-header — devicealert-examples-header
- example — devicealert-example — General DeviceAlert example
Mapping Exceptions
devicealert-event-mapping-exceptions.xml
Divergent Elements
- Event.identifier → DeviceAlert.identifier
- shortUnmatched | reason=More precise, resource-specific wording. | pattern=Business identifier for device alert | resource=Business identifier for this device alert
- definitionUnmatched | reason=More precise, resource-specific wording. | pattern=Business identifiers assigned to this device alert by the performer and/or other systems. These identifiers remain constant as the resource is updated and propagates from server to server. | resource=Business identifiers assigned to this alert, by the source device, gateway software, manufacturers, or other systems or organizations. These identifiers remain constant as the resource is updated and propagates from server to server.
- commentsUnmatched | reason=More precise, resource-specific wording. | pattern=Note: This is a business identifier, not a resource identifier (see discussion). It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types. For example, multiple Patient and a Person resource instance might share the same social insurance number. | resource=Note: This is a business identifier, not a resource identifier (see discussion). It is best practice for the identifier to only appear on a single resource instance, however business practices may occasionally dictate that multiple resource instances with the same identifier can exist - possibly even with different resource types. For identifiers assigned to an alert by the device or gateway software, the
systemelement of the identifier might be set to an identifier of the device.
- Event.partOf → DeviceAlert.procedure
- missingTypes | reason=Specific, relevant resource types used, rather then pattern generic type. | pattern=Reference(Event)
- extraTypes | reason=Specific, relevant resource types used, rather then pattern generic type.
- shortUnmatched | reason=More precise, resource-specific wording. | pattern=Part of referenced event | resource=Procedure during which the alert occurred
- definitionUnmatched | reason=More precise, resource-specific wording. | pattern=A larger event of which this particular device alert is a component or step. | resource=The procedure (or procedures) during which the alert condition was raised.
- commentsUnmatched | reason=Pattern comment not relevant as Encounter not permitted here. | pattern=Not to be used to link an device alert to an Encounter - use 'context' for that.
- Event.status → DeviceAlert.status
- shortUnmatched | reason=Description reflects allowed values | pattern=preparation | in-progress | not-done | suspended | aborted | completed | entered-in-error | unknown | resource=in-progress | completed | entered-in-error | unknown
- commentsUnmatched | reason=Pattern note about state-transition diagram not relevant to resource's set of statuses. | pattern=A nominal state-transition diagram can be found in the (Event pattern documentation
Unknown does not represent "other" - one of the defined statuses must apply. Unknown is used when the authoring system is not sure what the current status is. | resource=Unknown does not represent "other" - one of the defined statuses must apply. Unknown is used when the authoring system is not sure what the current status is.
- Event.category → DeviceAlert.category
- commentsUnmatched | reason=Pattern text customized to remove guidance to resource designers. | pattern=Categorization might be done automatically (inferred by code) or manually by user assertion. The absence of a category may limit the ability to determine when the element should be handled, so strong consideration should be given to how systems will be able to determine category values for legacy data and how data that cannot be categorized will be handled. As well, some categories might not be mutually exclusive, so systems should prepare for multiple declared categories - even within a single category 'axis'. In general, there should not be a 'strong' binding ('required' or 'extensible') on the category element overall. Instead, the element can be sliced and bindings can be asserted that apply to particular repetitions. | resource=Categorization might be done automatically (inferred by code) or manually by user assertion. The absence of a category may limit the ability to determine when the element should be handled, so strong consideration should be given to how systems will be able to determine category values for legacy data and how data that cannot be categorized will be handled. As well, some categories might not be mutually exclusive, so systems should prepare for multiple declared categories - even within a single category 'axis'.
- Event.code → DeviceAlert.code
- shortUnmatched | reason=Resource is not a service; definition appropriate to resource. | pattern=What service was done | resource=The meaning of the alert
- definitionUnmatched | reason=More precise, resource-specific wording. | pattern=A code that identifies the specific service or action that was or is being performed. | resource=A code that indicates the specific condition that triggered the alert.
- Event.product → DeviceAlert.device
- missingTypes | reason=Missing resource types are not relevant to resource use. | pattern=CodeableReference(BiologicallyDerivedProduct, Device, DeviceDefinition, Medication, NutritionProduct, Substance)
- extraTypes | reason=Use of Reference rather than CodeableReference appropriate to use case; inclusion of DeviceMetric allows improved specificity.
- shortUnmatched | reason=More precise, resource-specific wording. | pattern=Product used/provided | resource=The Device (or DeviceMetric) that detected the alert condition
- definitionUnmatched | reason=More precise, resource-specific wording. | pattern=Indicates the product supplied or manipulated by this device alert. | resource=Indicates the device that detected the alert condition. The device could be a top-level Device or component Device (such as an MDS, VMD, or Channel); or might identify the specific DeviceMetric of a Device (e.g., a heart rate reading) that was in an alert condition.
- Event.subject → DeviceAlert.subject
- extraTypes | reason=Alerts may relate to non-patient subjects.
- shortUnmatched | reason=More precise, resource-specific wording. | pattern=Individual service was done for/to | resource=Who or what the alert is about
- definitionUnmatched | reason=More precise, resource-specific wording. | pattern=The individual or set of individuals the action is being or was performed on. | resource=Who or what the alert is about.
- requirementsUnmatched | reason=More precise, resource-specific wording. | pattern=Links the device alert to the Patient context. May also affect access control. | resource=Links the device alert to the appropriate subject context. May also affect access control.
- Event.encounter → DeviceAlert.encounter
- shortUnmatched | reason=More precise, resource-specific wording. | pattern=Encounter the device alert is part of | resource=Encounter during which the alert condition occurred
- definitionUnmatched | reason=More precise, resource-specific wording. | pattern=The Encounter during which this device alert was created or to which the creation of this record is tightly associated. | resource=The Encounter during which the alert condition was raised.
- commentsUnmatched | reason=Comment not applicable to resource's use of encounter. | pattern=This will typically be the encounter the device alert was created during, but some device alerts may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter (e.g. pre-admission lab tests).
- Event.occurrence[x] → DeviceAlert.occurrence[x]
- missingTypes | reason=Additional datatype not needed for identified use cases. | pattern=Timing
- shortUnmatched | reason=More precise, resource-specific wording. | pattern=When device alert occurred/is occurring | resource=When the alert condition occurred/is occurring
- definitionUnmatched | reason=More precise, resource-specific wording. | pattern=The date, period or timing when the device alert did occur or is occurring. | resource=This element is used to record the date or time period when the alert condition did occur or is occurring.
- commentsUnmatched | reason=Unknown | pattern=This indicates when the activity actually occurred or is occurring, not when it was asked/requested/ordered to occur. For the latter, look at the occurence element of the Request this {{event}} is "basedOn". The status code allows differentiation of whether the timing reflects a historic event or an ongoing event. Ongoing events should not include an upper bound in the Period or Timing.bounds. . | resource=This element is used to record the time period during which the alert condition is or was active. The status code allows differentiation of whether the timing reflects a historic event or an ongoing event. A date/time value SHOULD be used for instantaneous conditions. Partial date/time values are ambiguous about whether they represent the condition occurring at some point in the partially specified period, or for all of the period, and (absent additional guidance) SHOULD be avoided. Ongoing events SHOULD not include a Period upper bound.
- Event.location → DeviceAlert.location
- shortUnmatched | reason=More precise, resource-specific wording. | pattern=Where device alert occurred | resource=Location of the subject when the alert was raised
- definitionUnmatched | reason=More precise, resource-specific wording. | pattern=The principal physical location where the device alert was performed. | resource=The principal physical location of the subject at the time the alert condition occurred. This could be different from the location of the alerting device at that time, and from the current location of either the subject or the alert condition detecting device.
- requirementsUnmatched | reason=Pattern text regarding record keeping not applicable to use case; more precise, resource-specific wording. | pattern=Ties the event to where the records are likely kept and provides context around the event occurrence (e.g. if it occurred inside or outside a dedicated healthcare setting). | resource=Provides context around the alert occurrence (e.g. if it occurred inside or outside a dedicated healthcare setting).
- Event.reason → DeviceAlert.derivedFrom.observation
- missingTypes | reason=Missing types are not relevant to resource use cases. | pattern=CodeableReference(Condition, Observation, DiagnosticReport, DocumentReference)
- extraTypes | reason=Use of Reference rather than CodeableReference appropriate to use case.
- shortUnmatched | reason=More precise, resource-specific wording. | pattern=Why was device alert performed? | resource=The Observation having a value causing the alert condition
- definitionUnmatched | reason=More precise, resource-specific wording. | pattern=Describes why the device alert occurred in coded or textual form or Indicates another resource whose existence justifies this device alert. | resource=Indicates the Observation whose value is causing the alert condition; or, if
componentis present, the Observation with a component causing the alert condition. - commentsUnmatched | reason=Use case does not support textual reasons. | pattern=Textual reasons can be captured using reasonCode.text.
Unmapped Elements
- Event.reported — Second-hand alerts are not within the scope of this resource.
- Event.relevantHistory — The resource itself is a historical record; no need for further history identified.
- Event.statusReason — Need for this element has not been identified.
- Event.performer.actor — No additional performers identified.
- Event.performer.function — No additional performers identified.
- Event.note — Notes, comments, etc. are more appropriate on the underlying observation than on the resulting alert.
- Event.recorded — Use case has not uncovered a need for this element.
- Event.performer — No additional performers identified.
- Event.basedOn — Alerts are not typically in response to a request.
- Event.researchStudy — Research studies are not within the common use cases for the resource.
devicealert-fivews-mapping-exceptions.xml
Unmapped Elements
- FiveWs.recorded — No need identified in the core uses cases.
- FiveWs.cause — DeviceAlerts are not typically in response to a prompt.
- FiveWs.version — DeviceAlerts are typically short-lived, independent events, and revisions are not tracked. If needed, use meta.version
- FiveWs.witness — This resource is expected to be recorded by the source device.
- FiveWs.init — DeviceAlerts are not typically planned; see FiveWs.done.
- FiveWs.source — Second-hand attestation of alerts is not a considered use case; see FiveWs.author.
- FiveWs.who — No additional relevant actors identified.
- FiveWs.planned — DeviceAlerts are not planned events.