Personal Health Device Implementation Guide
3.0.0-draft - STU 3 - R6 Global (Whole world)

Personal Health Device Implementation Guide, published by HL7 International / Devices. This guide is not an authorized publication; it is the continuous build for version 3.0.0-draft built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/phd/ and changes regularly. See the Directory of published versions

Resource Profile: PhdDeviceAlert

Official URL: http://hl7.org/fhir/uv/phd/StructureDefinition/PhdDeviceAlert Version: 3.0.0-draft
Standards status: Trial-use Maturity Level: 1 Computable Name: PhdDeviceAlert
Other Identifiers: OID:2.16.840.1.113883.4.642.40.73.42.10

Profile for device alert that capture alert conditions from personal health devices.

PHD Device Alert Profile

Overview

The PhdDeviceAlert profile is based on the FHIR R6 DeviceAlert resource type and defines how personal health devices (PHDs) report alert conditions in the FHIR Personal Health Device implementation guide. When a Personal Health Gateway (PHG) detects an observation with a status code of msmt-value-exceeded-boundaries, it generates a DeviceAlert resource. This profile represents alerts as separate resources that reference the measurement observations that triggered the alert condition, providing a clear separation between measurement data and alert notifications.

Purpose

Device alerts indicate noteworthy conditions or occurrences detected by personal health devices, such as when a measured value exceeds configured threshold limits. Common examples include:

  • High or low blood pressure readings
  • Abnormal heart rate measurements
  • Low oxygen saturation levels
  • Out-of-range glucose values
  • Device technical alerts

By representing alerts as separate DeviceAlert resources (rather than embedding them within measurement observations), the profile enables:

  • Independent querying: Alerts can be searched and filtered separately from measurements
  • Multiple alerts per measurement: A single observation can trigger different alert types
  • Component-specific alerts: For compound observations, alerts can reference specific components
  • Clear data model: Separation of concerns between measurement data and alert conditions

Device alerts enable important clinical use cases:

  • Remote Patient Monitoring: Healthcare providers can query for active alerts to identify patients requiring attention
  • Alert Acknowledgment: Tracking which alerts have been reviewed and acknowledged
  • Historical Analysis: Analyzing patterns of alert occurrences over time
  • Device Configuration: Understanding what thresholds are configured on devices
  • Clinical Decision Support: Triggering workflows based on specific alert types

Profile Structure

Alert Condition code (condition.code(ballot4) or code(ballot4))

The condition.code element identifies the alert condition using IEEE 11073-10101 MDC nomenclature codes from partition 3 as defined in the Device Alert Condition valueset. The binding is made required in this IG, meaning a code must always be provided. Common alert codes include:

  • MDC_EVT_HI (196648): Value exceeds upper threshold
  • MDC_EVT_LO (196670): Value below lower threshold
  • MDC_EVT_SIG_OUT_OF_RANGE (197054): Value/signal outside acceptable range

Type (type): The type element specifies the type of condition that triggered the alert with a required binding. Supported types are physiological conditions (e.g., high blood pressure) and technical conditions (e.g., device malfunction).

Cause of Condition (derivedFrom): The profile requires one or more derivedFrom elements to reference the source measurement observation(s) that caused this alert condition. Each derivedFrom element contains:

  • observation (required): Reference to the source observation (PhdNumericObservation, PhdCompoundNumericObservation, or PhdCompoundObservation)
  • component (optional): For compound observations, identifies which specific component triggered the alert (e.g., systolic vs. diastolic blood pressure)
  • limit (optional): The threshold range that was exceeded. Note: ACOM (IEEE 11073-10206 Alert Communication Model) does not report limit values; the Personal Health Gateway (PHG) populates this element from device configuration or locally maintained threshold settings.

This structure allows precise identification of which measurement observation caused the alert condition.

Alert Label (label)

An optional human-readable text that describes the alert condition, typically combining information about the measurement type, value, and threshold (e.g., "Systolic BP > 140 mm[Hg]" or "SpO2 < 80%").

Signal Information (signal)

