Specification of health data transfer from devices to DiGA (§ 374a SGB V)
Seiteninhalt:
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 the following interactions for reading and searching DeviceMetric resources:
Returned resources MUST conform to the HDDT Sensor Type and Calibration Status DeviceMetric profile.
| 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 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), 401 (Unauthorized), 404 (Not Found), 500 (Internal Server Error)See Error Codes for complete error response formats, headers, and detailed scenarios. |
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 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 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), 401 (Unauthorized), 404 (Not Found), 500 (Internal Server Error)See Error Codes for complete error response formats, headers, and detailed scenarios. |
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 | A full list of the search parameters that this endpoint MUST support can be found on page FHIR Resource Server - Search Parameters. • The resource server MAY support any additional standard FHIR DeviceMetric search parameters. • A DiGA MAY, for example, 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), 401 (Unauthorized), 500 (Internal Server Error)See Error Codes for complete error response formats, headers, and detailed scenarios. |
Profile: DeviceMetric – Sensor Type and Calibration Status
This structure is derived from DeviceMetric
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
|---|---|---|---|---|
![]() |
0..* | DeviceMetric | Configuration or setting capability of a personal health device | |
![]() ![]() |
?!Σ | 0..1 | uri | A set of rules under which this content was created |
![]() ![]() |
?! | 0..* | Extension | Extensions that cannot be ignored |
![]() ![]() |
Σ | 1..1 | CodeableConcept | Identity of metric, for example Heart Rate or PEEP Setting Binding: DeviceMetricAndComponentTypes (preferred): Describes the metric type. |
![]() ![]() |
Σ | 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 |
![]() ![]() |
Σ | 1..1 | Reference(Device – Personal Health Device) | Reference to the Personal Health Device holding the sensor |
![]() ![]() |
Σ | 0..1 | code | on | off | standby | entered-in-error Binding: DeviceMetricOperationalStatus (required): Describes the operational status of the DeviceMetric. |
![]() ![]() |
Σ | 1..1 | code | measurement | setting | calculation | unspecified Binding: DeviceMetricCategory (required): Describes the category of the metric. |
![]() ![]() |
SΣ | 0..* | BackboneElement | Describes the calibrations that have been performed or that are required to be performed |
![]() ![]() ![]() |
?!Σ | 0..* | Extension | Extensions that cannot be ignored even if unrecognized |
![]() ![]() ![]() |
Σ | 1..1 | code | not-calibrated | calibration-required | calibrated | unspecified Binding: DeviceMetricCalibrationState (required): Describes the state of a metric calibration. |
![]() ![]() ![]() |
SΣ | 0..1 | instant | Time when the last calibration has been performed |
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. |
| Short | Configuration 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. |
| Short | UCUM 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 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 |
| Binding | The 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. |
| Short | Reference to the Personal Health Device holding the sensor |
| Control | 1..? |
| Type | Reference(Device – Personal Health Device) |
| 6. DeviceMetric.operationalStatus | |
| Comments | DiGA as device data consumers SHOULD NOT rely on the |
| 8. DeviceMetric.calibration | |
| Must Support | true |
| 10. DeviceMetric.calibration.state | |
| Control | 1..? |
| 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 If the sensor does not require calibration, this element MAY be omitted. |
| Short | Time when the last calibration has been performed |
| Must Support | true |
In this example, the patient uses a glucometer that is connected to the Device Data Recorder via Bluetooth. The glucometer performs 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 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 September 2025, and the glucometer is still calibrated.
Remarks:
text element is omitted in this example to keep it small. As all HDDT resources are intended for machine processing, the text element MAY be omitted.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" : "http://snomed.info/sct",
"version" : "http://snomed.info/sct/11000274103/version/20251115",
"code" : "700585005",
"display" : "Invasive interstitial-fluid glucose monitoring system (physical object)"
}
]
},
"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"
}
]
}
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"
}
}
]
}
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.
{
"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"
}
}
]
}