Implementation Guide
Health Device Data Transfer
Version 0.1.0 - ballot

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

Endpoint DeviceMetric

This document describes the syntax and semantics of querying FHIR DeviceMetric resources via the standard FHIR RESTful API. A DeviceMetric resource represents a status instance of a medical aid or implant, and MAY be referenced by a measurement. In the context of HDDT, a DeviceMetric represents the calibration status of a medical aid or implant.

To be compliant with § 374a SGB V, a Device Data Recorder MUST implement interactions for reading and searching DeviceMetric resources:

Returned resources MUST conform to the HDDT Sensor Type and Calibration Status DeviceMetric profile.


Endpoints

DeviceMetric - READ

   
Endpoint [base]/DeviceMetric/<id>
HTTP Method GET
Interaction READ
Description Retrieve a single DeviceMetric resource by its logical id. The returned DeviceMetric MUST conform to the HDDT Sensor Type and Calibration Status profile. All constraints and obligations of the standard FHIR read interaction apply.
Request Parameters id - logical ID of the DeviceMetric.
Authorization OAuth2 Bearer token REQUIRED. The resource server MUST only return a DeviceMetric resource that can be linked to the patient who is associated with the token. Provided DeviceMetric resources MUST match the requestor’s granted scopes (see Smart Scopes for the compartment semantics that MUST be used for validating the authorization of the requestor).
Returned Objects HDDT Sensor Type and Calibration Status resource. If no matching resource exists or if the matching resource cannot be returned, an error response MUST be sent (see below).
Specifications The only ways for a DiGA to obtain the logical id of a DeviceMetric resource are an Observation.device reference, or a ‘search’ interaction for DeviceMetric resources of the given patient.
A DiGA SHOULD read a DeviceMetric resource in order to validate the calibration status of a medical aid or implant. The calibration status is REQUIRED for correct interpretation of measurements. DeviceMetric MUST reference the Device instance via DeviceMetric.source.
Error codes 400 Bad Request OperationOutcome (Invalid query parameters / Invalid search parameters)
401 Unauthorized plaintext (Invalid or expired JWT)
403 Forbidden OperationOutcome (Empty Authorization header, or client has no permission for this resource.)
404 Not Found OperationOutcome (No resource exists or is accessible with this ID.)
500 (Internal Server Error—MAY be either an OperationOutcome or plain text)

DeviceMetric - VREAD

Remark: A Device Data Recorder MAY omit the version specific read interaction if it does not support versioning of DeviceMetric resources (see Retrieving Data for a discussion on how to express changes of the calibration state of a sensor).

   
Endpoint [base]/DeviceMetric/<id>/_history/<versionId>
HTTP Method GET
Interaction VREAD
Description Retrieve a single DeviceMetric resource by its logical id and versionId. The returned DeviceMetric MUST conform to the HDDT Sensor Type and Calibration Status profile. All constraints and obligations of the standard FHIR vread interaction apply.
Request Parameters id - logical ID of the DeviceMetric
versionId - version identifier of the DeviceMetric
Authorization OAuth2 Bearer token REQUIRED. The resource server MUST only return versions of DeviceMetric resources that can be linked to the patient who is associated with the token. Provided Device Metric resources MUST match the requestor’s granted scopes (see Smart Scopes for the compartment semantics that MUST be used for validating the authorization of the requestor).
Returned Objects HDDT Sensor Type and Calibration Status resource. If no matching resource or version exists or if the matching resource or version cannot be returned, an error response MUST be sent (see below).
Specifications The only ways for a DiGA to obtain the logical id and the versionId of a DeviceMetric resource are an Observation.device reference, or a ‘search’ interaction for DeviceMetric resources of the given patient.
Error codes 400 Bad Request OperationOutcome (Invalid query parameters / Invalid search parameters)
401 Unauthorized plaintext (Invalid or expired JWT)
403 Forbidden OperationOutcome (Empty Authorization header, or client has no permission for this resource.)
404 Not Found OperationOutcome (No resource exists or is accessible with this ID.)
500 (Internal Server Error—MAY be either an OperationOutcome or plain text)

