Out of Range Values

Blood glucose meters, ketone meters and Continuous Glucose Monitors have a range within which they can measure levels. When a reading falls outside of this range, we need a mechanism to show that we have received a reading, but that it is out of range.

This is done by creating a cbg, smbg or bloodKetone reading with a value that is 1 unit over (for a high reading) or 1 unit below (for a low reading) the range threshold, and then annotating the reading.

For example, for a low CGM reading for a device that displays in mg/dL with a low threshold of 40 mg/dL:

{
  "type": "cbg",
  "units": "mg/dL",
  "value": 39,
  "clockDriftOffset": 0,
  "conversionOffset": 0,
  "deviceId": "DevId0987654321",
  "deviceTime": "2016-06-13T19:05:43",
  "guid": "cf64b6f6-54af-4e8b-a432-08d53c2484d4",
  "id": "da34f6f278984ae385c91cac6b91eff7",
  "time": "2016-06-14T02:05:43.959Z",
  "timezoneOffset": -420,
  "uploadId": "SampleUploadId",
  "annotations": [{
    "code": "bg/out-of-range",
    "value": "low",
    "threshold": 40,
  }]
}

Unlike all of the other data model types, the out-of-range annotation does not currently include a field for units. Because of this, when annotating cbg or smbg readings, the threshold should always be in mg/dL, even when the device displays readings in mmol/L. Although this an unfortunate oversight, the reason for this is that many devices store readings in mg/dL, even if they display readings in mmol/L. Even the example below is contrived, as we have not actually come across a device that does this.

For bloodKetone readings, the threshold should be a value measured in mmol/L.
We acknowledge that this is inconvenient and inconsistent with the rest of our data model, and we hope to address it at some stage in the future. We intend to address this by adding a units field, similar to the field used in the cbg, smbg and bloodKetone data types.

For example, for a high CGM reading for a device that displays in mmol/L with a high threshold of 23.0 mmol/L:

{
  "type": "cbg",
  "units": "mmol/L",
  "value": 23.035604162838963,
  "clockDriftOffset": 0,
  "conversionOffset": 0,
  "deviceId": "DevId0987654321",
  "deviceTime": "2016-06-13T19:05:43",
  "guid": "cf64b6f6-54af-4e8b-a432-08d53c2484d4",
  "id": "da34f6f278984ae385c91cac6b91eff7",
  "time": "2016-06-14T02:05:43.959Z",
  "timezoneOffset": -420,
  "uploadId": "SampleUploadId",
  "annotations": [{
    "code": "bg/out-of-range",
    "value": "high",
    "threshold": 414,
  }]
}

If the device (or the manufacturer) does not provide the exact threshold levels, then the threshold field should not be provided at all, and an additional [datatype]/unknown-value annotation should be provided. This is the case in our current Abbott Precision Xtra driver for ketone readings:

{
  "type": "bloodKetone",
  "units": "mmol/L",
  "value": 10.0,
  "clockDriftOffset": 0,
  "conversionOffset": 0,
  "deviceId": "DevId0987654321",
  "deviceTime": "2016-06-13T19:05:43",
  "guid": "ae40651d-b8e7-428e-840f-bbb3e1132569",
  "id": "55346384504b4b76b24c60a236448012",
  "time": "2016-06-14T02:05:43.500Z",
  "timezoneOffset": -420,
  "uploadId": "SampleUploadId",
  "annotations": [{
      "code": "ketone/out-of-range",
      "value": "high"
    },
    {
      "code": "ketone/unknown-value"
    }
  ]
}

In this instance, because the threshold was not known, we used a value that we knew was out of the meter's range.