Implementation Guide
Health Device Data Transfer
Version 0.1.0 - ballot

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

MIV - Continuous 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) Continuous 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 continuous glucose measurements to DiGA, including:

Implementation Duties for Manufacturers of Device Data Recorders

Manufacturers of Device Data Recorders that support the MIV Continuous 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 continuoulsy measured data and related information about metrics and devices. A Device Data Recorder’s FHIR Resource Server that serves the MIV Continuous Glucose Measurement MUST implement the following endpoints and profiles:

The figure below shows the adaption of the HDDT Information Model for the MIV Continuous Glucose Measurement. Elements denoted as [1..1] are mandatory or MS for the MIV Continuous Glucose Measurement (see Use of HL7 FHIR).

Profiling of the HDDT Information Model for the MIV Continuous Glucose MeasurementDevice Data Recorder ManufacturerRepository for gematik FHIR IGsHIIS-VZ (Device Registry at BfARM)MIV Definitions (ZTS)«FHIR Observation»Interoperable Valuestatus = final | preliminarycode : classification of the measured value [1..1]effectivePeriod : period of the measurement [1..1]valueSampledData.origin.system = UCUMvalueSampledData.origin.code = mg/dL|mmol/LvalueSampledData.period : time between samples in ms [1..1]valueSampledData.dimensions = 1valueSampledData.data : series of measurements [1..1]CGM Summary Report«FHIR Bundle»code = 107931-8|LOINC "Continuous glucose monitoring summary panel"date : period covered by the report«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 communication date [0..1]property : additional properties [0..*]{xor}«FHIR StructureDefinition»Bundle - Summary Data Measurementsname = "HddtCgmSummary"type = BundlebaseDefinition = «FHIR Bundle»derivation = constraint«FHIR StructureDefinition»Observation - Continuous Glucose Measurementname = "HddtContinuousGlucoseMeasurement"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, ...)property[3] = (Chunk-Time-Span, ..., ...)«FHIR ValueSet»VS MIV Continuous Glucose Measurementurl = " https://gematik.de/fhir/hddt/ValueSet/hddt-miv-blood-glucose-measurement"version = "1.0.0"title = "ValueSet - Continuous Glucose Measurement from LOINC"name = "HddtMivContinuousGlucoseMeasurement"description = "key metrics and continuous monitoring"compose.include = 99504-3|LOINC, 105272-9|LOINCbased ondevice [1..1]source [1..1]definitionimplementsdefinesincluded withdefines
Figure: Profiling of the HDDT Information Model for the MIV Continuous 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 Continuous Glucose Measurement only the following scopes MUST be set:

patient/Observation.rs?code:in=https://gematik.de/fhir/hddt/ValueSet/hddt-miv-continuous-glucose-measurement
patient/Device.rs
patient/DeviceMetric.rs

Observation Profile HDDT Continuous Glucose Measurement

This section discusses the HDDT Continuous Glucose Measurement profile, which constrains the FHIR Observation resource for representing continuous glucose measurements. For the full normative specifiction of this profile see the respective StructureDefinition.

Snapshot View of the Profile

Profile: Observation – Continuous Glucose Measurement

This structure is derived from Observation

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Observation C 0..* Observation Chunk of continuous glucose measurements
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 Status of the continuous glucose measurements chunk
Binding: ObservationStatus (required): Codes providing the status of an observation.
... effective[x] Σ 1..1 Period Time interval of CGM measurements chunk
.... start ΣC 1..1 dateTime Starting time with inclusive boundary
.... end ΣC 1..1 dateTime End time with inclusive boundary, if not ongoing
... value[x] SΣC 0..1 SampledData Series of glucose measurements
.... origin Σ 1..1 SimpleQuantity(4.0.1) Zero value and units
..... unit Σ 0..1 string Unit of continuous glucose measurement
..... system ΣC 1..1 uri System that defines coded unit form
Fixed Value: http://unitsofmeasure.org
..... code Σ 1..1 code UCUM code for unit of measurements
Binding: UCUMCodes (required): Defines the measurement unit for continuous glucose values using UCUM codes.
.... period Σ 1..1 decimal Number of milliseconds between samples
.... dimensions Σ 1..1 positiveInt Number of sample points at each time point
.... data 1..1 string Decimal values with spaces, or "E" | "U" | "L"
... dataAbsentReason C 0..1 CodeableConcept Why the result is missing
Binding: DataAbsentReason (extensible): Codes specifying why the result (Observation.value[x]) is missing.
... 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
Definition

An Observation representing a continuous glucose measurement (CGM) series over a defined effective period, captured as SampledData from a personal health device.

ShortChunk of continuous glucose measurements
2. Observation.status
Definition

The status of the continuous glucose measurements chunk. The status 'final' means the measurement is complete and verified; 'preliminary' means the data MAY be still being collected and not complete. It SHOULD be called at a later time for collecting complete data.