Remark: The FHIR specification allows searching for resources by various parameters. However, in the context of HDDT, the only relevant search parameter is the patient who is associated with the access token. Therefore, the search interaction is restricted to this parameter only.

   
Endpoint /DeviceMetric
HTTP Method GET / POST
Interaction SEARCH
Description Search for DeviceMetric resources by certain properties.
Authorization OAuth2 Bearer token REQUIRED. The resource server MUST only return DeviceMetric resources that can be linked to the patient who is associated with the token. Provided DeviceMetric resources MUST match the requestor’s granted scopes (see Smart Scopes for the compartment semantics that MUST be used for validating the authorization of the requestor).
Search Parameters The resource server MAY support any standard FHIR DeviceMetric search parameters. A DiGA MAY e.g. use the source parameter to discover all DeviceMetric resources that belong to a given Personal Health Device instance.
Returned Objects Bundle containing DeviceMetric entries that match the query. Optionally, Device entries when using _include. If no matching DeviceMetric resources are found, an empty Bundle MUST be returned.
Specifications All constraints and obligations of the standard FHIR search interaction apply.
Error codes 400 Bad Request OperationOutcome (Invalid query parameters / Invalid search parameters)
401 Unauthorized plaintext (Invalid or expired JWT)
403 Forbidden OperationOutcome (Empty Authorization header, or client has no permission for this resource.)
404 Not Found OperationOutcome (No resource exists or is accessible with this ID.)
500 (Internal Server Error—MAY be either an OperationOutcome or plain text)

Profile - HDDT Sensor Type and Calibration Status

Profile: DeviceMetric – Sensor Type and Calibration Status

This structure is derived from DeviceMetric

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

Detailed description of differential elements

Guidance on how to interpret the contents of this table can be foundhere

0. DeviceMetric
Definition

Describes the sensor type and calibration status of a sensor within a Personal Health Device as a DeviceMetric.

ShortConfiguration or setting capability of a personal health device
2. DeviceMetric.unit
Definition

The unit in which the Personal Health Device presents its measurement values to the patient.

ShortUCUM code of the unit of the measurement as it is used when presenting data to the patient
Comments

This element holds the unit of measurement that is preferrably to be used for presenting measured values to the patient. This unit MAY differ from the unit that is used with the Observation.value[x] of measured data.

Example: A rtCGM sensor measures glucose values as mg/dl. All data is stored in the health record in this unit. The resource server provides the data only using mg/dl as the unit. At the mobile app that came with the rtCGM (the rtCGM’s Personal Health Gateway) the patient configured the preferred unit as mmol/l. Therefore all data is calculated (by the device or the app) to mmol/l before displaying it to the patient. In this example the unit of Observation.value[x] is mg/dl while DeviceMetric.unit is mmol/l. The motivation for this behaviour is to allow the DiGA to obtain information about the patient’s preference and thus to be in sync with the medical aid by displaying measured values in the same unit.

BindingThe codes SHALL be taken from UCUMCodes
(required to http://hl7.org/fhir/ValueSet/ucum-units)

For HDDT only codes from UCUM MUST be used for coding units of measurements

Requirements

allow a DiGA to detect the unit the patient is used to

4. DeviceMetric.source
Definition

Points to the specific Device resource that holds the sensor for which the documented calibration status applies.

ShortReference to the Personal Health Device holding the sensor
Control1..?
TypeReference(Device – Personal Health Device)
6. DeviceMetric.operationalStatus
Comments

DiGA as device data consumers SHOULD NOT rely on the 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 SHOILD 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).

8. DeviceMetric.calibration
Must Supporttrue
10. DeviceMetric.calibration.state
Control1..?
12. DeviceMetric.calibration.time
Definition

The time when the last calibration has been performed. This element covers both manual calibration performed by the patient and automated calibration performed by the device itself. E.g. with a self-calibrating rtCGM calibration.time signals the time when the device started sending calibrated values after the initial calibration phase.

If the sensor does not require calibration, this element MAY be omitted.

ShortTime when the last calibration has been performed
Must Supporttrue

Example: Glucometer DeviceMetric

In this example the patient uses a glucometer that is connected to the Device Data Recorder via Bluetooth. The glucometer is used to perform blood glucose measurements that are stored as Observation resources in the Device Data Recorder. Each Observation references the DeviceMetric resource that holds the calibration state of the glucometer.

In the given example the device measures the glucose concentration from capillary blood by using test strips. The patient’s preferred unit is mg/dl which is used by the device for displaying measured values. The glucometer needs to be calibrated by the patient using control strips. The last calibration was performed in Septemer 2025 and the glucometer is still calibrated.

Remarks:

  • The text element is omitted in this example to keep the example small. Nevertheless, as all HDDT resources are intended for sole machine processing, the text element MAY be omitted.

DeviceMetric - READ

Request: GET /DeviceMetric/example-glucometer-metric

