{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Out of Range Values","llmstxt":{"hide":true}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"out-of-range-values","__idx":0},"children":["Out of Range Values"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"overview","__idx":1},"children":["Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["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 an out of range reading. This is done by creating a CBG, SMBG or blood ketone reading with a value that is 1 unit over or below the range threshold, and then annotating the reading."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For example, for a low CGM reading for a device that displays in mg/dL with a low threshold of 40 mg/dL:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","data-title":"Sample Low CGM Reading","header":{"title":"Sample Low CGM Reading","controls":{"copy":{}}},"source":"{\n  \"type\": \"cbg\",\n  \"units\": \"mg/dL\",\n  \"value\": 39,\n  \"trendRate\": -2.2,\n  \"trendRateUnits\": \"mg/dL/minute\",\n  \"sampleInterval\": 300000,\n  \"clockDriftOffset\": 0,\n  \"conversionOffset\": 0,\n  \"deviceId\": \"DevId0987654321\",\n  \"deviceTime\": \"2016-06-13T19:05:43\",\n  \"guid\": \"cf64b6f6-54af-4e8b-a432-08d53c2484d4\",\n  \"id\": \"da34f6f278984ae385c91cac6b91eff7\",\n  \"time\": \"2016-06-14T02:05:43.959Z\",\n  \"timezoneOffset\": -420,\n  \"uploadId\": \"SampleUploadId\",\n  \"annotations\": [\n    {\n      \"code\": \"bg/out-of-range\",\n      \"value\": \"low\",\n      \"threshold\": 40,\n    }\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"out-of-range-annotation-units","__idx":2},"children":["Out Of Range Annotation: Units"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Unlike all 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 ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["always"]}," be in mg/dL, even when the device displays readings in mmol/L. Although an unfortunate oversight, the reason for this is that all devices (that Tidepool knows of) store readings in mg/dL, even if they display in mmol/L."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For blood ketone 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 hope to address it in the future by adding a units field, similar to the field used in the CBG, SMBG and blood ketone data types."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["For example, for a high CGM reading for a device that displays in mmol/L with a high threshold of 23.0 mmol/L:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","data-title":"Sample High CGM Reading","header":{"title":"Sample High CGM Reading","controls":{"copy":{}}},"source":"{\n  \"type\": \"cbg\",\n  \"units\": \"mmol/L\",\n  \"value\": 23.035604162838963,\n  \"trendRate\": -0.4,\n  \"trendRateUnits\": \"mmol/L/minute\",\n  \"sampleInterval\": 300000,\n  \"clockDriftOffset\": 0,\n  \"conversionOffset\": 0,\n  \"deviceId\": \"DevId0987654321\",\n  \"deviceTime\": \"2016-06-13T19:05:43\",\n  \"guid\": \"cf64b6f6-54af-4e8b-a432-08d53c2484d4\",\n  \"id\": \"da34f6f278984ae385c91cac6b91eff7\",\n  \"time\": \"2016-06-14T02:05:43.959Z\",\n  \"timezoneOffset\": -420,\n  \"uploadId\": \"SampleUploadId\",\n  \"annotations\": [\n    {\n      \"code\": \"bg/out-of-range\",\n      \"value\": \"high\",\n      \"threshold\": 414,\n    }\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"range-threshold-levels","__idx":3},"children":["Range Threshold Levels"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["If the device (or manufacturer) does not provide the exact threshold levels, then the threshold field should ",{"$$mdtype":"Tag","name":"em","attributes":{},"children":["not"]}," be provided, and an additional ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["[datatype]/unknown-value"]}," annotation should be provided. This is the case in our current Abbott Precision Xtra driver for ketone readings:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","data-title":"Sample Unknown Value","header":{"title":"Sample Unknown Value","controls":{"copy":{}}},"source":"{\n  \"type\": \"bloodKetone\",\n  \"units\": \"mmol/L\",\n  \"value\": 10.0,\n  \"clockDriftOffset\": 0,\n  \"conversionOffset\": 0,\n  \"deviceId\": \"DevId0987654321\",\n  \"deviceTime\": \"2016-06-13T19:05:43\",\n  \"guid\": \"ae40651d-b8e7-428e-840f-bbb3e1132569\",\n  \"id\": \"55346384504b4b76b24c60a236448012\",\n  \"time\": \"2016-06-14T02:05:43.500Z\",\n  \"timezoneOffset\": -420,\n  \"uploadId\": \"SampleUploadId\",\n  \"annotations\": [\n    {\n      \"code\": \"ketone/out-of-range\",\n      \"value\": \"high\"\n    },\n    {\n      \"code\": \"ketone/unknown-value\"\n    }\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In this instance, because the threshold was unknown, we used a value that we knew was out of the meter's range."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"keep-reading","__idx":4},"children":["Keep Reading"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/device-data/data-types/blood-ketones"},"children":["Blood Ketones"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/device-data/data-types/cbg"},"children":["Continuous Blood Glucose (CBG)"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/device-data/data-types/cgm-settings"},"children":["CGM Settings"]}]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/device-data/data-types/smbg"},"children":["Self-Monitored Glucose (SMBG)"]}]}]}]},"headings":[{"value":"Out of Range Values","id":"out-of-range-values","depth":1},{"value":"Overview","id":"overview","depth":2},{"value":"Out Of Range Annotation: Units","id":"out-of-range-annotation-units","depth":2},{"value":"Range Threshold Levels","id":"range-threshold-levels","depth":2},{"value":"Keep Reading","id":"keep-reading","depth":2}],"frontmatter":{"seo":{"title":"Out of Range Values"}},"lastModified":"2025-09-04T14:19:18.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/device-data/oor-values","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}