The signal element describes how the alert is being annunciated or notified. It includes:

  • activationState: Whether the alert signaling is active, paused, or off
  • presence: Current annunciation status (on, off, latched, acknowledged)
  • type: Details about the signal manifestation and operational state
  • manifestation: How the signal is presented (visual, auditory, etc.)
  • indication: Time period during which signaling occurred

Examples

See the following examples demonstrating this profile:

Usages:

You can also check for usages in the FHIR IG Statistics

Formal Views of Profile Content

Description Differentials, Snapshots, and other representations.

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. DeviceAlert 0..* DeviceAlert Documentation of an alert (a.k.a. alarm) generated by a device indicating a noteworthy condition
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... contained 0..* Resource Contained, inline Resources
... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored
Slice: Unordered, Open by value:url
... code Σ 1..1 CodeableConcept Code for the alert condition
Binding: DeviceAlertConditionCodes (2.0.0) (required)
... subject Σ 1..1 Reference(Patient | Device | BiologicallyDerivedProduct | Group | Location | Medication | NutritionProduct | Specimen) Who or what the alert is about
... occurrence Σ 1..1 Period When the alert condition occurred/is occurring
... derivedFrom 1..* BackboneElement Reference to the observation(s) this alert is associated with
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
Slice: Unordered, Open by value:url
.... observation Σ 1..1 Reference(PhdNumericObservation | PhdCompoundNumericObservation | PhdCompoundObservation) The Observation having a value causing the alert condition
... label 0..1 string Threshold notification text
... signal 0..* BackboneElement Annunciation or notification of the alert condition
Slice: Unordered, Open by value:type

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
DeviceAlert.status Base required DeviceAlert Status Codes 📍6.0.0-ballot5 FHIR Std.
DeviceAlert.code Base required DeviceAlert Condition Codes 📍2.0.0 THO v7.3

Constraints

Id Grade Path(s) Description Expression
dom-2 error DeviceAlert If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error DeviceAlert If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id.trace('id') in %resource.descendants().select(reference | as(uri))) or descendants().where(reference='#' | as(uri)='#').exists()).not()).trace('unmatched', id).empty()
dom-4 error DeviceAlert If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error DeviceAlert If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice DeviceAlert A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. DeviceAlert 0..* DeviceAlert Documentation of an alert (a.k.a. alarm) generated by a device indicating a noteworthy condition
... code 1..1 CodeableConcept Code for the alert condition
Binding: DeviceAlertConditionCodes (2.0.0) (required)
... derivedFrom 1..* BackboneElement Reference to the observation(s) this alert is associated with
.... observation 1..1 Reference(PhdNumericObservation | PhdCompoundNumericObservation | PhdCompoundObservation) The Observation having a value causing the alert condition
... label 0..1 string Threshold notification text

