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 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 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) |
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: 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 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:
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.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"
}
]
}
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"
}
}
]
}