Insulet OmniPod
Checklist for Insulin Pump Implementation
(Key:
[x]
available in data protocol/documented in spec and implemented[-]
available in data protocol/documented in spec but not yet implemented[?]
unknown whether available in data protocol/documented in spec; not yet implemented*[ ]
TODO: needs implementation![ ]
unavailable in data protocol and/or not documented in spec and not yet implemented)
Required if Present
Basals
[x]
scheduled basal[x]
basal rate intervals with a start time, duration, and rate delivered[ ]
name of basal schedule on each scheduled basal rate interval[?]
if basal schedule is a single (flat) rate all day, pump records a new basal rate interval every midnight
[x]
manual temp basal[x]
basal rate intervals with a start time, duration, and rate delivered[x]
object representing suppressed scheduled basal for each segment of the basal schedule that the temp basal intersects
[x]
percentage temp basal[x]
basal rate intervals with a start time, duration, percent[x]
rate provided directly OR[ ]
rate computed from percent x suppressed.rate
[x]
object representing suppressed scheduled basal for each segment of the basal schedule that the temp basal intersects
[x]
"suspended" basals (see status - suspends & resumes below)[x]
basal interval with a start time and duration but no rate (b/c suspended)[x]
object representing suppressed scheduled basal for each segment of the basal schedule that the suspension of insulin delivery intersects
[x]
final (most recent) basal[x]
basal rate interval with a start time, duration "guessed" from settings, rate delivered, and an annotation re: the "guessed" duration OR[ ]
basal rate interval with a start time and rate, no (= zero) duration
Device-specific? (Add any device-specific notes/additions here.)
Boluses
[x]
normal bolus[x]
amount of insulin delivered[x]
amount of insulin delivery programmed (if differs from actual delivery, in case of bolus interruption, cancellation, etc.)
[x]
extended bolus[x]
amount of insulin delivered[x]
duration of insulin delivery[x]
amount of insulin delivery programmed (if differs from actual delivery, in case of bolus interruption, cancellation, etc.)[x]
duration of insulin delivery programmed (if differs from actual duration, in case of bolus interruption, cancellation, etc.)*[-]
extended bolus that crosses midnight is split into two records
[x]
combo/dual bolus[x]
amount of insulin delivered - immediate (normal)[x]
amount of insulin delivered - extended[x]
duration of extended insulin delivery[x]
amount of immediate insulin delivery programmed (if differs from actual delivery, in case of bolus interruption, cancellation, etc.)[x]
amount of extended insulin delivery programmed (if differs from actual delivery, in case of bolus interruption, cancellation, etc.)[x]
duration of extended insulin delivery programmed (if differs from actual duration, in case of bolus interruption, cancellation, etc.)*[-]
extended portion of combo bolus that crosses midnight is split into two records
- bolus cancellations/interruptions
[x]
represented by a separate event in the device's data log OR[ ]
result in modifications to a bolus event in the device's data log
[x]
link to "wizard"/calculator entry (via log entry ID or similar)
No Tidepool data model yet:
- bolus cancellations/interruptions
[ ]
agent/reason for bolus cancellation
Device-specific? (Add any device-specific notes/additions here.)
CBG
(See the CGM checklist instead.)
Device Events
- alarms:
[x]
low insulin[x]
no insulin[x]
needed to infer a suspend (stoppage of all insulin delivery)
[ ]
low power[ ]
no power[ ]
needed to infer a suspend (stoppage of all insulin delivery)
[x]
occlusion[x]
needed to infer a suspend (stoppage of all insulin delivery)
[ ]
no delivery[ ]
needed to infer a suspend (stoppage of all insulin delivery)
[x]
auto-off[x]
needed to infer a suspend (stoppage of all insulin delivery)
[ ]
over limit (i.e., max bolus exceeded through override)[x]
other alarm types (details to be provided inpayload
object)
[ ]
prime events[ ]
prime target = tubing[ ]
prime target = cannula[ ]
prime targets not differentiated[ ]
prime volume in units of insulin
[x]
reservoir change (or reservoir rewind)[ ]
needed to infer a suspend (stoppage of all insulin delivery)
[x]
status events (i.e., suspend & resume)[ ]
suspensions of insulin delivery are represented as (interval) events with a duration OR[x]
suspensions of insulin delivery are represented as pairs of point-in-time events: a suspension and a resumption[ ]
reason/agent of suspension (automatic
ormanual
)[ ]
reason/agent of resumption (automatic
ormanual
)
- calibrations: see the CGM checklist instead
[x]
time changes (presence of which is also in the BtUTC section below)[x]
device display timefrom
(before change) andto
(result of change)[x]
agent of change (automatic
ormanual
)[ ]
timezone[ ]
reason for change (read from device)
Device-specific? (Add any device-specific notes/additions here.)
NB: Some OmniPod alarms are not "history" events with the log index necessary for bootstrapping to UTC. If one of these alarms fails the backup bootstrapping method (employed for events with no log index), we just drop it from the upload. (And if we succeed at "guessing" a time
value for one of these using the backuup bootstrapping method, we keep it but annotate it with the uncertain-timestamp
code.)
SMBG
[x]
blood glucose value[x]
subType (linked
ormanual
)[ ]
units of value (read from device, not hard-coded)[x]
out-of-range values (LO or HI)[x]
out-of-range value thresholds (e.g., often 20 for low and 600 for high on BGMs)
No Tidepool data model yet:
[-]
meal tag (i.e., pre- or post-meal)[-]
other/freeform tags[-]
categorization of value according to BG target(s) from settings
Device-specific? (Add any device-specific notes/additions here.)
Settings
[x]
basal schedules[x]
name of basal schedule OR[ ]
name of settings profile[x]
each schedule as a set of objects each with a rate and a start time
[x]
name of currently active basal schedule[x]
units of all blood glucose-related fields (read from device, not hard-coded)[ ]
units of all carb-related fields (read from device, not hard-coded)[x]
carb ratio(s)[ ]
name of settings profile[x]
(one or more) set(s) of objects each with a ratio (amount) and a start time
[x]
insulin sensitivity factor(s)[ ]
name of settings profile[x]
(one or more) set(s) of objects each with an amount and a start time
[x]
blood glucose target(s)[ ]
name of settings profile[x]
(one or more) set(s) of objects each with a target and a start time- target shape:
[ ]
shape{low: 80, high: 120}
OR[ ]
shape{target: 100}
OR[ ]
shape{target: 100, range: 20}
OR[x]
shape{target: 100, high: 120}
- basal features:
[x]
temp basal type (manual
orpercentage
)[x]
max basal (as a u/hr rate)
- bolus features:
[x]
bolus "wizard"/calculator enabled[x]
extended boluses enabled[x]
max bolus
[x]
insulin action time[x]
display BG units
Settings history:
[ ]
device stores all changes to settings OR[x]
device only returns current settings at time of upload
No Tidepool data model yet:
[-]
low insulin alert threshold- auto-off:
[-]
enabled[-]
threshold
[-]
language- reminders:
[-]
BG reminder[ ]
bolus reminder
[-]
alert settings (volume or vibration-only; whether enabled)- bolus features:
[-]
bolus increment for non-"quick"/manual boluses[-]
min BG to allow calculation of bolus delivery[-]
reverse correction enabled- "quick"/manual bolus:
[ ]
enabled[ ]
increment
[ ]
clock display preference (12h vs 24h format)
Device-specific? (Add any device-specific notes/additions here.)
[-]
threshold for pod expiration alerts
Wizard
[x]
recommended bolus dose[x]
recommendation for carbohydrates[x]
recommendation for correction (calculation from BG input)- net recommendation
[ ]
net recommendation provided directly in data OR[ ]
net recommendation is justrecommended.carb
+recommended.correction
OR[ ]
method for calculating net recommendation documented in data spec OR[x]
method for calculating net recommendation reverse-engineered from pump manuals/test data
[x]
input blood glucose value[x]
carbohydrate input in grams[x]
insulin on board[x]
insulin-to-carb ratio[x]
insulin sensitivity factor (with units)[x]
blood glucose target[ ]
shape{low: 80, high: 120}
OR[ ]
shape{target: 100}
OR[ ]
shape{target: 100, range: 20}
OR[x]
shape{target: 100, high: 120}
[ ]
units of BG input and related fields (read from device, not hard-coded; related fields arebgInput
,bgTarget
,insulinSensitivityFactor
)[ ]
link to bolus delivered as a result of wizard (via log entry ID or similar)
Device-specific? (Add any device-specific notes/additions here.)
The OmniPod represents programmed and actual delivered bolus amounts in terms of for-carb and for-correction buckets too, not just the suggestions. This is somewhat odd, and we don't do anything with the info (other than total up the two for programmed and delivered insulin amounts).
"Bootstrapping" to UTC
[x]
index[ ]
UTC timestamp (Hey, one can dream!) OR[x]
internal timestamp or persistent log index (across device communication sessions) to order all pump events (regardless of type), independent of device display time OR[ ]
ephemeral log index (does not persist across device communication sessions) to order all pump events (regardless of type), independent of device display time
[x]
date & time settings changes[x]
usecommon.checkDeviceTime(currentDeviceTime, timezone, cb)
to check against server time
Device-specific? (Add any device-specific notes/additions here.)
No Tidepool Data Model Yet
NB: You can and should add to this section if there are other data types documented in the device's data protocol specification but not part of Tidepool's data model (yet).
[ ]
activity/exercise[ ]
food (e.g., from a food database built into the pump)[ ]
notes/other events
Tidepool ingestion API
Choose one of the following:
[x]
legacy "jellyfish" ingestion API[ ]
platform ingestion API
Known implementation issues/TODOs
Use this space to describe device-specific known issues or implementation TODOs not contained in the above datatype-specific sections.
*[ ]
The method for checking the PDM version for compatibility with the driver/spec should be double-checked; in at least once case a user's upload has failed due to version mismatch, but the version check may not be implemented exactly to spec.*[ ]
Implement use ofCARRY_OVER_FLAG
andNEW_DAY_FLAG
to handle event such as extended boluses (but not limited to those; a full search for potentially affected types should be performed) that are split across midnight but should ideally be only one event according to the Tidepool data model. Remove unnecessary annotation on recombined parts of bolus event split across midnight once these events are being processed to spec rather than by inference.*[ ]
Consider usingIN_PROGRESS_FLAG
to discards events in progress at time of upload or ensure that they are being handled properly given that they are still in progress (and may not be fulfilled as programmed).[x]
Audit whereERROR
-flagged events are being found and handled correctly.*[ ]
RemovescheduleName
from allscheduled
basal events since the schedule name is always the name of the active schedule at time of upload, which means it may almost always be incorrect for retrospective data.*[ ]
Handle BG-related fields inpumpSettings
(and possiblywizard
events) properly for users withmmol/L
-unit OmniPod systems.*[ ]
Handle the BtUTC edge case that affects OmniPod users (living in Daylight Savings-observing timezones) who have large gaps in data crossing a DST changeover.