Implementation Guide
Health Device Data Transfer
Version 0.1.0 - ballot

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

MIV - Blood Glucose Measurement

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:

Implementation Duties for Manufacturers of Device Data Recorders

Manufacturers of Device Data Recorders that support the MIV Blood Glucose Measurement

  • MUST implement and operate a FHIR Resource Server as defined in this chapter,
  • MUST implement and operate an OAuth2 Authorization Server,
  • MUST register the Device Data Recorder with its FHIR Resource Server and OAuth2 Authorization Server at the BfARM HIIS-VZ (BfArM Device Registry),
  • MUST consider the HDDT requirements on security, privacy and operational service levels.

Further obligations MAY be defined by gematik and BfArM as part of the upcoming processes for conformance validation and registration.

FHIR Resource Server

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:

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).

Profiling of the HDDT Information Model for the MIV Blood Glucose MeasurementDevice Data Recorder ManufacturerRepository for gematik FHIR IGsHIIS-VZ (Device Registry at BfArM)MIV Definitions (ZTS)«FHIR Observation»Interoperable Valuestatus = finalcode : classification of the measured value [1..1]effectiveDateTime : date and time of the measurement [1..1]valueQuantity.value : quantity value of the measurement [1..1]valueQuantity.system = UCUMvalueQuantity.code = mg/dL|mmol/L«FHIR DeviceMetric»Sensor Type and Calibration Statustype : kind of value measured by the sensor [0..1]calibration.state : quality indicator for measurements [1..1]calibration.time : last calibration date [1..1]«FHIR Device»Personal Health Devicetype : machine-readable device type [0..1]deviceName : product name [0..1]manufacturer : name of the manufacturer [0..1]serialNumber : serial number [0..1]expirationDate : end of life date [0..1]property : additional properties [0..*]{xor}«FHIR StructureDefinition»Observation - Blood Glucose Measurementname = "HddtBloodGlucoseMeasurement"type = ObservationbaseDefinition = «FHIR Observation»derivation = constraint«FHIR DeviceDefinition»Personal Health Device Definitiontype : kind of device «SCT or ISO/IEEE 11073 code» [1..1]deviceName : product name [1..1]manufacturer : name of the manufacturer [0..1]property[0] = (Real-Time-Delay, ...)property[1] = (Grace-Period, ...)property[2] = (Historic-Data-Period, ...)«FHIR ValueSet»VS MIV Blood Glucose Measurementurl = " https://gematik.de/fhir/hddt/ValueSet/hddt-miv-blood-glucose-measurement"version = "1.0.0"title = "ValueSet - Blood Glucose Measurement from LOINC"name = "HddtMivBloodGlucoseMeasurement"description = "therapy mgmt and clinical decisions"compose.include = 2339-0|LOINC, 15074-8|LOINC, ...device [1..1]source [1..1]definitionimplementsdefinesincluded with
Figure: Profiling of the HDDT Information Model for the MIV Blood Glucose Measurement


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

Observation Profile HDDT Blood Glucose Measurement

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.

Snapshot View of the Profile

Profile: Observation – Blood Glucose Measurement

This structure is derived from Observation

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Observation C 0..* Observation Measurements and simple assertions
Constraints: obs-6, obs-7
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... status ?!Σ 1..1 code Measurement status
Binding: ObservationStatus (required): Codes providing the status of an observation.
Fixed Value: final
... effective[x] Σ 1..1 dateTime Time of measurement
... value[x] SΣC 0..1 Quantity Measured blood glucose value
.... value Σ 1..1 decimal Numerical value (with implicit precision)
.... comparator ?!Σ 0..1 code < | <= | >= | > - how to understand the value
Binding: QuantityComparator (required): How the Quantity should be understood and represented.
.... system ΣC 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org
.... code Σ 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.
... device 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

doco 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.

ShortMeasurement status
Fixed Valuefinal
4. Observation.code
ShortMeasurement type of blood glucose
BindingThe 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.

ShortTime of measurement
Control1..?
TypedateTime, Period, Timing, instant
[x] NoteSeeChoice of Data Typesfor further information about how to use [x]
Primitive ValueThis 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.

ShortMeasured blood glucose value
TypeQuantity, dateTime, boolean, string, SampledData, Period, Ratio, integer, time, Range, CodeableConcept
[x] NoteSeeChoice of Data Typesfor further information about how to use [x]
Must Supporttrue
10. Observation.value[x].value
Control1..?
12. Observation.value[x].system
Control1..?
Fixed Valuehttp://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 Observation.code.

Control1..?
BindingThe 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 Observation.code.

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.

ShortReference to personal health device or its sensor type and calibration status
Control1..?
TypeReference(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.

Conventions and Best Practice

Lo and Hi Values

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.

Quality of Data and Missing Values

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.

Examples

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.

HDDT Object Model Example (Blood Glucose Measurement)FHIR SearchSet in Response to a DiGA's Request for Device DataRepository for gematik FHIR IGsZTS (German Central Terminology Server)HIIS-VZ (Device Registry at BfArM)«Observation Blood Glucose»Blood Glucose Measurement 2status = finalcode = 2339-0|LOINC "Blood Glucose"date = 20250926:1630+0200value = 129 mg/dL«Observation Blood Glucose»Blood Glucose Measurement 1status = finalcode = 2339-0|LOINC "Blood Glucose"date = 20250926:1200+0200value = 120 mg/dL«FHIR DeviceMetric»Glucose Sensor Type and Calibration Statustype = 29112|iso:11073:10101unit = mg/dL|UCUMcalibration.state = calibrated«FHIR Device»Glucose Meterstatus = activetype = 528401|iso:11073:10101deviceName = "GlukkoCheck plus mg/dl"manufacturer = "Glukko Inc."serialNumber = "SN123456«FHIR StructureDefinition»Observation - Blood Glucose Measurementname = "HddtBloodGlucoseMeasurement"type = ObservationbaseDefinition = «FHIR Observation»derivation = constraint«FHIR ValueSet»VS MIV Blood Glucose Measurementurl = " https://gematik.de/fhir/hddt/ValueSet/hddt-miv-blood-glucose-measurement"version = "1.0.0"title = "ValueSet - Blood Glucose Measurement from LOINC"name = "HddtMivBloodGlucoseMeasurement"description = "therapy mgmt and clinical decisions"compose.include = 2339-0|LOINC, 15074-8|LOINC, ...«FHIR DeviceDefinition»Personal Health Device Definitiontype = 528401|iso:11073:10101deviceName = "GlukkoCheck plus mg/dl"manufacturer = "Glukko Inc."property[0] = (Real-Time-Delay, 15 minutes)property[1] = (Grace-Period, 15 minutes)property[2] = (Historic-Data-Period, 90 days)property[3] = (Store-Capacity-Count, 200 items)devicedevicesourcedefinitionimplementsdefinesincluded with
Figure: HDDT Object Model Example (Blood Glucose Measurement)


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"
  }
}

MIV-specific Endpoints and Interactions

Observation - READ

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.

Example: FHIR-READ

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"
  }
}

Example: FHIR-Search for specific LOINC code

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"
            }
        }
    ]
}

Example: FHIR-Search include DeviceMetric

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"
            }
        }
    ]
}