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) 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:
Manufacturers of Device Data Recorders that support the MIV Continuous 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 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:
/metadata endpoint.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).
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
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.
Profile: Observation – Continuous Glucose Measurement
This structure is derived from Observation
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
|---|---|---|---|---|
![]() |
C | 0..* | Observation | Chunk of continuous glucose measurements 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 | Status of the continuous glucose measurements chunk Binding: ObservationStatus (required): Codes providing the status of an observation. |
![]() ![]() |
Σ | 1..1 | CodeableConcept | Type of continuous glucose measurement Binding: ValueSet – Continuous Glucose Measurement from LOINC (required): Specifies the type of continuous glucose measurement using codes from the ValueSet for CGM measurements. |
![]() ![]() |
Σ | 1..1 | Period | Time interval of CGM measurements chunk |
![]() ![]() ![]() |
ΣC | 1..1 | dateTime | Starting time with inclusive boundary |
![]() ![]() ![]() |
ΣC | 1..1 | dateTime | End time with inclusive boundary, if not ongoing |
![]() ![]() |
SΣC | 0..1 | SampledData | Series of glucose measurements |
![]() ![]() ![]() |
Σ | 1..1 | SimpleQuantity(4.0.1) | Zero value and units |
![]() ![]() ![]() ![]() |
Σ | 0..1 | string | Unit of continuous glucose measurement |
![]() ![]() ![]() ![]() |
ΣC | 1..1 | uri | System that defines coded unit form Fixed Value: http://unitsofmeasure.org |
![]() ![]() ![]() ![]() |
Σ | 1..1 | code | UCUM code for unit of measurements Binding: UCUMCodes (required): Defines the measurement unit for continuous glucose values using UCUM codes. |
![]() ![]() ![]() |
Σ | 1..1 | decimal | Number of milliseconds between samples |
![]() ![]() ![]() |
Σ | 1..1 | positiveInt | Number of sample points at each time point |
![]() ![]() ![]() |
1..1 | string | Decimal values with spaces, or "E" | "U" | "L" | |
![]() ![]() |
C | 0..1 | CodeableConcept | Why the result is missing Binding: DataAbsentReason (extensible): Codes specifying why the result (Observation.value[x]) is missing. |
![]() ![]() |
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 | |
| Definition | An Observation representing a continuous glucose measurement (CGM) series over a defined effective period, captured as SampledData from a personal health device. |
| Short | Chunk 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. |
| Short | Status of the continuous glucose measurements chunk |
| 4. Observation.code | |
| Short | Type of continuous glucose measurement |
| Binding | The 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. |
| Short | Time interval of CGM measurements chunk |
| Control | 1..? |
| Type | Period, dateTime, Timing, instant |
| [x] Note | SeeChoice of Data Typesfor further information about how to use [x] |
| 8. Observation.effective[x].start | |
| Control | 1..? |
| 10. Observation.effective[x].end | |
| Control | 1..? |
| 12. Observation.value[x] | |
| Short | Series of glucose measurements |
| Type | SampledData, dateTime, boolean, string, Quantity, Period, Ratio, integer, time, Range, CodeableConcept |
| [x] Note | SeeChoice of Data Typesfor further information about how to use [x] |
| Must Support | true |
| 14. Observation.value[x].origin | |
| 16. Observation.value[x].origin.unit | |
| Definition | The unit of measurement used for all data in |
| Short | Unit of continuous glucose measurement |
| 18. Observation.value[x].origin.system | |
| Control | 1..? |
| Fixed Value | http://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 |
| Short | UCUM code for unit of measurements |
| Control | 1..? |
| Binding | The 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 | |
| Control | 1..? |
| 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 |
| 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. |
| 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.
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._
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.
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.
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"
}
}
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.
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)."
}
]
}
]
}
Request: POST /Observation/_search
Headers:
Content-Type: application/jsonAccept: application/jsonBody:
{
"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"
}
}
]
}
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.
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:
Profile: Bundle – HDDT CGM Summary Report
This structure is derived from Bundle
| Name | Flags | Card. | Type | Description & Constraints Filter: ![]() ![]() |
|---|---|---|---|---|
![]() |
0..* | Bundle | Contains a collection of resources | |
![]() ![]() |
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 | |
![]() ![]() |
1..* | BackboneElement | Entry in the bundle - will have a resource or information | |
![]() ![]() ![]() |
0..1 | Observations with their related Device and DeviceMetric information | ||
![]() ![]() ![]() ![]() |
Observation(CGMSummaryObservation | CGMSummaryMeanGlucoseMassPerVolume | CGMSummaryMeanGlucoseMolesPerVolume | CGMSummaryTimesInRanges | CGMSummaryGMI | CGMSummaryCoefficientOfVariation | CGMSummaryDaysOfWear | CGMSummarySensorActivePercentage) | |||
![]() ![]() ![]() ![]() |
Device(HddtPersonalHealthDevice) | |||
Documentation for this format | ||||
The Observation profile for the CGM summary report is defined by HL7: StructureDefinition-cgm-summary
$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. |
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.
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"
}
]
}
}
}
]
}
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'."
}
}
]
}
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."
}
}
]
}
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."
}
}
]
}
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."
}
}
]
}