Response:

{
  "resourceType" : "DeviceMetric",
  "id" : "example-glucometer-metric",
  "meta" : {
    "profile" : [
      🔗 "https://gematik.de/fhir/hddt/StructureDefinition/hddt-sensor-type-and-calibration-status"
    ]
  },
  "type" : {
    "coding" : [
      {
        "system" : "urn:iso:std:iso:11073:10101",
        "version" : "20250520",
        "code" : "160184",
        "display" : "MDC_CONC_GLU_CAPILLARY_WHOLEBLOOD"
      }
    ]
  },
  "unit" : {
    "coding" : [
      {
        "system" : "http://unitsofmeasure.org",
        "code" : "mg/dL",
        "display" : "mg/dL"
      }
    ]
  },
  "source" : {
    🔗 "reference" : "Device/example-glucometer"
  },
  "operationalStatus" : "on",
  "category" : "measurement",
  "calibration" : [
    {
      "type" : "gain",
      "state" : "calibrated",
      "time" : "2025-09-01T09:08:04+02:00"
    }
  ]
}

DeviceMetric - SEARCH

Request: GET /DeviceMetric

Response:

{
    "resourceType": "Bundle",
    "type": "searchset",
    "entry": [
        {
            "fullUrl": "https://example.com/fhir/DeviceMetric/example-glucometer-metric",
            "resource": {
                "resourceType": "DeviceMetric",
                "id": "example-glucometer-metric",
                "meta": {
                    "profile": [
                        "https://gematik.de/fhir/hddt/StructureDefinition/hddt-sensor-type-and-calibration-status"
                    ]
                },
                "type": {
                    "coding": [
                        {
                            "code": "160184",
                            "system": "urn:iso:std:iso:11073:10101",
                            "version": "20250520",
                            "display": "MDC_CONC_GLU_CAPILLARY_WHOLEBLOOD"
                        }
                    ]
                },
                "unit": {
                    "coding": [
                        {
                            "code": "mg/dL",
                            "system": "http://unitsofmeasure.org",
                            "display": "mg/dL"
                        }
                    ]
                },
                "source": {
                    "reference": "Device/example-glucometer"
                },
                "operationalStatus": "on",
                "category": "measurement",
                "calibration": [
                    {
                        "type": "gain",
                        "state": "calibrated",
                        "time": "2025-09-01T09:08:04+02:00"
                    }
                ]
            },
            "search": {
                "mode": "match"
            }
        }
    ]
}

Example: rtCGM DeviceMetric

In this example, the patient uses a real-time continuous glucose monitor (rtCGM) that is connected to the Device Data Recorder via Bluetooth. The rtCGM continuously measures the glucose concentration in interstitial fluid, and the resulting data are stored as Observation resources in the Device Data Recorder. Each Observation references a DeviceMetric resource that represents the calibration status of the rtCGM.

The example device measures the glucose concentration from interstitial fluid with a frequency of one measurement every three minutes. The patient’s preferred unit is mg/dl. The device is calibrated by the manufacturer and does not require user calibration.

Instance of the HDDT Sensor Type and Calibration Status profile

{
    "resourceType": "Bundle",
    "type": "searchset",
    "entry": [
        {
            "fullUrl": "https://example.com/fhir/DeviceMetric/example-devicemetric-cgm",
            "resource": {
                "resourceType": "DeviceMetric",
                "id": "example-devicemetric-cgm",
                "meta": {
                    "profile": [
                        "https://gematik.de/fhir/hddt/StructureDefinition/hddt-sensor-type-and-calibration-status"
                    ]
                },
                "type": {
                    "coding": [
                        {
                            "code": "160212",
                            "system": "urn:iso:std:iso:11073:10101",
                            "version": "20250520",
                            "display": "MDC_CONC_GLU_ISF"
                        }
                    ]
                },
                "unit": {
                    "coding": [
                        {
                            "code": "mg/dL",
                            "system": "http://unitsofmeasure.org",
                            "display": "mg/dL"
                        }
                    ]
                },
                "source": {
                    "reference": "Device/example-device-cgm"
                },
                "operationalStatus": "on",
                "category": "measurement",
                "measurementPeriod": {
                    "repeat": {
                        "frequency": 1,
                        "period": 3,
                        "periodUnit": "min"
                    }
                },
                "calibration": [
                    {
                        "type": "unspecified",
                        "state": "calibrated"
                    }
                ]
            },
            "search": {
                "mode": "match"
            }
        }
    ]
}