doco Documentation for this format

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
DeviceAlert.code Base required DeviceAlert Condition Codes 📍2.0.0 THO v7.3
NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. DeviceAlert 0..* DeviceAlert Documentation of an alert (a.k.a. alarm) generated by a device indicating a noteworthy condition
... id Σ 0..1 id Logical id of this artifact
... meta Σ 0..1 Meta Metadata about the resource
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... text 0..1 Narrative Text summary of the resource, for human interpretation
This profile does not constrain the narrative in regard to content, language, or traceability to data elements
... contained 0..* Resource Contained, inline Resources
... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored
Slice: Unordered, Open by value:url
... identifier Σ 0..* Identifier Business identifier for this device alert
... procedure Σ 0..* Reference(Procedure) Procedure during which the alert occurred
... status ?!Σ 1..1 code in-progress | completed | entered-in-error | unknown
Binding: DeviceAlertStatusCodes (required): in-progress | completed | entered-in-error | unknown
... category Σ 0..* CodeableConcept High level categorization of device alert
Binding: DeviceAlert Category Codes (example)
... type 0..1 CodeableConcept The particular kind of alert
Binding: DeviceAlert Type Codes (extensible)
... priority Σ 0..1 CodeableConcept The urgency by which the condition ought to be addressed
Binding: DeviceAlertPriorityCodes (extensible)
... code Σ 1..1 CodeableConcept Code for the alert condition
Binding: DeviceAlertConditionCodes (2.0.0) (required)
... subject Σ 1..1 Reference(Patient | Device | BiologicallyDerivedProduct | Group | Location | Medication | NutritionProduct | Specimen) Who or what the alert is about
... encounter Σ 0..1 Reference(Encounter) Encounter during which the alert condition occurred
... occurrence Σ 1..1 Period When the alert condition occurred/is occurring
... device Σ 0..1 Reference(Device | DeviceMetric) The Device (or DeviceMetric) that detected the alert condition
... acknowledged 0..1 boolean Whether the alert condition has been acknowledged
... acknowledgedBy 0..1 Reference(Patient | Device | Practitioner | PractitionerRole | RelatedPerson) Who acknowledged the alert condition
... location Σ 0..1 Reference(Location) Location of the subject when the alert was raised
... derivedFrom 1..* BackboneElement Reference to the observation(s) this alert is associated with
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
Slice: Unordered, Open by value:url
.... observation Σ 1..1 Reference(PhdNumericObservation | PhdCompoundNumericObservation | PhdCompoundObservation) The Observation having a value causing the alert condition
.... component 0..1 Coding The Observation.component having a value causing the alert condition
Binding: LOINCCodes (example): Codes identifying names of simple observations.
.... limit 0..1 Range The boundaries beyond which a value was detected to cause the alert condition
... label 0..1 string Threshold notification text
... signal 0..* BackboneElement Annunciation or notification of the alert condition
Slice: Unordered, Open by value:type

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
DeviceAlert.language Base required All Languages 📍6.0.0-ballot5 FHIR Std.
DeviceAlert.status Base required DeviceAlert Status Codes 📍6.0.0-ballot5 FHIR Std.
DeviceAlert.category Base example DeviceAlert Category Codes 📦1.0.0 THO v7.3
DeviceAlert.type Base extensible DeviceAlert Type Codes 📦1.0.0 THO v7.3
DeviceAlert.priority Base extensible DeviceAlert Priority Codes 📍6.0.0-ballot5 FHIR Std.
DeviceAlert.code Base required DeviceAlert Condition Codes 📍2.0.0 THO v7.3
DeviceAlert.derivedFrom.​component Base example LOINC Codes 📍6.0.0-ballot5 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error DeviceAlert If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error DeviceAlert If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id.trace('id') in %resource.descendants().select(reference | as(uri))) or descendants().where(reference='#' | as(uri)='#').exists()).not()).trace('unmatched', id).empty()
dom-4 error DeviceAlert If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error DeviceAlert If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice DeviceAlert A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())

Key Elements View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. DeviceAlert 0..* DeviceAlert Documentation of an alert (a.k.a. alarm) generated by a device indicating a noteworthy condition
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... contained 0..* Resource Contained, inline Resources
... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored
Slice: Unordered, Open by value:url
... code Σ 1..1 CodeableConcept Code for the alert condition
Binding: DeviceAlertConditionCodes (2.0.0) (required)
... subject Σ 1..1 Reference(Patient | Device | BiologicallyDerivedProduct | Group | Location | Medication | NutritionProduct | Specimen) Who or what the alert is about
... occurrence Σ 1..1 Period When the alert condition occurred/is occurring
... derivedFrom 1..* BackboneElement Reference to the observation(s) this alert is associated with
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
Slice: Unordered, Open by value:url
.... observation Σ 1..1 Reference(PhdNumericObservation | PhdCompoundNumericObservation | PhdCompoundObservation) The Observation having a value causing the alert condition
... label 0..1 string Threshold notification text
... signal 0..* BackboneElement Annunciation or notification of the alert condition
Slice: Unordered, Open by value:type

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
DeviceAlert.status Base required DeviceAlert Status Codes 📍6.0.0-ballot5 FHIR Std.
DeviceAlert.code Base required DeviceAlert Condition Codes 📍2.0.0 THO v7.3

Constraints

Id Grade Path(s) Description Expression
dom-2 error DeviceAlert If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error DeviceAlert If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id.trace('id') in %resource.descendants().select(reference | as(uri))) or descendants().where(reference='#' | as(uri)='#').exists()).not()).trace('unmatched', id).empty()
dom-4 error DeviceAlert If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error DeviceAlert If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice DeviceAlert A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())

