| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485 |
- var getTime = require('../medtronic-clock');
- function bgTargetsLookup (inputs, profile) {
- return bound_target_range(lookup(inputs, profile));
- }
- function lookup (inputs, profile) {
- var bgtargets_data = inputs.targets;
- var temptargets_data = inputs.temptargets;
- var now = new Date();
-
- //bgtargets_data.targets.sort(function (a, b) { return a.offset > b.offset });
- var bgTargets = bgtargets_data.targets[bgtargets_data.targets.length - 1];
-
- for (var i = 0; i < bgtargets_data.targets.length - 1; i++) {
- if ((now >= getTime(bgtargets_data.targets[i].offset)) && (now < getTime(bgtargets_data.targets[i + 1].offset))) {
- bgTargets = bgtargets_data.targets[i];
- break;
- }
- }
- if (profile.target_bg) {
- bgTargets.low = profile.target_bg;
- }
- bgTargets.high = bgTargets.low;
- var tempTargets = bgTargets;
- // sort tempTargets by date so we can process most recent first
- try {
- temptargets_data.sort(function (a, b) { return new Date(b.created_at) - new Date(a.created_at) });
- } catch (e) {
- console.error("No temptargets found.");
- }
- //console.error(temptargets_data);
- //console.error(now);
- for (i = 0; i < temptargets_data.length; i++) {
- var start = new Date(temptargets_data[i].created_at);
- //console.error(start);
- var expires = new Date(start.getTime() + temptargets_data[i].duration * 60 * 1000);
- //console.error(expires);
- if (now >= start && temptargets_data[i].duration === 0) {
- // cancel temp targets
- //console.error(temptargets_data[i]);
- tempTargets = bgTargets;
- break;
- } else if (! temptargets_data[i].targetBottom || ! temptargets_data[i].targetTop) {
- console.error("eventualBG target range invalid: " + temptargets_data[i].targetBottom + "-" + temptargets_data[i].targetTop);
- break;
- } else if (now >= start && now < expires ) {
- //console.error(temptargets_data[i]);
- tempTargets.high = temptargets_data[i].targetTop;
- tempTargets.low = temptargets_data[i].targetBottom;
- tempTargets.temptargetSet = true;
- break;
- }
- }
- bgTargets = tempTargets;
- //console.error(bgTargets);
- return bgTargets;
- }
- function bound_target_range (target) {
- // if targets are < 20, assume for safety that they're intended to be mmol/L, and convert to mg/dL
- if ( target.high < 20 ) { target.high = target.high * 18; }
- if ( target.low < 20 ) { target.low = target.low * 18; }
- // hard-code lower bounds for min_bg and max_bg in case pump is set too low, or units are wrong
- target.max_bg = Math.max(80, target.high);
- target.min_bg = Math.max(80, target.low);
- // hard-code upper bound for min_bg in case pump is set too high
- target.min_bg = Math.min(200, target.min_bg);
- target.max_bg = Math.min(200, target.max_bg);
- return target
- }
- bgTargetsLookup.bgTargetsLookup = bgTargetsLookup;
- bgTargetsLookup.lookup = lookup;
- bgTargetsLookup.bound_target_range = bound_target_range;
- exports = module.exports = bgTargetsLookup;
|