Implementation Guide
Health Device Data Transfer
Version 0.1.0 - ballot

Specification of health data transfer from devices to DiGA (§ 374a SGB V)

Resource Profile: DeviceMetric – Sensor Type and Calibration Status

Official URL: https://gematik.de/fhir/hddt/StructureDefinition/hddt-sensor-type-and-calibration-status Version: 0.1.0
Draft as of 2025-10-27 Computable Name: HddtSensorTypeAndCalibrationStatus

Copyright/Legal: Copyright (c) 2025 gematik GmbH

The HddtSensorTypeAndCalibrationStatus profile captures the calibration status of a sensor which is part of a Personal Health Device.

Personal Health Devices need to be calibrated in order to provide safe measurements. Some devices are already calibrated by the manufacturer while others calibrate themselves after activation and others need to be calibrated by the patient. If a Personal Health Device transmits data from a non calibrated sensor to the resource server at all depends on the concrete product. For a DiGA as a device data consumer to process device data in a safe manner, it must be transparent if the data it received was measured by a calibrated sensor or not.

For devices where the sensor that measured a value requires automated or manual calibration, the Observation capturing this value MUST refer to a HddtSensorTypeAndCalibrationStatus resource through its Observation.device element. The HddtSensorTypeAndCalibrationStatus implements a FHIR DeviceMetric resource which holds calibration information in a calibration.type, a calibration.state and a calibration.date element. In addition the HddtSensorTypeAndCalibrationStatus can provide a definition of the unit that is preferrably to be used for presenting measured values to the patient.

The HddtSensorTypeAndCalibrationStatus of a measurement MUST always refer to a HddTPersonalHealthDevice Device resource that represents the Personal Health Device that contains the sensor. This is a many-to-one relationship which allows for a Personal Health Device to contain multiple sensors for different measured values. E.g. by this a pulse oximeter as a HDDT Personal Health Device can provide pulse and SPO2 as two different interoperable values with each of this values being linked with a dedicated HddtSensorTypeAndCalibrationStatus resource.

Obligations and Conventions:

DiGA as device data consumers SHOULD NOT rely on the DeviceMetric.operationalStatus of a sensor as this status does only reflect the status of the sensor and does not provide information about the end-to-end status of the flow of device data from the sensor within the Personal Health Device to the resource server in the device backend. Instead DiGA SHOULD process the Device.status information that can be obtained through the DeviceMetric.source reference. This element considers the end-to-end availability of data and therefore is the only source for information about potentially missing data (e.g. due to temporal problems with the bluetooth or internet connection).

Constraints applied:

  • unit is restricted to UCUM.
  • source is constrained as a mandatory element in order to enable a DiGA to obtain dynamic and static device attributes through this reference
  • calibration is set to Must Support. This element and respective status information MUST be provided if the sensor performs automated or requires manual calibration after the device has been put into operation with the patient (Device.statusis active).

Usages:

You can also check for usages in the FHIR IG Statistics

Formal Views of Profile Content

Description of Profiles, Differentials, Snapshots and how the different presentations work.

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. DeviceMetric 0..* DeviceMetric Configuration or setting capability of a personal health device
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... type Σ 1..1 CodeableConcept Identity of metric, for example Heart Rate or PEEP Setting
Binding: DeviceMetricAndComponentTypes (preferred): Describes the metric type.
... source Σ 1..1 Reference(Device – Personal Health Device) Reference to the Personal Health Device holding the sensor
... operationalStatus Σ 0..1 code on | off | standby | entered-in-error
Binding: DeviceMetricOperationalStatus (required): Describes the operational status of the DeviceMetric.
... category Σ 1..1 code measurement | setting | calculation | unspecified
Binding: DeviceMetricCategory (required): Describes the category of the metric.
... calibration SΣ 0..* BackboneElement Describes the calibrations that have been performed or that are required to be performed
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... state Σ 1..1 code not-calibrated | calibration-required | calibrated | unspecified
Binding: DeviceMetricCalibrationState (required): Describes the state of a metric calibration.
.... time SΣ 0..1 instant Time when the last calibration has been performed

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
DeviceMetric.type Base preferred Device Metric and Component Types 📍4.0.1 FHIR Std.
DeviceMetric.unit Base required UCUM Codes 📦4.0.1 FHIR Std.
DeviceMetric.operationalStatus Base required DeviceMetricOperationalStatus 📍4.0.1 FHIR Std.
DeviceMetric.category Base required DeviceMetricCategory 📍4.0.1 FHIR Std.
DeviceMetric.calibration.​state Base required DeviceMetricCalibrationState 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error DeviceMetric If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error DeviceMetric 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 in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error DeviceMetric 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 DeviceMetric If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice DeviceMetric 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())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from DeviceMetric

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. DeviceMetric 0..* DeviceMetric Configuration or setting capability of a personal health device
... unit 0..1 CodeableConcept UCUM code of the unit of the measurement as it is used when presenting data to the patient
Binding: UCUMCodes (required): For HDDT only codes from UCUM MUST be used for coding units of measurements
... source 1..1 Reference(Device – Personal Health Device) Reference to the Personal Health Device holding the sensor
... operationalStatus 0..1 code on | off | standby | entered-in-error
.... state 1..1 code not-calibrated | calibration-required | calibrated | unspecified
.... time S 0..1 instant Time when the last calibration has been performed