Differential View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. DeviceAlert 0..* DeviceAlert Documentation of an alert (a.k.a. alarm) generated by a device indicating a noteworthy condition
... code 1..1 CodeableConcept Code for the alert condition
Binding: DeviceAlertConditionCodes (2.0.0) (required)
... derivedFrom 1..* BackboneElement Reference to the observation(s) this alert is associated with
.... observation 1..1 Reference(PhdNumericObservation | PhdCompoundNumericObservation | PhdCompoundObservation) The Observation having a value causing the alert condition
... label 0..1 string Threshold notification text

doco Documentation for this format

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
DeviceAlert.code Base required DeviceAlert Condition Codes 📍2.0.0 THO v7.3

Snapshot ViewView

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. DeviceAlert 0..* DeviceAlert Documentation of an alert (a.k.a. alarm) generated by a device indicating a noteworthy condition
... id Σ 0..1 id Logical id of this artifact
... meta Σ 0..1 Meta Metadata about the resource
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... text 0..1 Narrative Text summary of the resource, for human interpretation
This profile does not constrain the narrative in regard to content, language, or traceability to data elements
... contained 0..* Resource Contained, inline Resources
... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored
Slice: Unordered, Open by value:url
... identifier Σ 0..* Identifier Business identifier for this device alert
... procedure Σ 0..* Reference(Procedure) Procedure during which the alert occurred
... status ?!Σ 1..1 code in-progress | completed | entered-in-error | unknown
Binding: DeviceAlertStatusCodes (required): in-progress | completed | entered-in-error | unknown
... category Σ 0..* CodeableConcept High level categorization of device alert
Binding: DeviceAlert Category Codes (example)
... type 0..1 CodeableConcept The particular kind of alert
Binding: DeviceAlert Type Codes (extensible)
... priority Σ 0..1 CodeableConcept The urgency by which the condition ought to be addressed
Binding: DeviceAlertPriorityCodes (extensible)
... code Σ 1..1 CodeableConcept Code for the alert condition
Binding: DeviceAlertConditionCodes (2.0.0) (required)
... subject Σ 1..1 Reference(Patient | Device | BiologicallyDerivedProduct | Group | Location | Medication | NutritionProduct | Specimen) Who or what the alert is about
... encounter Σ 0..1 Reference(Encounter) Encounter during which the alert condition occurred
... occurrence Σ 1..1 Period When the alert condition occurred/is occurring
... device Σ 0..1 Reference(Device | DeviceMetric) The Device (or DeviceMetric) that detected the alert condition
... acknowledged 0..1 boolean Whether the alert condition has been acknowledged
... acknowledgedBy 0..1 Reference(Patient | Device | Practitioner | PractitionerRole | RelatedPerson) Who acknowledged the alert condition
... location Σ 0..1 Reference(Location) Location of the subject when the alert was raised
... derivedFrom 1..* BackboneElement Reference to the observation(s) this alert is associated with
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
Slice: Unordered, Open by value:url
.... observation Σ 1..1 Reference(PhdNumericObservation | PhdCompoundNumericObservation | PhdCompoundObservation) The Observation having a value causing the alert condition
.... component 0..1 Coding The Observation.component having a value causing the alert condition
Binding: LOINCCodes (example): Codes identifying names of simple observations.
.... limit 0..1 Range The boundaries beyond which a value was detected to cause the alert condition
... label 0..1 string Threshold notification text
... signal 0..* BackboneElement Annunciation or notification of the alert condition
Slice: Unordered, Open by value:type

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
DeviceAlert.language Base required All Languages 📍6.0.0-ballot5 FHIR Std.
DeviceAlert.status Base required DeviceAlert Status Codes 📍6.0.0-ballot5 FHIR Std.
DeviceAlert.category Base example DeviceAlert Category Codes 📦1.0.0 THO v7.3
DeviceAlert.type Base extensible DeviceAlert Type Codes 📦1.0.0 THO v7.3
DeviceAlert.priority Base extensible DeviceAlert Priority Codes 📍6.0.0-ballot5 FHIR Std.
DeviceAlert.code Base required DeviceAlert Condition Codes 📍2.0.0 THO v7.3
DeviceAlert.derivedFrom.​component Base example LOINC Codes 📍6.0.0-ballot5 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error DeviceAlert If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error DeviceAlert If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource contained.where((('#'+id.trace('id') in %resource.descendants().select(reference | as(uri))) or descendants().where(reference='#' | as(uri)='#').exists()).not()).trace('unmatched', id).empty()
dom-4 error DeviceAlert If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-5 error DeviceAlert If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice DeviceAlert A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())

