Specification of health data transfer from devices to DiGA (§ 374a SGB V)
Seiteninhalt:
This chapter provides obligations and hints for manufacturers of Device Data Recorders for implementing a FHIR Resource Server for the Mandatory Interoperable Value (MIV) Blood Glucose Measurement.
This chapter builds on the HDDT Information Model, the HDDT Generic FHIR API, and the HDDT guide for retrieving device data. It constraints these guidelines with respect to the specific requirements for exposing blood glucose measurements to DiGA, including:
Manufacturers of Device Data Recorders that support the MIV Blood Glucose Measurement
Further obligations MAY be defined by gematik and BfArM as part of the upcoming processes for conformance validation and registration.
The Device Data Recorder’s FHIR Resource Server gives DiGA access to measured data and related information about metrics and devices. A Device Data Recorder’s FHIR Resource Server that serves the MIV Blood Glucose Measurement MUST implement the following endpoints and profiles:
/metadata endpoint.The figure below shows the adaption of the HDDT Information Model for the MIV Blood Glucose Measurement. Elements denoted as [1..1] are mandatory oder MS for the MIV Blood Glucose Measurement (see Use of HL7 FHIR).
All interactions on HDDT-specific endpoints require that the requestor presents a valid Access Token that was issued by the Device Data Recorder’s OAuth2 Authorization Server (see Pairing for details). The authorization of the request follows the principles defined for HDDT Smart Scopes. For the MIV Blood Glucose Measurement only the following scopes MUST be set:
patient/Observation.rs?code:in=https://gematik.de/fhir/hddt/ValueSet/hddt-miv-blood-glucose-measurement
patient/Device.rs
patient/DeviceMetric.rs
This section discusses the HDDT Blood Glucose Measurement profile, which constrains the FHIR Observation resource for representing blood glucose measurements. For the full normative specifiction of this profile see the respective StructureDefinition.
Profile: Observation – Blood Glucose Measurement
This structure is derived from Observation
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
|---|---|---|---|---|
![]() |
C | 0..* | Observation | Measurements and simple assertions Constraints: obs-6, obs-7 |
![]() ![]() |
?!Σ | 0..1 | uri | A set of rules under which this content was created |
![]() ![]() |
?! | 0..* | Extension | Extensions that cannot be ignored |
![]() ![]() |
?!Σ | 1..1 | code | Measurement status Binding: ObservationStatus (required): Codes providing the status of an observation. Fixed Value: final |
![]() ![]() |
Σ | 1..1 | CodeableConcept | Measurement type of blood glucose Binding: ValueSet - Blood Glucose Measurement from LOINC (required): Specifies the type of measurement using codes from the ValueSet for blood glucose measurements. |
![]() ![]() |
Σ | 1..1 | dateTime | Time of measurement |
![]() ![]() |
SΣC | 0..1 | Quantity | Measured blood glucose value |
![]() ![]() ![]() |
Σ | 1..1 | decimal | Numerical value (with implicit precision) |
![]() ![]() ![]() |
?!Σ | 0..1 | code | < | <= | >= | > - how to understand the value Binding: QuantityComparator (required): How the Quantity should be understood and represented. |
![]() ![]() ![]() |
ΣC | 1..1 | uri | System that defines coded unit form Fixed Value: http://unitsofmeasure.org |
![]() ![]() ![]() |
Σ | 1..1 | code | Coded form of the unit Binding: UCUMCodes (required): Defines the unit of measurement using codes from the UCUM units ValueSet. The UCUM code MUST be compliant with the unit that is linked with the LOINC code given as Observation.code. |
![]() ![]() |
1..1 | Reference(Device – Personal Health Device | DeviceMetric – Sensor Type and Calibration Status) | Reference to personal health device or its sensor type and calibration status | |
Documentation for this format | ||||
Detailed description of differential elements
Guidance on how to interpret the contents of this table can be foundhere
| 0. Observation | |
| 2. Observation.status | |
| Definition | The status of the measurements is fixed to 'final'. Only verified and complete measurements with a valid value are represented. |
| Short | Measurement status |
| Fixed Value | final |
| 4. Observation.code | |
| Short | Measurement type of blood glucose |
| Binding | The codes SHALL be taken from ValueSet - Blood Glucose Measurement from LOINC (required to https://gematik.de/fhir/hddt/ValueSet/hddt-miv-blood-glucose-measurement)Specifies the type of measurement using codes from the ValueSet for blood glucose measurements. |
| 6. Observation.effective[x] | |
| Definition | The time or period when the blood glucose measurement was taken. |
| Short | Time of measurement |
| Control | 1..? |
| Type | dateTime, Period, Timing, instant |
| [x] Note | SeeChoice of Data Typesfor further information about how to use [x] |
| Primitive Value | This primitive element may be present, or absent, or replaced by an extension |
| 8. Observation.value[x] | |
| Definition | The quantitative blood glucose value, measured either in mass/volume (mg/dL) or moles/volume (mmol/L), represented as a UCUM Quantity. |
| Short | Measured blood glucose value |
| Type | Quantity, dateTime, boolean, string, SampledData, Period, Ratio, integer, time, Range, CodeableConcept |
| [x] Note | SeeChoice of Data Typesfor further information about how to use [x] |
| Must Support | true |
| 10. Observation.value[x].value | |
| Control | 1..? |
| 12. Observation.value[x].system | |
| Control | 1..? |
| Fixed Value | http://unitsofmeasure.org |
| 14. Observation.value[x].code | |
| Definition | The UCUM code representing the unit of the blood glucose measurement. The UCUM code MUST be compliant with the example unit that is linked with the LOINC code given as |
| Control | 1..? |
| Binding | The codes SHALL be taken from UCUMCodes (required to http://hl7.org/fhir/ValueSet/ucum-units)Defines the unit of measurement using codes from the UCUM units ValueSet. The UCUM code MUST be compliant with the unit that is linked with the LOINC code given as |
| 16. Observation.device | |
| Definition | References a DeviceMetric resource that describes the sensor type and calibration status of the personal health device or reference to the Device resource that describes the personal health device itself. |
| Short | Reference to personal health device or its sensor type and calibration status |
| Control | 1..? |
| Type | Reference(Device – Personal Health Device, DeviceMetric – Sensor Type and Calibration Status) |
For information on general constraints and terminology bindings see the full StructureDefinition for this profile.
Glucometers usually have lower and upper limits for valid measurements. If a measurement is below or above these limits, the glucometer usually indicates this with a special value (e.g. “LO” or “HI”). These values MUST be recorded at the Device Data Recorder, and a query for device data MUST return such values as valid Observations. To indicate that the actual value is below or above the measurable range, the valueQuantity.value element MUST be set to the respective limit value and a valueQuantity.comparator element MUST be added with the value "<" for “LO” and ">" for “HI”.
Example for a blood glucose measurement below the measurable range (30 mg/dl) of the glucometer:
{
"resourceType" : "Observation",
"id" : "example-blood-glucose",
"meta" : {
"profile" : [
🔗 "https://gematik.de/fhir/hddt/StructureDefinition/hddt-blood-glucose-measurement"
]
},
"status" : "final",
"code" : {
"coding" : [
{
"system" : "http://loinc.org",
"code" : "2339-0",
"display" : "Glucose [Mass/volume] in Blood"
}
]
},
"effectiveDateTime" : "2025-10-23T08:30:00Z",
"valueQuantity" : {
"value" : 30,
"comparator" : "<",
"unit" : "mg/dl",
"system" : "http://unitsofmeasure.org",
"code" : "mg/dL"
},
"device" : {
🔗 "reference" : "DeviceMetric/example-glucometer-metric"
}
}
Remark: All examples provided on this page use the German language designations for UCUM-coded unit elements. See German translations of UCUM codes for the full list of German translations. For LOINC codes the original English display text is used.
This specification makes no assumption, on how the manufacturers of the Personal Health Device and the Device Data Recorder handle failed measurements (e.g. too few capillary blood for a measurement). If such attempts are recorded at the Device Data Recorder, a query for device data must not result in an Observation resource with an invalid or misleading value. Instead, the Observation resource must either be omitted or must indicate the absence of a valid value using the dataAbsentReason element. In the second case a value MUST NOT be present.
A receiving DiGA SHOULD validate, that the unit defined in valueQuantity.code matches the UCUM unit of the LOINC code in the code element. If the unit does not match, the DiGA MUST NOT use the value for any calculations or display.
This specification makes no assumption, on how the manufacturers of the Personal Health Device and the Device Data Recorder handle data from uncalibrated devices. If such data is provided by the Device Data Recorder, the device element MUST reference a DeviceMetric resource that indicates the calibration status of the sensor. If the device element does not reference a DeviceMetric resource, the DiGA MUST assume that the provided data originates from a calibrated sensor.
The following object diagram the relationships between the FHIR resources involved in representing blood glucose measurements according to the HDDT Information Model and the HDDT Blood Glucose Measurement profile for two concrete instances of a blood glucose measurement. For readability reasons, some external references are only shown for the first measurement. Elements that are not mandatory oder MS for the MIV Blood Glucose Measurement (see Use of HL7 FHIR) have been omitted.
The following code example shows the concrete JSON representation of the HDDT Blood Glucose Measurement 1 resource shown in the object diagram.
{
"resourceType" : "Observation",
"id" : "example-blood-glucose-measurement-1",
"meta" : {
"profile" : [
🔗 "https://gematik.de/fhir/hddt/StructureDefinition/hddt-blood-glucose-measurement"
]
},
"status" : "final",
"code" : {
"coding" : [
{
"system" : "http://loinc.org",
"code" : "2339-0",
"display" : "Glucose [Mass/volume] in Blood"
}
]
},
"effectiveDateTime" : "2025-09-26T12:00:00+02:00",
"valueQuantity" : {
"value" : 120,
"unit" : "mg/dl",
"system" : "http://unitsofmeasure.org",
"code" : "mg/dL"
},
"device" : {
🔗 "reference" : "DeviceMetric/example-glucometer-metric"
}
}
Manufactures of Device Data Recorders that support the MIV Blood Glucose Measurement MUST implement a read interaction on the /Observation endpoint of the FHIR Resource Server. The implementation MUST conform to the HDDT Generic FHIR API. Observations shared through the read interaction MUST comply with the HDDT Blood Glucose Measurement profile.
Manufactures of Device Data Recorders that support the MIV Blood Glucose Measurement MUST implement a search interaction on the /Observation endpoint of the FHIR Resource Server. The implementation MUST conform to the HDDT Generic FHIR API. Observations shared through the serach interaction MUST comply with the HDDT Blood Glucose Measurement profile.
Request: GET /Observation/example-blood-glucose-measurement-2
Description: With FHIR-read interactions, a client can access a single resource instance by querying its internal ID. Restrictions by the OAuth scopes apply—if the client is not allowed to read this resource, a 404 error will be returned.
Response: Returned object is a single Observation resource.
{
"resourceType" : "Observation",
"id" : "example-blood-glucose-measurement-2",
"meta" : {
"profile" : [
🔗 "https://gematik.de/fhir/hddt/StructureDefinition/hddt-blood-glucose-measurement"
]
},
"status" : "final",
"code" : {
"coding" : [
{
"system" : "http://loinc.org",
"code" : "2339-0",
"display" : "Glucose [Mass/volume] in Blood"
}
]
},
"effectiveDateTime" : "2025-09-26T16:30:00+02:00",
"valueQuantity" : {
"value" : 129,
"unit" : "mg/dl",
"system" : "http://unitsofmeasure.org",
"code" : "mg/dL"
},
"device" : {
🔗 "reference" : "DeviceMetric/example-glucometer-metric"
}
}
Request: GET /Observation?code=2339-0
Description: Obtain all of the Observations where code is the LOINC code for blood sugar measurements (in mass/volume). OAuth scopes apply, and only Observations are returned that the client is allowed to access.
Response: Returned object is a Bundle containing all Observation resource instances matching the search criteria.
{
"resourceType": "Bundle",
"id": "6372cdfc-8d5b-49a2-af6b-65dcc3831192",
"type": "searchset",
"entry": [
{
"fullUrl": "https://himi.example.com/fhir/Observation/example-blood-glucose-measurement-1",
"resource": {
"resourceType": "Observation",
"id": "example-blood-glucose-measurement-1",
"meta": {
"profile": [
"https://gematik.de/fhir/hddt/StructureDefinition/hddt-blood-glucose-measurement"
]
},
"status": "final",
"valueQuantity": {
"system": "http://unitsofmeasure.org",
"value": 120,
"code": "mg/dL",
"unit": "mg/dl"
},
"code": {
"coding": [
{
"code": "2339-0",
"system": "http://loinc.org",
"display": "Glucose [Mass/volume] in Blood"
}
]
},
"effectiveDateTime": "2025-09-26T12:00:00+02:00",
"device": {
"reference": "DeviceMetric/example-glucometer-metric"
}
},
"search": {
"mode": "match"
}
},
{
"fullUrl": "https://himi.example.com/fhir/Observation/example-blood-glucose-measurement-2",
"resource": {
"resourceType": "Observation",
"id": "example-blood-glucose-measurement-2",
"meta": {
"profile": [
"https://gematik.de/fhir/hddt/StructureDefinition/hddt-blood-glucose-measurement"
]
},
"status": "final",
"valueQuantity": {
"system": "http://unitsofmeasure.org",
"value": 129,
"code": "mg/dL",
"unit": "mg/dl"
},
"code": {
"coding": [
{
"code": "2339-0",
"system": "http://loinc.org",
"display": "Glucose [Mass/volume] in Blood"
}
]
},
"effectiveDateTime": "2025-09-26T16:30:00+02:00",
"device": {
"reference": "DeviceMetric/example-glucometer-metric"
}
},
"search": {
"mode": "match"
}
}
]
}
Request: GET /Observation?date=ge2025-09-25&_include=Observation:device
Description: This query asks the server for all Observations since 2025-09-25, and also requests that the server include resource instances referenced by Observation.device.
Response: Returned object is a Bundle containing all Observation resource instances matching the search criteria, and all referenced DeviceMetric resources.
{
"resourceType": "Bundle",
"id": "76cfc68b-ea70-486a-aaa5-4411964ab78d",
"type": "searchset",
"entry": [
{
"fullUrl": "https://himi.example.com/fhir/Observation/example-blood-glucose-measurement-1",
"resource": {
"resourceType": "Observation",
"id": "example-blood-glucose-measurement-1",
"meta": {
"profile": [
"https://gematik.de/fhir/hddt/StructureDefinition/hddt-blood-glucose-measurement"
]
},
"status": "final",
"valueQuantity": {
"system": "http://unitsofmeasure.org",
"value": 120,
"code": "mg/dL",
"unit": "mg/dl"
},
"code": {
"coding": [
{
"code": "2339-0",
"system": "http://loinc.org",
"display": "Glucose [Mass/volume] in Blood"
}
]
},
"effectiveDateTime": "2025-09-26T12:00:00+02:00",
"device": {
"reference": "DeviceMetric/example-glucometer-metric"
}
},
"search": {
"mode": "match"
}
},
{
"fullUrl": "https://himi.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",
"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": "include"
}
}
]
}