doco Documentation for this format

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
DeviceMetric.unit Base required UCUM Codes 📦4.0.1 FHIR Std.
NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. DeviceMetric 0..* DeviceMetric Configuration or setting capability of a personal health device
... 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
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier Σ 0..* Identifier Instance identifier
... type Σ 1..1 CodeableConcept Identity of metric, for example Heart Rate or PEEP Setting
Binding: DeviceMetricAndComponentTypes (preferred): Describes the metric type.
... unit Σ 0..1 CodeableConcept UCUM code of the unit of the measurement as it is used when presenting data to the patient
Binding: UCUMCodes (required): For HDDT only codes from UCUM MUST be used for coding units of measurements
... source Σ 1..1 Reference(Device – Personal Health Device) Reference to the Personal Health Device holding the sensor
... parent Σ 0..1 Reference(Device) Describes the link to the parent Device
... operationalStatus Σ 0..1 code on | off | standby | entered-in-error
Binding: DeviceMetricOperationalStatus (required): Describes the operational status of the DeviceMetric.
... color Σ 0..1 code black | red | green | yellow | blue | magenta | cyan | white
Binding: DeviceMetricColor (required): Describes the typical color of representation.
... category Σ 1..1 code measurement | setting | calculation | unspecified
Binding: DeviceMetricCategory (required): Describes the category of the metric.
... measurementPeriod Σ 0..1 Timing Describes the measurement repetition time
... calibration SΣ 0..* BackboneElement Describes the calibrations that have been performed or that are required to be performed
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... type Σ 0..1 code unspecified | offset | gain | two-point
Binding: DeviceMetricCalibrationType (required): Describes the type of a metric calibration.
.... state Σ 1..1 code not-calibrated | calibration-required | calibrated | unspecified
Binding: DeviceMetricCalibrationState (required): Describes the state of a metric calibration.
.... time SΣ 0..1 instant Time when the last calibration has been performed

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
DeviceMetric.language Base preferred Common Languages 📍4.0.1 FHIR Std.
DeviceMetric.type Base preferred Device Metric and Component Types 📍4.0.1 FHIR Std.
DeviceMetric.unit Base required UCUM Codes 📦4.0.1 FHIR Std.
DeviceMetric.operationalStatus Base required DeviceMetricOperationalStatus 📍4.0.1 FHIR Std.
DeviceMetric.color Base required DeviceMetricColor 📍4.0.1 FHIR Std.
DeviceMetric.category Base required DeviceMetricCategory 📍4.0.1 FHIR Std.
DeviceMetric.calibration.​type Base required DeviceMetricCalibrationType 📍4.0.1 FHIR Std.
DeviceMetric.calibration.​state Base required DeviceMetricCalibrationState 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error DeviceMetric If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error DeviceMetric 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 in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error DeviceMetric 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 DeviceMetric If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice DeviceMetric 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())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from DeviceMetric

Summary

Mandatory: 1 element(1 nested mandatory element)
Must-Support: 2 elements

Structures

This structure refers to these other structures:

Key Elements View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. DeviceMetric 0..* DeviceMetric Configuration or setting capability of a personal health device
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... type Σ 1..1 CodeableConcept Identity of metric, for example Heart Rate or PEEP Setting
Binding: DeviceMetricAndComponentTypes (preferred): Describes the metric type.
... source Σ 1..1 Reference(Device – Personal Health Device) Reference to the Personal Health Device holding the sensor
... operationalStatus Σ 0..1 code on | off | standby | entered-in-error
Binding: DeviceMetricOperationalStatus (required): Describes the operational status of the DeviceMetric.
... category Σ 1..1 code measurement | setting | calculation | unspecified
Binding: DeviceMetricCategory (required): Describes the category of the metric.
... calibration SΣ 0..* BackboneElement Describes the calibrations that have been performed or that are required to be performed
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... state Σ 1..1 code not-calibrated | calibration-required | calibrated | unspecified
Binding: DeviceMetricCalibrationState (required): Describes the state of a metric calibration.
.... time SΣ 0..1 instant Time when the last calibration has been performed

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
DeviceMetric.type Base preferred Device Metric and Component Types 📍4.0.1 FHIR Std.
DeviceMetric.unit Base required UCUM Codes 📦4.0.1 FHIR Std.
DeviceMetric.operationalStatus Base required DeviceMetricOperationalStatus 📍4.0.1 FHIR Std.
DeviceMetric.category Base required DeviceMetricCategory 📍4.0.1 FHIR Std.
DeviceMetric.calibration.​state Base required DeviceMetricCalibrationState 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error DeviceMetric If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error DeviceMetric 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 in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error DeviceMetric 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 DeviceMetric If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice DeviceMetric 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())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

Differential View

This structure is derived from DeviceMetric

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. DeviceMetric 0..* DeviceMetric Configuration or setting capability of a personal health device
... unit 0..1 CodeableConcept UCUM code of the unit of the measurement as it is used when presenting data to the patient
Binding: UCUMCodes (required): For HDDT only codes from UCUM MUST be used for coding units of measurements
... source 1..1 Reference(Device – Personal Health Device) Reference to the Personal Health Device holding the sensor
... operationalStatus 0..1 code on | off | standby | entered-in-error
.... state 1..1 code not-calibrated | calibration-required | calibrated | unspecified
.... time S 0..1 instant Time when the last calibration has been performed

doco Documentation for this format

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
DeviceMetric.unit Base required UCUM Codes 📦4.0.1 FHIR Std.

Snapshot View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. DeviceMetric 0..* DeviceMetric Configuration or setting capability of a personal health device
... 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
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier Σ 0..* Identifier Instance identifier
... type Σ 1..1 CodeableConcept Identity of metric, for example Heart Rate or PEEP Setting
Binding: DeviceMetricAndComponentTypes (preferred): Describes the metric type.
... unit Σ 0..1 CodeableConcept UCUM code of the unit of the measurement as it is used when presenting data to the patient
Binding: UCUMCodes (required): For HDDT only codes from UCUM MUST be used for coding units of measurements
... source Σ 1..1 Reference(Device – Personal Health Device) Reference to the Personal Health Device holding the sensor
... parent Σ 0..1 Reference(Device) Describes the link to the parent Device
... operationalStatus Σ 0..1 code on | off | standby | entered-in-error
Binding: DeviceMetricOperationalStatus (required): Describes the operational status of the DeviceMetric.
... color Σ 0..1 code black | red | green | yellow | blue | magenta | cyan | white
Binding: DeviceMetricColor (required): Describes the typical color of representation.
... category Σ 1..1 code measurement | setting | calculation | unspecified
Binding: DeviceMetricCategory (required): Describes the category of the metric.
... measurementPeriod Σ 0..1 Timing Describes the measurement repetition time
... calibration SΣ 0..* BackboneElement Describes the calibrations that have been performed or that are required to be performed
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... type Σ 0..1 code unspecified | offset | gain | two-point
Binding: DeviceMetricCalibrationType (required): Describes the type of a metric calibration.
.... state Σ 1..1 code not-calibrated | calibration-required | calibrated | unspecified
Binding: DeviceMetricCalibrationState (required): Describes the state of a metric calibration.
.... time SΣ 0..1 instant Time when the last calibration has been performed

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
DeviceMetric.language Base preferred Common Languages 📍4.0.1 FHIR Std.
DeviceMetric.type Base preferred Device Metric and Component Types 📍4.0.1 FHIR Std.
DeviceMetric.unit Base required UCUM Codes 📦4.0.1 FHIR Std.
DeviceMetric.operationalStatus Base required DeviceMetricOperationalStatus 📍4.0.1 FHIR Std.
DeviceMetric.color Base required DeviceMetricColor 📍4.0.1 FHIR Std.
DeviceMetric.category Base required DeviceMetricCategory 📍4.0.1 FHIR Std.
DeviceMetric.calibration.​type Base required DeviceMetricCalibrationType 📍4.0.1 FHIR Std.
DeviceMetric.calibration.​state Base required DeviceMetricCalibrationState 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error DeviceMetric If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error DeviceMetric 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 in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4 error DeviceMetric 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 DeviceMetric If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice DeviceMetric 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())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from DeviceMetric

Summary

Mandatory: 1 element(1 nested mandatory element)
Must-Support: 2 elements

Structures

This structure refers to these other structures:

 

Other representations of profile: CSV, Excel, Schematron