Summary

Mandatory: 1 element

Structures

This structure refers to these other structures:

Slices

This structure defines the following Slices:

  • The element 1 is sliced based on the value of DeviceAlert.signal

Maturity: 1

 

Other representations of profile: CSV, Excel, Schematron

Notes:

Implementation Notes

Understanding derivedFrom Structure

The derivedFrom element is a backbone element with two key sub-elements:

observation (required)

  • References the measurement observation that triggered the alert
  • Must reference a PhdNumericObservation, PhdCompoundNumericObservation, or PhdCompoundObservation
  • The actual measured value that exceeded limits is found in the referenced observation's value[x] or component.value[x]

component (optional)

  • Used when the alert applies to a specific component of a compound observation
  • Contains a Coding that matches one of the Observation.component.code values in the referenced observation (which will be an MDC code in the context of this IG)
  • Example: For a blood pressure observation with systolic, diastolic, and mean components, this identifies which component (e.g., systolic) triggered the alert
  • If omitted, the alert applies to the overall compound observation

Presence vs Status

Two elements track alert state:

  • presence (boolean): Is the alert condition currently occurring? (true/false)
  • status: Workflow state of the alert resource (in-progress, completed, etc.)

These work together:

  • Active alert: presence=true, status=in-progress
  • Resolved alert: presence=false, status=completed
  • Alert acknowledged but still present: presence=true, status=in-progress, signal.presence=acknowledged

When did the alert occur

In the occurrence[x] element use occurrenceDateTime for a specific point in time when the alert occurred, or occurrencePeriod for alerts that span a time range. This represents when the condition was detected, is typically close to the effectiveDateTime of the referenced observation.

Query Patterns

Common queries for DeviceAlert resources:

  • Active alerts for a patient: GET /DeviceAlert?subject=Patient/123&status=in-progress&presence=true
  • Unacknowledged alerts: GET /DeviceAlert?acknowledged=false&status=in-progress
  • High priority alerts: GET /DeviceAlert?priority=high&status=in-progress
  • Alerts for specific device: GET /DeviceAlert?device=Device/456
  • Alerts by type: GET /DeviceAlert?type=urn:iso:std:iso:11073:10101|196648 (high range alerts)

Compatibility Considerations

For systems transitioning from the earlier SimpleAlerting extension approach:

  1. Migration Path: Existing observations with SimpleAlerting extensions can be transformed into separate DeviceAlert resources
  2. Backward Compatibility: Both approaches can coexist during transition periods
  3. Data Mapping:
    • Extension currentLimits → DeviceAlert derivedFrom.limit
    • Extension alertOperationalState → DeviceAlert signal.activationState and signal.type
    • Extension thresholdNotificationText → DeviceAlert label
    • Observation interpretation (in-alarm) → DeviceAlert presence=true

Best Practices

  1. Always provide derivedFrom: Link alerts to their source observations for traceability
  2. Use component for compound observations: Be specific about which component triggered the alert
  3. Include limit ranges when available: Helps understand device configuration and alert logic
  4. Provide meaningful labels: Make alerts human-readable for clinicians
  5. Set appropriate categories: Enable proper filtering and access control
  6. Include device references: Track which device generated the alert
  7. Use standard MDC codes: Ensure interoperability with IEEE 11073 ecosystem
  8. Update status appropriately: Mark alerts as completed when conditions resolve

Limitations

  1. Single component per derivedFrom: If multiple components of the same observation trigger alerts, create separate derivedFrom entries or separate DeviceAlert resources
  2. Limit precision: The limit element is a Range with Quantity values, which may not capture all complexity of alert logic (e.g., rate-of-change alerts, multi-condition alerts)
  3. Signal details: The signal element may not capture all aspects of complex multi-sensory alerting systems
  4. Historical limits: No built-in mechanism to track changes in limit settings over time