-
Notifications
You must be signed in to change notification settings - Fork 1
/
util.js
74 lines (67 loc) · 1.77 KB
/
util.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import moment from 'moment';
import _ from 'lodash';
const MS_PER_DAY = moment.duration({ days: 1 }).asMilliseconds();
const GLUCOSE_MM = 18.01559;
function translateBasal(basal) {
return {
eventType: 'Temp Basal',
timestamp: basal.time,
rate: basal.rate,
duration: moment.duration(basal.duration).asMinutes(),
};
}
function translateBolus(bolus) {
return {
eventType: 'Bolus',
timestamp: bolus.time,
amount: bolus.normal,
};
}
function translateWizard(wizard) {
return {
// _type vs eventType here because it allows for carb input
// without needing an insulin bolus (since tidepool's data model)
// has the bolus separate and it's less effort to try and reassemble
// them here - the bolus gets picked up separately
_type: 'Bolus Wizard',
timestamp: wizard.time,
carbs: wizard.carbInput,
};
}
function getAverageISF(insulinSensitivity) {
let totalIsf = 0;
_.forEach(insulinSensitivity, (isf, i, arr) => {
let end;
if (i < arr.length - 1) {
end = arr[i + 1].start;
} else {
end = MS_PER_DAY;
}
const dur = moment.duration(end - isf.start).asMilliseconds();
totalIsf += dur * isf.amount;
});
const avgIsf = totalIsf / MS_PER_DAY * GLUCOSE_MM;
return avgIsf;
}
function getAverageCarbRatio(carbRatio) {
let totalCarbRatio = 0;
_.forEach(carbRatio, (cr, i, arr) => {
let end;
if (i < arr.length - 1) {
end = arr[i + 1].start;
} else {
end = MS_PER_DAY;
}
const dur = moment.duration(end - cr.start).asMilliseconds();
totalCarbRatio += dur * cr.amount;
});
const avgCarbRatio = totalCarbRatio / MS_PER_DAY;
return avgCarbRatio;
}
export default {
translateBasal,
translateBolus,
translateWizard,
getAverageCarbRatio,
getAverageISF,
};