ShortStatus of the continuous glucose measurements chunk
4. Observation.code
ShortType of continuous glucose measurement
BindingThe codes SHALL be taken from ValueSet – Continuous Glucose Measurement from LOINC
(required to https://gematik.de/fhir/hddt/ValueSet/hddt-miv-continuous-glucose-measurement)

Specifies the type of continuous glucose measurement using codes from the ValueSet for CGM measurements.

6. Observation.effective[x]
Definition

The time span covered by this chunk of continuous glucose measurements. The chunk-time-span is defined by the data recorder of the personal health device.

ShortTime interval of CGM measurements chunk
Control1..?
TypePeriod, dateTime, Timing, instant
[x] NoteSeeChoice of Data Typesfor further information about how to use [x]
8. Observation.effective[x].start
Control1..?
10. Observation.effective[x].end
Control1..?
12. Observation.value[x]
ShortSeries of glucose measurements
TypeSampledData, dateTime, boolean, string, Quantity, Period, Ratio, integer, time, Range, CodeableConcept
[x] NoteSeeChoice of Data Typesfor further information about how to use [x]
Must Supporttrue
14. Observation.value[x].origin
16. Observation.value[x].origin.unit
Definition

The unit of measurement used for all data in valueSampledData.data.

ShortUnit of continuous glucose measurement
18. Observation.value[x].origin.system
Control1..?
Fixed Valuehttp://unitsofmeasure.org
20. Observation.value[x].origin.code
Definition

The UCUM code representing the unit of the continuous glucose measurement. The UCUM code MUST be compliant with the example unit that is linked with the LOINC code given as Observation.code.

ShortUCUM code for unit of measurements
Control1..?
BindingThe codes SHALL be taken from UCUMCodes
(required to http://hl7.org/fhir/ValueSet/ucum-units)

Defines the measurement unit for continuous glucose values using UCUM codes.

22. Observation.value[x].data
Control1..?
24. Observation.dataAbsentReason
Definition

Indicates why the measurement data is missing. A value of 'temp-unknown' MUST only be used if no data is available at all for the requested period but may be available later (e.g. because the Device Data Recorder could temporarely not connect with the Personal Health Device).

Comments

If some data is available for the requested period with more data expected to come, an incomplete chunk MUST be provided with with the avialable vaues and Observation.status MUST set to incomplete. See section "Retrieving Data" in the HDDT specification for more details on how to deal with incomplete or missing data.

26. Observation.device
Definition

Reference to the 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

Real-Time Continuous Glucose Monitoring devices (rtCGM) usually have lower and upper limits for valid measurements. If a measurement is below or above these limits, the rtCGM 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, a respective indicater (“L” for value below the lower limit and “U” for values above the upper limit) MUST be placed in the data list in valueSampledData.data. If valueSampledData.data contains “L” or “U” values, the Device Data Recorder SHOULD fill the valueSampledData.lowerLimit and valueSampledData.upperLimit element with the values of the lower and upper limits for valid measurements.

Example for a blood glucose measurement below the measurable range (35 mg/dl) of the rtCGM:

{
  "resourceType" : "Observation",
  "id" : "example-cgm-series",
  "meta" : {
    "profile" : [
      🔗 "https://gematik.de/fhir/hddt/StructureDefinition/hddt-continuous-glucose-measurement"
    ]
  },
  "status" : "final",
  "code" : {
    "coding" : [
      {
        "system" : "http://loinc.org",
        "code" : "99504-3",
        "display" : "Glucose [Mass/volume] in Interstitial fluid"
      }
    ]
  },
  "effectivePeriod" : {
    "start" : "2025-10-28T08:00:00Z",
    "end" : "2025-10-28T09:00:00Z"
  },
  "valueSampledData" : {
    "origin" : {
      "value" : 0,
      "unit" : "mg/dl",
      "system" : "http://unitsofmeasure.org",
      "code" : "mg/dL"
    },
    "period" : 60000,
    "lowerLimit" : 35,
    "upperLimit" : 360,
    "dimensions" : 1,
    "data" : "110 111 112 113 114 115 116 117 118 119 120 90 77 66 56 39 36 L L L 40 51 66 81 91 99 101 120 122 121 120 119 118 117 116 115 114 113 112 111 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129"
  },
  "note" : [
    {
      "text" : "Example CGM data series with 1-minute intervals over 1 hour (60 samples)."
    }
  ],
  "method" : {
    "coding" : [
      {
        "system" : "http://snomed.info/sct",
        "code" : "463729000",
        "display" : "Point-of-care blood glucose continuous monitoring system (physical object)"
      }
    ]
  },
  "device" : {
    🔗 "reference" : "DeviceMetric/example-devicemetric-cgm"
  }
}

_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

The manufacturers of the Device Data Recorder MUST handle missing measurements which occured due to interrupted communication to/from the sensor.

If temporarely no data is available for the full period that is requested by the DiGA, a valueSampledData MUST NOT be provided. Instead, the dataAbsentReason element MUST be provided with the code temp-unknown. The status MUST be set to be preliminary in this case.

If temporarely no data is available for the full period covered by a chunk, a valueSampledData MUST NOT be provided for this chunk. Instead, the dataAbsentReason element MUST be provided with the code temp-unknown for this chunk. The status of this chunk MUST be set to be preliminary in this case. Other chunks are filled as usual with a status set to final.

If temporarely missing data affects only the last chunk in a response, the available data MUST be provided in valueSampledData.data and the effectivePeriod MUST cover the full period of the chunk. The status MUST be set to be preliminary. This signals to the DiGA that the data is incomplete. The dataAbsentReason element MUST NOT be used in this case.

The following example shows a chunk of data where onlythe first 20 minutes of the chunk period are filled with data. The remaining 40 minutes of the chunk period are missing.

{
  "resourceType" : "Observation",
  "id" : "example-cgm-series-incomplete",
  "meta" : {
    "profile" : [
      🔗 "https://gematik.de/fhir/hddt/StructureDefinition/hddt-continuous-glucose-measurement"
    ]
  },
  "status" : "preliminary",
  "code" : {
    "coding" : [
      {
        "system" : "http://loinc.org",
        "code" : "99504-3",
        "display" : "Glucose [Mass/volume] in Interstitial fluid"
      }
    ]
  },
  "effectivePeriod" : {
    "start" : "2025-08-28T08:00:00Z",
    "end" : "2025-08-28T09:00:00Z"
  },
  "valueSampledData" : {
    "origin" : {
      "value" : 0,
      "unit" : "mg/dl",
      "system" : "http://unitsofmeasure.org",
      "code" : "mg/dL"
    },
    "period" : 60000,
    "dimensions" : 1,
    "data" : "110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129"
  },
  "note" : [
    {
      "text" : "Example CGM data series with 1-minute intervals over 20 minutes (20 samples), but status incomplete."
    }
  ],
  "method" : {
    "coding" : [
      {
        "system" : "http://snomed.info/sct",
        "code" : "463729000",
        "display" : "Point-of-care blood glucose continuous monitoring system (physical object)"
      }
    ]
  },
  "device" : {
    🔗 "reference" : "DeviceMetric/example-devicemetric-cgm"
  }
}

A DiGA that receives such a chunk MAY use the logical id with consecutive read interactions to just obtain the temporarely missig data.

A receiving DiGA SHOULD validate, that the unit defined in valueSampledData.origin.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.

The following additional example illustrates a case where no data is available for the requested period. In this case, valueSampledData is omitted and the Observation explicitly indicates the reason for missing data using dataAbsentReason = temp-unknown and sets status = preliminary.

{
  "resourceType" : "Observation",
  "id" : "example-cgm-series-data-unavailable",
  "meta" : {
    "profile" : [
      🔗 "https://gematik.de/fhir/hddt/StructureDefinition/hddt-continuous-glucose-measurement"
    ]
  },
  "status" : "preliminary",
  "code" : {
    "coding" : [
      {
        "system" : "http://loinc.org",
        "code" : "99504-3",
        "display" : "Glucose [Mass/volume] in Interstitial fluid"
      }
    ]
  },
  "effectivePeriod" : {
    "start" : "2025-09-01T08:00:00+02:00",
    "end" : "2025-09-01T10:00:00+02:00"
  },
  "dataAbsentReason" : {
    "coding" : [
      {
        "system" : "http://terminology.hl7.org/CodeSystem/data-absent-reason",
        "code" : "temp-unknown",
        "display" : "Temporarily Unknown"
      }
    ]
  },
  "note" : [
    {
      "text" : "Sensor warm-up phase, values not yet validated."
    }
  ],
  "device" : {
    🔗 "reference" : "DeviceMetric/example-devicemetric-cgm"
  }
}

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 shows the relationships between the FHIR resources involved in representing continuous glucose measurements according to the HDDT Information Model and the HDDT Continuous Glucose Measurement profile for two chunks of a continuous glucose measurement. The fixed chunk size is 1 hour, and the measurement interval is 5 minutes. Thus, each chunk contains 12 measurements. The later chunk is incomplete because measurements for the last 40 minutes are pending. Elements that are not mandatory oder MS for the MIV Contiuous Glucose Measurement (see Use of HL7 FHIR) have been omitted.

HDDT Object Model Example (Continuous Glucose Measurement)FHIR SearchSet in Response to a DiGA's Request for Device Data«Observation Continuous Glucose Measurement»HDDT Continuous Glucose Measurement 1status = finalcode = 99504-3|LOINC "Glucose [Mass/volume] in Interstitial fluid"effectivePerid = 2025-09-26T16:00:00Z - 2025-09-26T16:59:59ZvalueSampledData.origin.system = UCUMvalueSampledData.origin.code = mg/dLvalueSampledData.period : 300000 msvalueSampledData.dimensions = 1valueSampledData.data = 123 122 126 134 129 128 130 131 129 127 127 133«Observation Continuous Glucose Measurement»HDDT Continuous Glucose Measurement 2status = preliminarycode = 99504-3|LOINC "Glucose [Mass/volume] in Interstitial fluid"effectivePerid = 2025-09-26T17:00:00Z - 2025-09-26T17:59:59ZvalueSampledData.origin.system = UCUMvalueSampledData.origin.code = mg/dLvalueSampledData.period : 300000 msvalueSampledData.dimensions = 1valueSampledData.data = 135 118 126 122CGM Summary Report«FHIR Bundle»code = 107931-8|LOINC "Continuous glucose monitoring summary panel"date : period covered by the report«FHIR DeviceMetric»Glucose Sensor Type and Calibration Statustype = 29140|iso:11073:10101unit = mg/dL|UCUMcalibration.state = calibrated«FHIR Device»rtCGMstatus = activetype = 528409|iso:11073:10101deviceName = "GlukkoCGM 18"manufacturer = "Glukko Inc."serialNumber = "CGM1234567890devicedeviceentry:Observation.devicesource
Figure: HDDT Object Model Example (Continuous Glucose Measurement)


The following code example shows the concrete JSON representation of the HDDT Continuous Glucose Measurement 1 resource shown in the object diagram.

{
  "resourceType" : "Observation",
  "id" : "example-cgm-series-1",
  "meta" : {
    "profile" : [
      🔗 "https://gematik.de/fhir/hddt/StructureDefinition/hddt-continuous-glucose-measurement"
    ]
  },
  "status" : "final",
  "code" : {
    "coding" : [
      {
        "system" : "http://loinc.org",
        "code" : "99504-3",
        "display" : "Glucose [Mass/volume] in Interstitial fluid"
      }
    ]
  },
  "effectivePeriod" : {
    "start" : "2025-09-26T16:00:00Z",
    "end" : "2025-09-26T16:59:59Z"
  },
  "valueSampledData" : {
    "origin" : {
      "value" : 0,
      "unit" : "mg/dl",
      "system" : "http://unitsofmeasure.org",
      "code" : "mg/dL"
    },
    "period" : 300000,
    "dimensions" : 1,
    "data" : "123 122 126 134 129 128 130 131 129 127 127 133"
  },
  "note" : [
    {
      "text" : "Example CGM data series with 5-minute intervals over 1 hour (12 samples)."
    }
  ],
  "method" : {
    "coding" : [
      {
        "system" : "http://snomed.info/sct",
        "code" : "463729000",
        "display" : "Point-of-care blood glucose continuous monitoring system (physical object)"
      }
    ]
  },
  "device" : {
    🔗 "reference" : "DeviceMetric/example-devicemetric-cgm"
  }
}

MIV-specific Endpoints and Interactions

Observation - READ

Manufactures of Device Data Recorders that support the MIV Continuous 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. Observation resources shared through the read interaction MUST comply with the HDDT Continuous Glucose Measurement profile.

Manufactures of Device Data Recorders that support the MIV Continuous 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. Observation resources shared through the serach interaction MUST comply with the HDDT Continuous Glucose Measurement profile.

Examples - FHIR Search GET

Request: GET /Observation?date=ge2025-09-26

Description: Request all CGM measurements, since the 26st of September. Return a Bundle. This one contains only a single Observation.

Response:

{
    "resourceType": "Bundle",
    "type": "searchset",
    "entry": [
        {
            "fullUrl": "https://himi.example.com/fhir/Observation/example-cgm-series-1",
            {
                "resourceType": "Observation",
                "id": "example-cgm-series-1",
                "meta": {
                    "profile": [
                        "https://gematik.de/fhir/hddt/StructureDefinition/hddt-continuous-glucose-measurement"
                    ]
                },
                "valueSampledData": {
                    "origin": {
                        "system": "http://unitsofmeasure.org",
                        "value": 0,
                        "unit": "mg/dl",
                        "code": "mg/dL"
                    },
                    "period": 300000,
                    "dimensions": 1,
                    "data": "123 122 126 134 129 128 130 131 129 127 127 133"
                },
                "status": "final",
                "code": {
                    "coding": [
                        {
                            "code": "99504-3",
                            "system": "http://loinc.org",
                            "display": "Glucose [Mass/volume] in Interstitial fluid"
                        }
                    ]
                },
                "effectivePeriod": {
                    "start": "2025-09-26T16:00:00Z",
                    "end": "2025-09-26T16:59:59Z"
                },
                "device": {
                    "reference": "DeviceMetric/example-devicemetric-cgm"
                },
                "method": {
                    "coding": [
                        {
                            "code": "463729000",
                            "system": "http://snomed.info/sct",
                            "display": "Point-of-care blood glucose continuous monitoring system (physical object)"
                        }
                    ]
                },
                "note": [
                    {
                        "text": "Example CGM data series with 5-minute intervals over 1 hour (12 samples)."
                    }
                ]
            }
        ]
    }

Examples - FHIR Search POST

Request: POST /Observation/_search

Headers:

  • Content-Type: application/json
  • Accept: application/json

Body:

{
  "code": "99504-3"
}

Description: Use a POST requests, with the search parameters in the request body, to query all Observation resources that measure interstitial fluid glucose in mg/dL. Response is a Bundle.

Response:

{
    "resourceType": "Bundle",
    "type": "searchset",
    "entry": [
        {
            "fullUrl": "https://himi.example.com/fhir/Observation/example-cgm-series-1",
            "resource": {
                "resourceType": "Observation",
                "id": "example-cgm-series-1",
                "meta": {
                    "profile": [
                        "https://gematik.de/fhir/hddt/StructureDefinition/hddt-continuous-glucose-measurement"
                    ]
                },
                "valueSampledData": {
                    "origin": {
                        "system": "http://unitsofmeasure.org",
                        "value": 0,
                        "unit": "mg/dl",
                        "code": "mg/dL"
                    },
                    "period": 300000,
                    "dimensions": 1,
                    "data": "123 122 126 134 129 128 130 131 129 127 127 133"
                },
                "status": "final",
                "code": {
                    "coding": [
                        {
                            "code": "99504-3",
                            "system": "http://loinc.org",
                            "display": "Glucose [Mass/volume] in Interstitial fluid"
                        }
                    ]
                },
                "effectivePeriod": {
                    "start": "2025-09-26T16:00:00Z",
                    "end": "2025-09-26T16:59:59Z"
                },
                "device": {
                    "reference": "DeviceMetric/example-devicemetric-cgm"
                },
                "method": {
                    "coding": [
                        {
                            "code": "463729000",
                            "system": "http://snomed.info/sct",
                            "display": "Point-of-care blood glucose continuous monitoring system (physical object)"
                        }
                    ]
                },
                "note": [
                    {
                        "text": "Example CGM data series with 5-minute intervals over 1 hour (12 samples)."
                    }
                ]
            },
            "search": {
                "mode": "match"
            }
        },
        {
            "fullUrl": "https://himi.example.com/fhir/Observation/example-cgm-series",
            "resource": {
                "resourceType": "Observation",
                "id": "example-cgm-series",
                "meta": {
                    "profile": [
                        "https://gematik.de/fhir/hddt/StructureDefinition/hddt-continuous-glucose-measurement"
                    ]
                },
                "valueSampledData": {
                    "origin": {
                        "system": "http://unitsofmeasure.org",
                        "value": 0,
                        "unit": "mg/dl",
                        "code": "mg/dL"
                    },
                    "period": 300000,
                    "dimensions": 1,
                    "data": "110 111 112 113 114 115 116 117 118 119 120 90"
                },
                "status": "final",
                "code": {
                    "coding": [
                        {
                            "code": "99504-3",
                            "system": "http://loinc.org",
                            "display": "Glucose [Mass/volume] in Interstitial fluid"
                        }
                    ]
                },
                "effectivePeriod": {
                    "start": "2025-09-26T17:00:00Z",
                    "end": "2025-09-26T17:59:59Z"
                },
                "device": {
                    "reference": "DeviceMetric/example-devicemetric-cgm"
                },
                "method": {
                    "coding": [
                        {
                            "code": "463729000",
                            "system": "http://snomed.info/sct",
                            "display": "Point-of-care blood glucose continuous monitoring system (physical object)"
                        }
                    ]
                },
                "note": [
                    {
                        "text": "Example CGM data series with 5-minute intervals over 1 hour (12 samples)."
                    }
                ]
            },
            "search": {
                "mode": "match"
            }
        }
    ]
}

FHIR Operation : HDDT CGM Summary

This operation and the related profiles define the exchange of aggregated measurement data for the Mandatory Interoperable Value (MIV) "Continuous Glucose Measurement". The operation provides a patient’s glucose profile for a defined period.

Profile

The HDDT CGM Summary profile constrains the FHIR Bundle resource for a glucose profile that is calculated from continuous glucose measurement data (e.g. from a CGM sensor). The profile covers the machine-readable parts of the HL7 CGM summary profile.

The Bundle is of type collection and MUST contain only resources of the following types:

The purpose of this Bundle profile is to provide a consistent structure for server responses when clients query for CGM data with aggregation logic. It ensures interoperability across different implementations by defining a predictable response format. This supports use cases such as:

  • Retrieval of CGM summary metrics over a given time interval in support for the upcoming digital disease management program (dDMP) on Diabetes, e.g. for
    • continuous therapy monitoring and adjustment
    • forwarding key data to treating physicians, e.g. for clinical decision support
    • supporting asynchonous telemonitoring by ad hoc provisioning of condensed status information
  • Combining aggregated measurement data and device metadata for downstream applications such as visualization or compliance monitoring

Profile: Bundle – HDDT CGM Summary Report

This structure is derived from Bundle

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Bundle 0..* Bundle Contains a collection of resources
... type 1..1 code The bundle is always a collection of CGM summary Observations and optionally related Device and DeviceMetric resources returned by the $hddt-cgm-summary operation.
Fixed Value: collection
... entry 1..* BackboneElement Entry in the bundle - will have a resource or information
.... resource 0..1 Observations with their related Device and DeviceMetric information
..... resource Observation(CGMSummaryObservation | CGMSummaryMeanGlucoseMassPerVolume | CGMSummaryMeanGlucoseMolesPerVolume | CGMSummaryTimesInRanges | CGMSummaryGMI | CGMSummaryCoefficientOfVariation | CGMSummaryDaysOfWear | CGMSummarySensorActivePercentage)
..... resource Device(HddtPersonalHealthDevice)

doco Documentation for this format

The Observation profile for the CGM summary report is defined by HL7: StructureDefinition-cgm-summary

Operation $hddt-cgm-summary

   
Resource Observation
Operation name $hddt-cgm-summary
Purpose Request a CGM Summary Report containing CGM key values for a defined range of time.
Parameters See below
Result A Bundle containing one Observation resource conforming to the HDDT CGM Summary profile. If the related parameter is set to true, the Bundle also contains all Device resources for the sensors that contributed to the report.
Specifications The CGM summary report is calculated at request-time. From the Device Data Recorder’s perspective, the report is a snapshot solely assembled for a volatile request. Therefore the Device Data Recorder MAY not persist the report. The Device Data Recorder MAY assign a logical id to the report that is not addressable or MAY even omit the logical id (see last paragraph in https://hl7.org/fhir/R4/resource.html#id). As a consequence a read interaction for a given id MAY result in an 404 Not Found error.
The Device Data Recorder MUST support all Observation profiles listed in the hddt-cgm-summary bundle. If the Device Data Recorder does not support some of these observations it MUST for these observations provide Observation Resources with no value[x] and dataAbsentReason set to unknown.
Request Parameters

All parameters are provided in the request body as JSON, following the FHIR Parameters resource pattern.

Parameter Type Required Description
effectivePeriodStart dateTime Optional Start of the effective time period that is to be covered by the requested report.
effectivePeriodEnd dateTime Optional End of the effective time period that is to be covered by the requested report
related boolean optional When set to true, the result bundle includes Device resources for the sensors from which the data was measured.

A Device Data Recorder MUST support all listed parameters.

If no start for the effective period is specified, the Device Data Recorder selects a time range starting from the current date, which MUST cover at least 7 days into the past. If there is no data available for the full period, the Device Data Recorder MAY return an error.

If no end for the effective period is specified, the end date is assumed to be the current date. If the period is shorter than 7 days, the Device Data Recorder MAY return an error.

If neither a start time nor an end time is given, the Device Data Recorder selects a time range starting from the current date, which MUST cover at least 7 days into the past. If there is no data available for the full period, the Device Data Recorder MAY return an error.

The Summary-Operation MUST support a minimal duration of 7 days for the effective period, and an error MAY be returned if the client requests a shorter time period.

Examples

Request: POST /Observation$hddt-cgm-summary

Request Body:

{
  "resourceType": "Parameters",
  "parameter": [
    {
      "name": "effectivePeriodStart",
      "valueDateTime": "2025-08-01T00:00:00Z"
    },
    {
      "name": "effectivePeriodEnd",
      "valueDateTime": "2025-08-31T23:59:59Z"
    },
    {
      "name": "related",
      "valueBoolean": true
    }
  ]
}

Description:

Perform the FHIR Operation to request a summary of aggregated values over the specified time range. The Bundle should also include all Device resource instances, that were needed to calculate the data summary.

Response:

{
  "resourceType" : "Bundle",
  "id" : "example-cgm-summary-bundle",
  "meta" : {
    "profile" : [
      🔗 "https://gematik.de/fhir/hddt/StructureDefinition/hddt-cgm-summary"
    ]
  },
  "type" : "collection",
  "timestamp" : "2025-10-01T09:15:00Z",
  "entry" : [
    {
      "fullUrl" : "https://gematik.de/fhir/hddt/Observation/cgmSummaryExample",
      "resource" : {
        "resourceType" : "Observation",
        "id" : "cgmSummaryExample",
        "meta" : {
          "profile" : [
            🔗 "http://hl7.org/fhir/uv/cgm/StructureDefinition/cgm-summary"
          ]
        },
        "status" : "final",
        "category" : [
          {
            "coding" : [
              {
                "system" : "http://terminology.hl7.org/CodeSystem/observation-category",
                "code" : "laboratory"
              }
            ]
          }
        ],
        "code" : {
          "coding" : [
            {
              "system" : "http://loinc.org",
              "code" : "107931-8"
            }
          ]
        },
        "subject" : {
          🔗 "reference" : "Patient/patientExample"
        },
        "effectivePeriod" : {
          "start" : "2025-09-01",
          "end" : "2025-09-30"
        },
        "hasMember" : [
          {
            🔗 "reference" : "Observation/cgmSummaryMeanGlucoseMassPerVolumeExample"
          },
          {
            🔗 "reference" : "Observation/cgmSummaryTimesInRangesExample"
          },
          {
            🔗 "reference" : "Observation/cgmSummaryGMIExample"
          },
          {
            🔗 "reference" : "Observation/cgmSummaryCoefficientOfVariationExample"
          },
          {
            🔗 "reference" : "Observation/cgmSummaryDaysOfWearExample"
          },
          {
            🔗 "reference" : "Observation/cgmSummarySensorActivePercentageExample"
          }
        ]
      }
    },
    {
      "fullUrl" : "https://gematik.de/fhir/hddt/Observation/cgmSummaryMeanGlucoseMassPerVolumeExample",
      "resource" : {
        "resourceType" : "Observation",
        "id" : "cgmSummaryMeanGlucoseMassPerVolumeExample",
        "meta" : {
          "profile" : [
            🔗 "http://hl7.org/fhir/uv/cgm/StructureDefinition/cgm-summary-mean-glucose-mass-per-volume"
          ]
        },
        "status" : "final",
        "category" : [
          {
            "coding" : [
              {
                "system" : "http://terminology.hl7.org/CodeSystem/observation-category",
                "code" : "laboratory"
              }
            ]
          }
        ],
        "code" : {
          "coding" : [
            {
              "system" : "http://loinc.org",
              "code" : "97507-8"
            }
          ]
        },
        "subject" : {
          🔗 "reference" : "Patient/patientExample"
        },
        "effectivePeriod" : {
          "start" : "2025-09-01",
          "end" : "2025-09-30"
        },
        "valueQuantity" : {
          "value" : 145,
          "unit" : "mg/dl",
          "system" : "http://unitsofmeasure.org",
          "code" : "mg/dL"
        }
      }
    },
    {
      "fullUrl" : "https://gematik.de/fhir/hddt/Observation/cgmSummaryMeanGlucoseMolesPerVolumeExample",
      "resource" : {
        "resourceType" : "Observation",
        "id" : "cgmSummaryMeanGlucoseMolesPerVolumeExample",
        "meta" : {
          "profile" : [
            🔗 "http://hl7.org/fhir/uv/cgm/StructureDefinition/cgm-summary-mean-glucose-moles-per-volume"
          ]
        },
        "status" : "final",
        "category" : [
          {
            "coding" : [
              {
                "system" : "http://terminology.hl7.org/CodeSystem/observation-category",
                "code" : "laboratory"
              }
            ]
          }
        ],
        "code" : {
          "coding" : [
            {
              "system" : "http://loinc.org",
              "code" : "105273-7"
            }
          ]
        },
        "subject" : {
          🔗 "reference" : "Patient/patientExample"
        },
        "effectivePeriod" : {
          "start" : "2025-09-01",
          "end" : "2025-09-30"
        },
        "valueQuantity" : {
          "value" : 8.1,
          "unit" : "mmol/l",
          "system" : "http://unitsofmeasure.org",
          "code" : "mmol/L"
        }
      }
    },
    {
      "fullUrl" : "https://gematik.de/fhir/hddt/Observation/cgmSummaryTimesInRangesExample",
      "resource" : {
        "resourceType" : "Observation",
        "id" : "cgmSummaryTimesInRangesExample",
        "meta" : {
          "profile" : [
            🔗 "http://hl7.org/fhir/uv/cgm/StructureDefinition/cgm-summary-times-in-ranges"
          ]
        },
        "status" : "final",
        "category" : [
          {
            "coding" : [
              {
                "system" : "http://terminology.hl7.org/CodeSystem/observation-category",
                "code" : "laboratory"
              }
            ]
          }
        ],
        "code" : {
          "coding" : [
            {
              "system" : "http://loinc.org",
              "code" : "106793-3"
            }
          ]
        },
        "subject" : {
          🔗 "reference" : "Patient/patientExample"
        },
        "effectivePeriod" : {
          "start" : "2025-09-01",
          "end" : "2025-09-30"
        },
        "component" : [
          {
            "code" : {
              "coding" : [
                {
                  "system" : "http://loinc.org",
                  "code" : "104642-4"
                }
              ]
            },
            "valueQuantity" : {
              "value" : 3,
              "unit" : "%",
              "system" : "http://unitsofmeasure.org",
              "code" : "%"
            }
          },
          {
            "code" : {
              "coding" : [
                {
                  "system" : "http://loinc.org",
                  "code" : "104641-6"
                }
              ]
            },
            "valueQuantity" : {
              "value" : 8,
              "unit" : "%",
              "system" : "http://unitsofmeasure.org",
              "code" : "%"
            }
          },
          {
            "code" : {
              "coding" : [
                {
                  "system" : "http://loinc.org",
                  "code" : "97510-2"
                }
              ]
            },
            "valueQuantity" : {
              "value" : 65,
              "unit" : "%",
              "system" : "http://unitsofmeasure.org",
              "code" : "%"
            }
          },
          {
            "code" : {
              "coding" : [
                {
                  "system" : "http://loinc.org",
                  "code" : "104640-8"
                }
              ]
            },
            "valueQuantity" : {
              "value" : 20,
              "unit" : "%",
              "system" : "http://unitsofmeasure.org",
              "code" : "%"
            }
          },
          {
            "code" : {
              "coding" : [
                {
                  "system" : "http://loinc.org",
                  "code" : "104639-0"
                }
              ]
            },
            "valueQuantity" : {
              "value" : 4,
              "unit" : "%",
              "system" : "http://unitsofmeasure.org",
              "code" : "%"
            }
          }
        ]
      }
    },
    {
      "fullUrl" : "https://gematik.de/fhir/hddt/Observation/cgmSummaryGMIExample",
      "resource" : {
        "resourceType" : "Observation",
        "id" : "cgmSummaryGMIExample",
        "meta" : {
          "profile" : [
            🔗 "http://hl7.org/fhir/uv/cgm/StructureDefinition/cgm-summary-gmi"
          ]
        },
        "status" : "final",
        "category" : [
          {
            "coding" : [
              {
                "system" : "http://terminology.hl7.org/CodeSystem/observation-category",
                "code" : "laboratory"
              }
            ]
          }
        ],
        "code" : {
          "coding" : [
            {
              "system" : "http://loinc.org",
              "code" : "97506-0"
            }
          ]
        },
        "subject" : {
          🔗 "reference" : "Patient/patientExample"
        },
        "effectivePeriod" : {
          "start" : "2025-09-01",
          "end" : "2025-09-30"
        },
        "valueQuantity" : {
          "value" : 6.8,
          "unit" : "%",
          "system" : "http://unitsofmeasure.org",
          "code" : "%"
        }
      }
    },
    {
      "fullUrl" : "https://gematik.de/fhir/hddt/Observation/cgmSummaryCoefficientOfVariationExample",
      "resource" : {
        "resourceType" : "Observation",
        "id" : "cgmSummaryCoefficientOfVariationExample",
        "meta" : {
          "profile" : [
            🔗 "http://hl7.org/fhir/uv/cgm/StructureDefinition/cgm-summary-coefficient-of-variation"
          ]
        },
        "status" : "final",
        "category" : [
          {
            "coding" : [
              {
                "system" : "http://terminology.hl7.org/CodeSystem/observation-category",
                "code" : "laboratory"
              }
            ]
          }
        ],
        "code" : {
          "coding" : [
            {
              "system" : "http://loinc.org",
              "code" : "104638-2"
            }
          ]
        },
        "subject" : {
          🔗 "reference" : "Patient/patientExample"
        },
        "effectivePeriod" : {
          "start" : "2025-09-01",
          "end" : "2025-09-30"
        },
        "valueQuantity" : {
          "value" : 34,
          "unit" : "%",
          "system" : "http://unitsofmeasure.org",
          "code" : "%"
        }
      }
    },
    {
      "fullUrl" : "https://gematik.de/fhir/hddt/Observation/cgmSummaryDaysOfWearExample",
      "resource" : {
        "resourceType" : "Observation",
        "id" : "cgmSummaryDaysOfWearExample",
        "meta" : {
          "profile" : [
            🔗 "http://hl7.org/fhir/uv/cgm/StructureDefinition/cgm-summary-days-of-wear"
          ]
        },
        "status" : "final",
        "category" : [
          {
            "coding" : [
              {
                "system" : "http://terminology.hl7.org/CodeSystem/observation-category",
                "code" : "laboratory"
              }
            ]
          }
        ],
        "code" : {
          "coding" : [
            {
              "system" : "http://loinc.org",
              "code" : "104636-6"
            }
          ]
        },
        "subject" : {
          🔗 "reference" : "Patient/patientExample"
        },
        "effectivePeriod" : {
          "start" : "2025-09-01",
          "end" : "2025-09-30"
        },
        "valueQuantity" : {
          "value" : 28,
          "unit" : "days",
          "system" : "http://unitsofmeasure.org",
          "code" : "d"
        }
      }
    },
    {
      "fullUrl" : "https://gematik.de/fhir/hddt/Observation/cgmSummarySensorActivePercentageExample",
      "resource" : {
        "resourceType" : "Observation",
        "id" : "cgmSummarySensorActivePercentageExample",
        "meta" : {
          "profile" : [
            🔗 "http://hl7.org/fhir/uv/cgm/StructureDefinition/cgm-summary-sensor-active-percentage"
          ]
        },
        "status" : "final",
        "category" : [
          {
            "coding" : [
              {
                "system" : "http://terminology.hl7.org/CodeSystem/observation-category",
                "code" : "laboratory"
              }
            ]
          }
        ],
        "code" : {
          "coding" : [
            {
              "system" : "http://loinc.org",
              "code" : "104637-4"
            }
          ]
        },
        "subject" : {
          🔗 "reference" : "Patient/patientExample"
        },
        "effectivePeriod" : {
          "start" : "2025-09-01",
          "end" : "2025-09-30"
        },
        "valueQuantity" : {
          "value" : 95,
          "unit" : "%",
          "system" : "http://unitsofmeasure.org",
          "code" : "%"
        }
      }
    },
    {
      "fullUrl" : "https://gematik.de/fhir/hddt/Device/example-device-cgm",
      "resource" : {
        "resourceType" : "Device",
        "id" : "example-device-cgm",
        "definition" : {
          🔗 "reference" : "DeviceDefinition/device-definition-cgm-001"
        },
        "status" : "active",
        "manufacturer" : "Glukko Inc.",
        "expirationDate" : "2025-09-10",
        "serialNumber" : "CGM1234567890",
        "deviceName" : [
          {
            "name" : "GlukkoCGM 18",
            "type" : "user-friendly-name"
          }
        ],
        "modelNumber" : "GCGMA98765",
        "type" : {
          "coding" : [
            {
              "system" : "urn:iso:std:iso:11073:10101",
              "version" : "20250520",
              "code" : "528409",
              "display" : "MDC_DEV_SPEC_PROFILE_CGM"
            }
          ]
        }
      }
    }
  ]
}

Example OperationOutcome - Unknown Parameter

Description: Occurs a parameter that is not supported by the operation is sent in the request body.

{
  "resourceType" : "OperationOutcome",
  "id" : "HddtCgmSummaryOutcomeUnknownParam",
  "issue" : [
    {
      "severity" : "error",
      "code" : "invalid",
      "details" : {
        "coding" : [
          {
            "system" : "http://terminology.hl7.org/CodeSystem/operation-outcome",
            "code" : "MSG_PARAM_UNKNOWN"
          }
        ],
        "text" : "Unknown input parameter 'foo'."
      }
    }
  ]
}

Example OperationOutcome - No Matches

Description: While a FHIR search interaction that finds no matches returns an empty Bundle, this Operation returns an OperationOutcome.

{
  "resourceType" : "OperationOutcome",
  "id" : "HddtCgmSummaryOutcomeNoResults",
  "issue" : [
    {
      "severity" : "information",
      "code" : "not-found",
      "details" : {
        "coding" : [
          {
            "system" : "http://terminology.hl7.org/CodeSystem/operation-outcome",
            "code" : "MSG_NO_MATCH"
          }
        ],
        "text" : "No CGM summary observations found for the given effective period."
      }
    }
  ]
}

Example OperationOutcome - Invalid Format

Description: Parameters effectivePeriodStart and effectivePeriodEnd are defined to take in date as parameter type. If the requested date cannot be parsed by the server, the following OperationOutcome is returned.

{
  "resourceType" : "OperationOutcome",
  "id" : "HddtCgmSummaryOutcomeInvalid",
  "issue" : [
    {
      "severity" : "error",
      "code" : "invalid",
      "details" : {
        "coding" : [
          {
            "system" : "http://terminology.hl7.org/CodeSystem/operation-outcome",
            "code" : "MSG_PARAM_INVALID"
          }
        ],
        "text" : "Invalid date format in effectivePeriodStart."
      }
    }
  ]
}

Example OperationOutcome - Bad Syntax

Description: Appears when a request is malformed or invalid according to the FHIR specification, for example, the request body is not valid JSON or XML or required elements are missing or incorrectly formatted.

{
  "resourceType" : "OperationOutcome",
  "id" : "HddtCgmSummaryOutcomeBadSyntax",
  "issue" : [
    {
      "severity" : "error",
      "code" : "invalid",
      "details" : {
        "coding" : [
          {
            "system" : "http://terminology.hl7.org/CodeSystem/operation-outcome",
            "code" : "MSG_BAD_SYNTAX"
          }
        ],
        "text" : "The request is malformed."
      }
    }
  ]
}