@tidepool/viz
Version:
Tidepool data visualization for diabetes device data.
1 lines • 156 kB
JavaScript
(()=>{var e={16420:(e,t,a)=>{"use strict";var n=a(44906).default;Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.AggregationUtil=void 0;var i=n(a(21580)),r=n(a(84374)),u=n(a(4841)),o=n(a(46721)),l=n(a(27825)),s=n(a(66581)),d=n(a(74716)),c=n(a(70553)),f=a(11673),m=a(74501),g=a(84240),p=a(66871),v=t.AggregationUtil=(0,u.default)((function e(t){var a=this;(0,o.default)(this,e),this.init=function(e){a.dataUtil=e,a.bgBounds=l.default.get(e,"bgPrefs.bgBounds"),a.bgUnits=l.default.get(e,"bgPrefs.bgUnits"),a.timezoneName=l.default.get(e,"timePrefs.timezoneName","UTC"),a.initialActiveEndpoints=l.default.cloneDeep(a.dataUtil.activeEndpoints),a.excludedDevices=l.default.get(e,"excludedDevices",[]),c.default.registerPostProcessor("postProcessBasalAggregations",a.postProcessBasalAggregations),c.default.registerPostProcessor("postProcessBolusAggregations",a.postProcessBolusAggregations),c.default.registerPostProcessor("postProcessInsulinAggregations",a.postProcessInsulinAggregations),c.default.registerPostProcessor("postProcessCalibrationAggregations",a.postProcessCalibrationAggregations),c.default.registerPostProcessor("postProcessAutoSuspendAggregations",a.postProcessAutoSuspendAggregations),c.default.registerPostProcessor("postProcessSiteChangeAggregations",a.postProcessSiteChangeAggregations),c.default.registerPostProcessor("postProcessSMBGAggregations",a.postProcessSMBGAggregations),c.default.registerPostProcessor("postProcessDataByDateAggregations",a.postProcessDataByDateAggregations),c.default.registerPostProcessor("postProcessStatsByDateAggregations",a.postProcessStatsByDateAggregations)},this.aggregateBasals=function(e){a.dataUtil.filter.byType("basal");var t=(0,c.default)();t.dataList(!0);var n=["suspend","temp"];l.default.each(n,(function(e){return a.reduceByTag(e,"basal",t)})),t(e);var i={basal:e.post().postProcessBasalAggregations()()};return a.dataUtil.filter.byType("deviceEvent"),(t=(0,c.default)()).dataList(!0),n=["automatedSuspend"],l.default.each(n,(function(e){return a.reduceByTag(e,"deviceEvent",t)})),t(e),i.automatedSuspend=e.post().postProcessAutoSuspendAggregations()(),i},this.aggregateBoluses=function(e){a.dataUtil.filter.byType("bolus");var t=(0,c.default)();t.dataList(!0);var n=["automated","correction","extended","interrupted","manual","oneButton","override","underride","wizard"];l.default.each(n,(function(e){return a.reduceByTag(e,"bolus",t)})),t(e);var i={bolus:e.post().postProcessBolusAggregations()()};return a.dataUtil.filter.byType("insulin"),(t=(0,c.default)()).dataList(!0),n=["manual"],l.default.each(n,(function(e){return a.reduceByTag(e,"insulin",t)})),t(e),i.insulin=e.post().postProcessInsulinAggregations()(),l.default.mergeWith({},i.bolus,i.insulin,(function(e,t,a,n,i){if(l.default.isNumber(e)&&l.default.isNumber(t)){if("percentage"===a&&n.count&&i.count){var r=n.count+i.count;return(n.count*n.percentage+i.count*i.percentage)/r}return e+t}}))},this.aggregateFingersticks=function(e){a.dataUtil.filter.byType("smbg");var t=(0,c.default)();t.dataList(!0);var n=["manual","meter"];l.default.each(n,(function(e){return a.reduceByTag(e,"smbg",t)})),l.default.each(["veryLow","low","high","veryHigh"],(function(e){return a.reduceByBgClassification(e,"smbg",t)})),t(e);var i={smbg:e.post().postProcessSMBGAggregations()()};return a.dataUtil.filter.byType("deviceEvent"),(t=(0,c.default)()).dataList(!0),n=["calibration"],l.default.each(n,(function(e){return a.reduceByTag(e,"deviceEvent",t)})),t(e),i.calibration=e.post().postProcessCalibrationAggregations()(),i},this.aggregateSiteChanges=function(e){a.dataUtil.filter.byType("deviceEvent");var t=(0,c.default)();return t.dataList(!0),l.default.each(["cannulaPrime","reservoirChange","tubingPrime"],(function(e){return a.reduceByTag(e,"deviceEvent",t)})),t(e),e.post().postProcessSiteChangeAggregations()()},this.aggregateDataByDate=function(e){var t=l.default.map(a.dataUtil.types,(function(e){return e.type}));a.dataUtil.filter.byTypes(t);var n=(0,c.default)();return n.dataList(!0),n(e),e.post().postProcessDataByDateAggregations()()},this.aggregateStatsByDate=function(e){var t=(0,c.default)();return t.dataList(!0),t(e),e.post().postProcessStatsByDateAggregations()()},this.postProcessBasalAggregations=function(e){return function(){var t=a.filterByActiveRange(e()),n={};return l.default.each(t,(function(e){var t=e.value,i=t.dataList,r=t.suspend,u=t.temp;l.default.each(i,a.dataUtil.normalizeDatumOut);var o=l.default.reduce([r,u],(function(e,t){var a=t.count;return e+(void 0===a?0:a)}),0);n[e.key]={data:l.default.sortBy(i,a.dataUtil.activeTimeField),total:o,subtotals:{suspend:r.count,temp:u.count}},l.default.assign(n[e.key],(0,f.countAutomatedBasalEvents)(n[e.key])),l.default.assign(n[e.key],(0,f.countDistinctSuspends)(n[e.key])),n[e.key].total,delete n[e.key].data})),a.summarizeProcessedData(n)}},this.postProcessBolusAggregations=function(e){return function(){var t=a.filterByActiveRange(e()),n={};return l.default.each(t,(function(e){var t=e.value,a=t.automated,i=t.correction,r=t.dataList,u=t.extended,o=t.interrupted,l=t.manual,s=t.oneButton,d=t.override,c=t.underride,f=t.wizard,m=r.length-a.count;m&&(n[e.key]={total:m,subtotals:{automated:a.count,correction:i.count,extended:u.count,interrupted:o.count,manual:l.count,oneButton:s.count,override:d.count,underride:c.count,wizard:f.count}})})),a.summarizeProcessedData(n)}},this.postProcessInsulinAggregations=function(e){return function(){var t=a.filterByActiveRange(e()),n={};l.default.each(t,(function(e){var t=e.value,a=t.dataList,i=t.manual,r=a.length;r&&(n[e.key]={total:r,subtotals:{manual:i.count}})}));var i=a.dataUtil.excludeDaysWithoutBolus?l.default.keys(n).length:a.dataUtil.activeEndpoints.activeDays;return a.summarizeProcessedData(n,i)}},this.postProcessCalibrationAggregations=function(e){return function(){var t=a.filterByActiveRange(e()),n={};return l.default.each(t,(function(e){var t=e.value.calibration,a=t.count;a&&(n[e.key]={total:a,subtotals:{calibration:t.count}})})),a.summarizeProcessedData(n)}},this.postProcessAutoSuspendAggregations=function(e){return function(){var t=a.filterByActiveRange(e()),n={};return l.default.each(t,(function(e){var t=e.value.automatedSuspend,a=t.count;a&&(n[e.key]={total:a,subtotals:{automatedSuspend:t.count}})})),a.summarizeProcessedData(n)}},this.postProcessSiteChangeAggregations=function(e){return function(){var t,n=l.default.filter(l.default.cloneDeep(e()),(function(e){var t=e.value.dataList;return l.default.some(t,(function(e){return l.default.includes(["prime","reservoirChange"],e.subType)}))})),i=["cannulaPrime","reservoirChange","tubingPrime"],r={};if(n.length){var u=l.default.first(l.default.sortBy(l.default.filter(n[0].value.dataList,(function(e){return l.default.includes(["prime","reservoirChange"],e.subType)})),a.dataUtil.activeTimeField)),o=a.dataUtil.getPreviousSiteChangeDatums(u);t={},l.default.each(i,(function(e){o[e]&&(t[e]=(0,m.formatLocalizedFromUTC)(o[e][a.dataUtil.activeTimeField],a.dataUtil.timePrefs,"YYYY-MM-DD"))}))}return l.default.each(n,(function(e){var n=e.value,u=n.dataList,o=n.cannulaPrime,s=n.reservoirChange,d=n.tubingPrime,c=l.default.sortBy(u,a.dataUtil.activeTimeField);l.default.each(c,a.dataUtil.normalizeDatumOut),r[e.key]={data:c,summary:{daysSince:{}},subtotals:{cannulaPrime:o.count,reservoirChange:s.count,tubingPrime:d.count}},l.default.each(i,(function(a){if(r[e.key].subtotals[a]){if(t[a]){var n=Date.parse(e.key)-Date.parse(t[a]);r[e.key].summary.daysSince[a]=n/p.MS_IN_DAY}else r[e.key].summary.daysSince[a]=NaN;t[a]=e.key}}))})),{byDate:r}}},this.postProcessSMBGAggregations=function(e){return function(){var t=a.filterByActiveRange(e()),n={};return l.default.each(t,(function(e){var t=e.value,a=t.dataList,i=t.manual,r=t.meter,u=t.veryHigh,o=t.veryLow,l=t.high,s=t.low,d=a.length;d&&(n[e.key]={total:d,subtotals:{manual:i.count,meter:r.count,veryHigh:u.count,veryLow:o.count,high:l.count,low:s.count}})})),a.summarizeProcessedData(n)}},this.postProcessDataByDateAggregations=function(e){return function(){var t=a.filterByActiveRange(e()),n=l.default.map(t,"key"),i={},u=l.default.map(l.default.range(a.initialActiveEndpoints.days||0),(function(e,t){return d.default.utc(a.initialActiveEndpoints.range[1]).tz(a.timezoneName).subtract(t+1,"days").format("YYYY-MM-DD")}));return l.default.each(u,(function(e,u){if(l.default.includes(n,e)){var o,s=l.default.find(t,{key:e}),c=s.value.dataList;a.dataUtil.activeEndpoints={range:[d.default.utc(a.initialActiveEndpoints.range[1]).tz(a.timezoneName).subtract(u+1,"days").valueOf(),d.default.utc(a.initialActiveEndpoints.range[1]).tz(a.timezoneName).subtract(u,"days").valueOf()],days:1,activeDays:1},a.dataUtil.filter.byEndpoints(a.dataUtil.activeEndpoints.range);var f=l.default.sortBy(c,a.dataUtil.activeTimeField),m=l.default.groupBy(f,"type"),g=l.default.cloneDeep(m.basal||[]);(o=a.dataUtil.filter).bySampleIntervalRange.apply(o,(0,r.default)(a.dataUtil.cgmSampleIntervalRange||a.dataUtil.defaultCgmSampleIntervalRange));var p=a.dataUtil.filter.byType("cbg").top(1/0),v=a.dataUtil.getDeduplicatedCBGData(p);m.cbg=p,m.cbgDeduplicated=v,a.dataUtil.dimension.byType.filterAll(),a.dataUtil.dimension.bySampleInterval.filterAll();var y=l.default.filter(l.default.cloneDeep(m.deviceEvent||[]),{subType:"pumpSettingsOverride"}),h=y.length;a.dataUtil.addBasalOverlappingStart(g),a.dataUtil.addPumpSettingsOverrideOverlappingStart(y),l.default.each(m,(function(e){return l.default.each(e,(function(e){return a.dataUtil.normalizeDatumOut(e,["*"])}))})),g.length>l.default.get(m,"basal.length",0)&&(l.default.isArray(m.basal)||(m.basal=[]),m.basal.unshift(g[0])),y.length>h&&(l.default.isArray(m.deviceEvent)||(m.deviceEvent=[]),m.deviceEvent.unshift(y[0])),i[s.key]=m}})),a.dataUtil.activeEndpoints=l.default.cloneDeep(a.initialActiveEndpoints),a.dataUtil.filter.byEndpoints(a.dataUtil.activeEndpoints.range),i}},this.postProcessStatsByDateAggregations=function(e){return function(){var t=a.filterByActiveRange(e()),n=l.default.map(t,"key"),i={},r=l.default.map(l.default.range(a.initialActiveEndpoints.days||0),(function(e,t){return d.default.utc(a.initialActiveEndpoints.range[1]).tz(a.timezoneName).subtract(t+1,"days").format("YYYY-MM-DD")}));return l.default.each(r,(function(e,t){l.default.includes(n,e)&&(a.dataUtil.activeEndpoints={range:[d.default.utc(a.initialActiveEndpoints.range[1]).tz(a.timezoneName).subtract(t+1,"days").valueOf(),d.default.utc(a.initialActiveEndpoints.range[1]).tz(a.timezoneName).subtract(t,"days").valueOf()],days:1,activeDays:1},a.dataUtil.filter.byEndpoints(a.dataUtil.activeEndpoints.range),i[e]=a.dataUtil.getStats(a.dataUtil.stats))})),a.dataUtil.activeEndpoints=l.default.cloneDeep(a.initialActiveEndpoints),a.dataUtil.filter.byEndpoints(a.dataUtil.activeEndpoints.range),i}},this.filterByActiveRange=function(e){var t=(0,i.default)(a.initialActiveEndpoints.range,2),n=t[0],r=t[1],u=d.default.utc(n).tz(a.timezoneName),o=d.default.utc(r).tz(a.timezoneName);"00:00"===o.format("HH:mm")&&o.subtract(1,"day").endOf("day");var s=u.format("YYYY-MM-DD"),c=o.format("YYYY-MM-DD");return l.default.filter(l.default.cloneDeep(e),(function(e){return e.key>=s&&e.key<=c}))},this.reduceByTag=function(e,t,a){a.value(e).count(!0).filter((function(a){return a.type===t&&a.tags[e]}))},this.reduceByBgClassification=function(e,t,n){n.value(e).count(!0).filter((function(n){if(n.type!==t)return!1;var i=l.default.clone(n);return a.dataUtil.normalizeDatumBgUnits(i),(0,g.classifyBgValue)(a.bgBounds,a.bgUnits,i.value,"fiveWay")===e}))},this.summarizeProcessedData=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:a.dataUtil.activeEndpoints.activeDays,n=l.default.sumBy(l.default.values(e),(function(e){return e.total}));return{summary:{avgPerDay:n/t,total:n,subtotals:l.default.reduce(l.default.map(l.default.values(e),"subtotals"),(function(e,t){var a=l.default.keysIn(t);return l.default.each(a,(function(a){var i=l.default.get(e,[a,"count"],0)+t[a],r=i/n;e[a]={count:i,percentage:r}})),e}),{})},byDate:e}},this.log=(0,s.default)("AggregationUtil"),this.init(t)}));t.default=v},52832:(e,t,a)=>{"use strict";var n=a(44906).default;Object.defineProperty(t,"__esModule",{value:!0}),t.default=t.DataUtil=void 0;var i=n(a(79222)),r=n(a(271)),u=n(a(37055)),o=n(a(84374)),l=n(a(4841)),s=n(a(46721)),d=n(a(66581)),c=n(a(86962)),f=n(a(55812)),m=n(a(27825)),g=n(a(56427)),p=n(a(63452)),v=a(11270),y=a(32935),h=a(84240),b=a(66871),D=a(74501),T=n(a(90570)),S=n(a(16420)),I=a(80358),A=n(a(39801)),E=["bgBounds","bgClasses","bgUnits"],_=g.default.t.bind(g.default),B=t.DataUtil=(0,l.default)((function e(){var t=this,a=arguments.length>0&&void 0!==arguments[0]?arguments[0]:A.default;(0,s.default)(this,e),this.init=function(){t.startTimer("init total"),t.data=(0,c.default)([]),t.queryDataCount=0,t.defaultCgmSampleInterval=5*b.MS_IN_MIN,t.defaultCgmSampleIntervalRange=[t.defaultCgmSampleInterval,1/0],t.setCgmSampleIntervalRange(),t.buildDimensions(),t.buildFilters(),t.buildSorts(),t.initFilterChangeHandler(),t.endTimer("init total")},this.addData=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],a=arguments.length>1?arguments[1]:void 0,n=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if(t.startTimer("addData"),t.bolusDatumsByIdMap=t.bolusDatumsByIdMap||{},t.bolusToWizardIdMap=t.bolusToWizardIdMap||{},t.deviceUploadMap=t.deviceUploadMap||{},t.latestDatumByType=t.latestDatumByType||{},t.pumpSettingsDatumsByIdMap=t.pumpSettingsDatumsByIdMap||{},t.wizardDatumsByIdMap=t.wizardDatumsByIdMap||{},t.wizardToBolusIdMap=t.wizardToBolusIdMap||{},t.loopDataSetsByIdMap=t.loopDataSetsByIdMap||{},t.dexcomDataSetsByIdMap=t.dexcomDataSetsByIdMap||{},t.bolusDosingDecisionDatumsByIdMap=t.bolusDosingDecisionDatumsByIdMap||{},t.matchedDevices=t.matchedDevices||{},t.dataAnnotations=t.dataAnnotations||{},m.default.isEmpty(e)||!a)return{};t.patientId&&t.patientId!==a&&t.removeData(),t.patientId=a,t.startTimer("cloneRawData");var i=m.default.cloneDeep(e);t.endTimer("cloneRawData"),t.startTimer("normalizeDataIn"),m.default.each(i,t.normalizeDatumIn),t.endTimer("normalizeDataIn"),t.startTimer("joinWizardAndBolus"),m.default.each(i,t.joinWizardAndBolus),t.endTimer("joinWizardAndBolus"),t.startTimer("joinBolusAndDosingDecision"),m.default.each(i,t.joinBolusAndDosingDecision),t.endTimer("joinBolusAndDosingDecision"),t.startTimer("addMissingSuppressedBasals"),t.addMissingSuppressedBasals(i),t.endTimer("addMissingSuppressedBasals"),t.startTimer("filterDuplicateSMBGs"),t.filterDuplicateSMBGs(i),t.endTimer("filterDuplicateSMBGs"),t.startTimer("filterValidData"),t.clearFilters();var r=m.default.uniqBy(i,"id"),u=m.default.remove(r,(function(e){return e.reject||t.filter.byId(e.id).top(1).length}));t.endTimer("filterValidData"),t.startTimer("tagData"),m.default.each(r,t.tagDatum),t.endTimer("tagData"),t.startTimer("addValidData"),t.data.add(r),t.endTimer("addValidData"),t.log("validData",r.length,"of",i.length),u.length&&t.log("rejectedData",u),t.setMetaData(),t.endTimer("addData");var o={metaData:t.getMetaData(["bgSources","latestDatumByType","latestPumpUpload","latestTimeZone","patientId","size","queryDataCount"])};return n&&(m.default.each(r,(function(e){return t.normalizeDatumOut(e,"*")})),o.data=r),o},this.normalizeDatumIn=function(e){if("basal"===e.type&&(e.rate||"suspend"!==e.deliveryType||(e.rate=0),e.suppressed&&t.normalizeSuppressedBasal(e),m.default.isFinite(e.duration)&&m.default.includes(m.default.map(e.annotations,"code"),"basal/unknown-duration"))){var a,n=Date.parse(f.default.utc().toISOString())-Date.parse(e.time);e.duration=m.default.min([e.duration,n]),m.default.isFinite(null===(a=e.suppressed)||void 0===a?void 0:a.duration)&&(e.suppressed.duration=e.duration)}if("upload"===e.type&&("continuous"===e.dataSetType?((0,v.isLoop)(e)&&(t.loopDataSetsByIdMap[e.id]=e),(0,v.isDexcom)(e)&&(t.dexcomDataSetsByIdMap[e.id]=e),e.time||(e.time=f.default.utc().toISOString())):(0,v.isDexcom)(e)&&(t.dexcomDataSetsByIdMap[e.uploadId]=e)),e.messagetext&&(e.type="message",e.messageText=e.messagetext,e.parentMessage=e.parentmessage||null,e.time=e.timestamp),"cbg"===e.type&&!e.sampleInterval){var i,r=t.defaultCgmSampleInterval;(0,v.isLibreViewAPI)(e)?(e.annotations=e.annotations||[],e.annotations.push({code:"cbg/unknown-sample-interval"})):0===(null===(i=e.deviceId)||void 0===i?void 0:i.indexOf("AbbottFreeStyleLibre"))&&0!==e.deviceId.indexOf("AbbottFreeStyleLibre3")&&(r=15*b.MS_IN_MIN),e.sampleInterval=r}var u,o,l,s;if("dosingDecision"===e.type&&(null==(null===(u=e.requestedBolus)||void 0===u?void 0:u.normal)&&null!=(null===(o=e.requestedBolus)||void 0===o?void 0:o.amount)&&(e.requestedBolus.normal=e.requestedBolus.amount,delete e.requestedBolus.amount),!e.recommendedBolus||null!=e.recommendedBolus.amount||null==e.recommendedBolus.normal&&null==e.recommendedBolus.extended||(e.recommendedBolus.amount=(null!==(l=e.recommendedBolus.normal)&&void 0!==l?l:0)+(null!==(s=e.recommendedBolus.extended)&&void 0!==s?s:0),delete e.recommendedBolus.normal,delete e.recommendedBolus.extended,delete e.recommendedBolus.duration)),t.validateDatumIn(e),!e.reject){if(e._time=e.time,e._deviceTime=e.deviceTime||e.time,e.time=Date.parse(e.time),e.deviceTime=e.deviceTime?Date.parse(e.deviceTime):e.time,e.time>m.default.get(t.latestDatumByType,[e.type,"time"],0)&&(t.latestDatumByType[e.type]=e),"deviceEvent"===e.type&&"timeChange"===e.subType&&e.time>m.default.get(t.latestDatumByType,["timeChange","time"],0)&&(t.latestDatumByType.timeChange=e),"wizard"===e.type&&m.default.isString(e.bolus)&&(t.wizardDatumsByIdMap[e.id]=e,t.bolusToWizardIdMap[e.bolus]=e.id,t.wizardToBolusIdMap[e.id]=e.bolus),"dosingDecision"===e.type&&m.default.includes(["normalBolus","simpleBolus","watchBolus","oneButtonBolus"],e.reason)&&(t.bolusDosingDecisionDatumsByIdMap[e.id]=e),"bolus"===e.type&&(t.bolusDatumsByIdMap[e.id]=e),"pumpSettings"===e.type&&(t.pumpSettingsDatumsByIdMap[e.id]=e),!e.deviceId&&"com.apple.HealthKit"===m.default.get(e,"origin.name")){var d=["HealthKit"];m.default.get(e,"origin.payload.sourceRevision.source.name")&&d.push(m.default.get(e,"origin.payload.sourceRevision.source.name")),d.push(e.uploadId.slice(0,6)),e.deviceId=d.join(" ")}if(!e.deviceId&&m.default.get(e,"payload.transmitterId",!1)){var c=["Dexcom",e.uploadId.slice(0,6)];e.deviceId=c.join(" ")}e.deviceId&&!t.deviceUploadMap[e.deviceId]&&(t.deviceUploadMap[e.deviceId]=e.uploadId)}},this.joinWizardAndBolus=function(e){if(m.default.includes(["bolus","wizard"],e.type)){var a="wizard"===e.type,n=a?"bolus":"wizard",i=a?t.wizardToBolusIdMap:t.bolusToWizardIdMap,r=a?t.bolusDatumsByIdMap:t.wizardDatumsByIdMap;if(i[e.id]){var u=m.default.omit(r[i[e.id]],e.type);a&&e.uploadId!==u.uploadId?(e.reject=!0,e.rejectReason=["Upload ID does not match referenced bolus"]):e[n]=u}}},this.joinBolusAndDosingDecision=function(e){if("bolus"===e.type&&t.loopDataSetsByIdMap[e.uploadId]){var a=b.MS_IN_MIN;if(e.dosingDecision=m.default.find(m.default.mapValues(t.bolusDosingDecisionDatumsByIdMap),(function(t){var a=t.associations,n=void 0===a?[]:a;return m.default.some(n,{reason:"bolus",id:e.id})})),!e.dosingDecision){var n=m.default.filter(m.default.mapValues(t.bolusDosingDecisionDatumsByIdMap),(function(t){var n=t.time,i=t.associations;return!m.default.some(i,{reason:"bolus"})&&Math.abs(n-e.time)<=a})),i=m.default.orderBy(n,(function(t){var a=t.time;return Math.abs(a-e.time)}),"asc"),r=m.default.find(i,(function(t){var a;return(null===(a=t.requestedBolus)||void 0===a?void 0:a.normal)===e.normal}));e.dosingDecision=r||i[0],e.dosingDecision&&(t.bolusDosingDecisionDatumsByIdMap[e.dosingDecision.id].associations=[].concat((0,o.default)(e.dosingDecision.associations||[]),[{reason:"bolus",id:e.id}]))}if(e.dosingDecision){var u,l,s,d,c,f,g,p,v,y,h,D,T,S=null===(u=m.default.find(e.dosingDecision.associations,{reason:"pumpSettings"}))||void 0===u?void 0:u.id;e.dosingDecision.pumpSettings=t.pumpSettingsDatumsByIdMap[S],e.carbInput=null!==(l=null===(s=e.dosingDecision.originalFood)||void 0===s||null===(d=s.nutrition)||void 0===d||null===(c=d.carbohydrate)||void 0===c?void 0:c.net)&&void 0!==l?l:null===(f=e.dosingDecision.food)||void 0===f||null===(g=f.nutrition)||void 0===g||null===(p=g.carbohydrate)||void 0===p?void 0:p.net,m.default.isFinite(e.carbInput)&&(e.carbInputGeneratedFromFoodData=!0),e.bgInput=(null==e||null===(v=e.dosingDecision)||void 0===v||null===(y=v.smbg)||void 0===y?void 0:y.value)||(null===(h=m.default.last(e.dosingDecision.bgHistorical||[]))||void 0===h?void 0:h.value),e.insulinOnBoard=null===(D=e.dosingDecision.insulinOnBoard)||void 0===D?void 0:D.amount;var I=null===(T=e.dosingDecision.requestedBolus)||void 0===T?void 0:T.normal;!e.expectedNormal&&I&&e.normal!==I&&(e.expectedNormal=I)}}},this.addMissingSuppressedBasals=function(e){var a=m.default.orderBy(m.default.map(m.default.values(t.pumpSettingsDatumsByIdMap),(function(e){var t=e.activeSchedule,a=e.basalSchedules,n=e.deviceId,i=e.time;return{basalSchedule:m.default.orderBy(null==a?void 0:a[t],"start","desc"),time:i,deviceId:n}})),"time","desc"),n=[];m.default.each(e,(function(e){if(function(e){return"basal"===e.type&&!e.suppressed&&m.default.includes(["automated","temp"],e.deliveryType)&&(0,v.isTwiistLoop)(e)}(e)){var i=m.default.find(a,(function(t){return t.deviceId===e.deviceId&&t.time<=e.time})),r=null==i?void 0:i.basalSchedule;if(null==r||!r.length)return;var o=e.time+(e.duration||0),l=(e.timezoneOffset||0)*b.MS_IN_MIN,s={start:(0,D.getMsPer24)(e.time)+l,end:(0,D.getMsPer24)(o)+l};s.start<0&&(s.start+=b.MS_IN_DAY),s.end<0&&(s.end+=b.MS_IN_DAY),s.end<s.start&&(s.end+=b.MS_IN_DAY);for(var d=[],c=[],f=m.default.sortBy(r,"start"),g=0;g<f.length;g++){var p=f[g],y=f[g+1],h=p.start,T=y?y.start:b.MS_IN_DAY;if(s.start<T&&s.end>h&&d.push((0,u.default)((0,u.default)({},p),{},{segmentEnd:T,overlapStart:Math.max(s.start,h),overlapEnd:Math.min(s.end,T)})),s.end>b.MS_IN_DAY){var S=h+b.MS_IN_DAY,I=T+b.MS_IN_DAY;s.start<I&&s.end>S&&c.push((0,u.default)((0,u.default)({},p),{},{segmentEnd:I,overlapStart:Math.max(s.start,S),overlapEnd:Math.min(s.end,I)}))}}var A=[].concat(d,c);if(1===A.length){var E=A[0];e.suppressed=(0,u.default)((0,u.default)({},e),{},{id:"".concat(e.id,"_suppressed"),deliveryType:"scheduled",rate:E.rate||0})}else if(A.length>1){var _=e.duration||0,B=s.end-s.start,M=A[0],O=(M.overlapEnd-M.overlapStart)/B*_;e.duration=O,e.suppressed=(0,u.default)((0,u.default)({},e),{},{id:"".concat(e.id,"_suppressed"),deliveryType:"scheduled",rate:M.rate||0,duration:O,time:e.time});for(var U=O,L=1;L<A.length;L++){var N=A[L],w=(N.overlapEnd-N.overlapStart)/B*_,P=(0,u.default)((0,u.default)({},e),{},{id:"".concat(e.id,"_split_").concat(L),time:e.time+U,duration:w,suppressed:(0,u.default)((0,u.default)({},e),{},{id:"".concat(e.id,"_suppressed_split_").concat(L),deliveryType:"scheduled",rate:N.rate||0,duration:w,time:e.time+U})});e.deviceTime&&(P.deviceTime=e.deviceTime+U,P.suppressed.deviceTime=P.deviceTime),n.push(P),U+=w}}else t.log("Warning: No overlapping segments found for basal",e.id)}})),e.push.apply(e,n)},this.needsCarbToExchangeConversion=function(e){var t=m.default.get(e,"annotations",[]);return e.deviceId&&0===e.deviceId.indexOf("MedT-")&&"exchanges"===e.carbUnits&&m.default.isFinite(e.carbInput)&&-1===m.default.findIndex(t,{code:"medtronic/wizard/carb-to-exchange-ratio-deconverted"})},this.getDeconvertedCarbExchange=function(e){var t=e.carbInput/15;return Math.round(2*t)/2},this.tagDatum=function(e){var a,n,i,o,l,s,d=!!t.loopDataSetsByIdMap[e.uploadId],c=!!t.dexcomDataSetsByIdMap[e.uploadId];if("basal"===e.type&&(e.tags={suspend:"suspend"===e.deliveryType,temp:"temp"===e.deliveryType}),"bolus"===e.type){var f,g,p,h,D=e.wizard||(null===(f=e.dosingDecision)||void 0===f||null===(g=f.food)||void 0===g||null===(p=g.nutrition)||void 0===p||null===(h=p.carbohydrate)||void 0===h?void 0:h.net);e.tags={automated:(0,y.isAutomated)(e),correction:(0,y.isCorrection)(e),extended:(0,y.hasExtended)(e),interrupted:(0,y.isInterruptedBolus)(e),manual:!D&&!(0,y.isAutomated)(e),override:(0,y.isOverride)(e),underride:(0,y.isUnderride)(e),wizard:!!D,loop:!!t.loopDataSetsByIdMap[e.uploadId],oneButton:(0,y.isOneButton)(e)}}if("insulin"===e.type&&(e.tags={manual:!0}),"wizard"===e.type&&(e.tags={extended:(0,y.hasExtended)(e),interrupted:(0,y.isInterruptedBolus)(e),override:(0,y.isOverride)(e),underride:(0,y.isUnderride)(e)}),"smbg"===e.type&&(e.tags={manual:"manual"===e.subType||c,meter:"manual"!==e.subType&&!c}),"food"===e.type&&(e.tags={loop:d,dexcom:c,manual:c}),"deviceEvent"===e.type){var T,S,I,A,E="reservoirChange"===e.subType,_="prime"===e.subType;if(e.tags=(A={automatedSuspend:"status"===e.subType&&"suspended"===e.status&&"automatic"===(null===(T=e.reason)||void 0===T?void 0:T.suspended)&&"Auto suspend by PLGS"===(null===(S=e.payload)||void 0===S||null===(I=S.suspended)||void 0===I?void 0:I.reason),calibration:"calibration"===e.subType},(0,r.default)(A,b.SITE_CHANGE,E||_),(0,r.default)(A,b.SITE_CHANGE_RESERVOIR,E),(0,r.default)(A,b.SITE_CHANGE_CANNULA,_&&"cannula"===e.primeTarget),(0,r.default)(A,b.SITE_CHANGE_TUBING,_&&"tubing"===e.primeTarget),A),(0,v.isTwiistLoop)(e)){var B=[b.ALARM_NO_INSULIN,b.ALARM_NO_POWER,b.ALARM_OCCLUSION];e.tags=(0,u.default)((0,u.default)({},e.tags),{},(0,r.default)({},b.ALARM,"alarm"===e.subType&&m.default.includes(B,e.alarmType)),m.default.reduce(B,(function(t,a){return t[a]=e.alarmType===a,t}),{}))}}var M=[b.EVENT_PUMP_SHUTDOWN,b.EVENT_PHYSICAL_ACTIVITY,b.EVENT_HEALTH,b.EVENT_NOTES],O=(s={},(0,r.default)(s,b.EVENT_PUMP_SHUTDOWN,(0,v.isControlIQ)(e)&&m.default.some(e.annotations,{code:"pump-shutdown"})),(0,r.default)(s,b.EVENT_PHYSICAL_ACTIVITY,"physicalActivity"===e.type),(0,r.default)(s,b.EVENT_HEALTH,"reportedState"===e.type&&m.default.includes(["alcohol","cycle","hyperglycemiaSymptoms","hypoglycemiaSymptoms","illness","stress","other"],null===(a=e.states)||void 0===a||null===(n=a[0])||void 0===n?void 0:n.state)),(0,r.default)(s,b.EVENT_NOTES,"reportedState"===e.type&&(!(null===(i=e.states)||void 0===i||null===(o=i[0])||void 0===o||!o.stateOther)||(null===(l=e.notes)||void 0===l?void 0:l.length))),s),U=m.default.find(M,(function(e){return O[e]}));U&&(e.tags=(0,u.default)((0,u.default)({},e.tags||{}),{},(0,r.default)({},b.EVENT,U)))},this.validateDatumIn=function(e){var a=t.validator[e.type]||t.validator.common;m.default.isFunction(a)&&(a={validator:a});var n=[];m.default.each(m.default.values(a),(function(t,a){0!==a&&-1!==n.indexOf(!0)||n.push(t(e))})),-1===n.indexOf(!0)&&(e.reject=!0,e.rejectReason=n)},this.normalizeDatumOut=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[];if(t.returnRawData){if(e._time&&(e.time=e._time,delete e._time),e._deviceTime&&(e.deviceTime=e._deviceTime,delete e._deviceTime),delete e.tags,m.default.includes(["bolus","wizard"],e.type)){var n="wizard"===e.type?"bolus":"wizard";m.default.get(e,[n,"id"])&&(e[n]=e[n].id)}"message"===e.type&&(delete e.type,delete e.messageText,delete e.parentMessage,delete e.time)}else{var i=(t.timePrefs||{}).timezoneName,r="*"===a[0];if(t.normalizeDatumOutTime(e,a),e.uploadId&&(r||m.default.includes(a,"deviceSerialNumber"))&&(e.deviceSerialNumber=m.default.get(t.uploadMap,[e.uploadId,"deviceSerialNumber"])),e.source||(e.source=m.default.get(t.uploadMap,[e.uploadId,"source"],"Unspecified Data Source")),"basal"===e.type&&(e.normalEnd=e.normalTime+e.duration,e.subType=e.deliveryType,(r||m.default.includes(a,"annotations"))&&m.default.some(t.incompleteSuspends,(function(a){var n=a[t.activeTimeField];return e.normalTime<=n&&n<=e.normalEnd}))&&(e.annotations=e.annotations||[],e.annotations.push({code:"basal/intersects-incomplete-suspend"}),t.log("intersectsIncompleteSuspend",e.id)),e.suppressed&&(r||m.default.includes(a,"suppressed"))&&t.normalizeDatumOut(e.suppressed,a)),"cbg"!==e.type&&"smbg"!==e.type||(t.normalizeDatumBgUnits(e),(r||m.default.includes(a,"msPer24"))&&(e.msPer24=(0,D.getMsPer24)(e.normalTime,i)),(r||m.default.includes(a,"localDate"))&&(e.localDate=f.default.utc(e[t.activeTimeField]).tz(i||"UTC").format("YYYY-MM-DD"))),"pumpSettings"===e.type&&(t.normalizeDatumBgUnits(e,[],["bgSafetyLimit"]),t.normalizeDatumBgUnits(e,["bgTarget","bgTargets"],["target","range","low","high"]),t.normalizeDatumBgUnits(e,["bgTargetPreprandial","bgTargetPhysicalActivity"],["low","high"]),t.normalizeDatumBgUnits(e,["insulinSensitivity","insulinSensitivities"],["amount"]),(r||m.default.includes(a,"basalSchedules"))&&(e.basalSchedules=m.default.flatten(m.default.partition(m.default.sortBy(m.default.map(e.basalSchedules,(function(e,t){return{name:t,value:e}})),"name"),(function(e){return"standard"===e.name}))))),"wizard"===e.type&&(t.normalizeDatumBgUnits(e,[],["bgInput"]),t.normalizeDatumBgUnits(e,["bgTarget"],["target","range","low","high"]),t.normalizeDatumBgUnits(e,[],["insulinSensitivity"]),m.default.isObject(e.bolus)&&t.normalizeDatumOut(e.bolus,a),t.needsCarbToExchangeConversion(e)&&(e.carbInput=t.getDeconvertedCarbExchange(e),e.insulinCarbRatio=m.default.round(15/e.insulinCarbRatio,1),e.annotations=e.annotations||[],e.annotations.push({code:"medtronic/wizard/carb-to-exchange-ratio-deconverted"}))),"dosingDecision"===e.type&&(t.normalizeDatumBgUnits(e,["bgTargetSchedule"],["low","high"]),t.normalizeDatumBgUnits(e,["bgForecast"],["value"]),t.normalizeDatumBgUnits(e,["bgHistorical"],["value"]),t.normalizeDatumBgUnits(e,["smbg"],["value"]),m.default.isObject(e.pumpSettings)&&t.normalizeDatumOut(e.pumpSettings,a)),"bolus"===e.type&&(t.normalizeDatumBgUnits(e,[],["bgInput"]),m.default.isObject(e.wizard)&&t.normalizeDatumOut(e.wizard,a),m.default.isObject(e.dosingDecision)&&t.normalizeDatumOut(e.dosingDecision,a)),"deviceEvent"===e.type){t.normalizeDatumBgUnits(e,["bgTarget"],["low","high"]);var u="pumpSettingsOverride"===e.subType;if(m.default.isFinite(e.duration)){u&&((0,v.isTidepoolLoop)(e)||(0,v.isDIYLoop)(e))&&(e.duration=1e3*e.duration),e.normalEnd=e.normalTime+e.duration;var o=Date.parse(f.default.utc().toISOString());e.normalEnd>o&&(e.normalEnd=t.latestDiabetesDatumEnd,e.duration=e.normalEnd-e.normalTime)}else u&&m.default.isFinite(t.latestDiabetesDatumEnd)&&(e.normalEnd=t.latestDiabetesDatumEnd,e.duration=e.normalEnd-e.normalTime)}if("fill"===e.type){var l=e.normalTime+e.displayOffset*b.MS_IN_MIN,s=f.default.utc(e.normalTime).toISOString();e.normalEnd=e.normalTime+e.duration,e.msPer24=(0,D.getMsPer24)(e.normalTime,i),e.hourOfDay=e.msPer24/b.MS_IN_HOUR,e.fillDate=f.default.utc(l).toISOString().slice(0,10),e.id="fill_".concat(s.replace(/[^\w\s]|_/g,""))}t.setDataAnnotations(e)}},this.normalizeDatumOutTime=function(e){var a=(t.timePrefs||{}).timezoneName;a?(e.normalTime=e.time,e.displayOffset=-(0,D.getOffset)(e.time,a)):(null!=e.timezoneOffset&&null!=e.conversionOffset?e.normalTime=e.time+(e.timezoneOffset*b.MS_IN_MIN+e.conversionOffset):e.normalTime=m.default.isEmpty(e.deviceTime)?e.time:e.deviceTime,e.displayOffset=0,e.deviceTime&&e.normalTime!==e.deviceTime&&(e.warning="Combining `time` and `timezoneOffset` does not yield `deviceTime`."))},this.normalizeDatumBgUnits=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:[],n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:["value"],i=m.default.get(t.bgPrefs,"bgUnits");if(i&&e.units&&(e.units=m.default.isPlainObject(e.units)?(0,u.default)((0,u.default)({},e.units),{},{bg:i}):i),i===b.MGDL_UNITS){e.units&&(e.units=m.default.isPlainObject(e.units)?(0,u.default)((0,u.default)({},e.units),{},{bg:b.MGDL_UNITS}):b.MGDL_UNITS);var o=function(a){var i=a?m.default.get(e,a):e;m.default.isPlainObject(i)&&m.default.keys(i).length?m.default.each(n,(function(n){if(m.default.isNumber(i[n])){var o,l=m.default.reject([a,n],m.default.isEmpty);if(null!==(o=e.bgNormalized)&&void 0!==o&&o[l.join("|")])return;m.default.set(e,l,(0,h.convertToMGDL)(i[n])),e.bgNormalized=(0,u.default)((0,u.default)({},e.bgNormalized||{}),{},(0,r.default)({},l.join("|"),!0))}else a&&m.default.isPlainObject(i)&&m.default.each(m.default.keys(i),(function(e){var a=m.default.get(i,[e]);(m.default.isArray(a)||m.default.isPlainObject(a))&&(m.default.isPlainObject(a)&&(a=[a]),m.default.each(a,(function(e){m.default.get(e,[n])&&t.normalizeDatumBgUnits(e,[],[n])})))}))})):m.default.isArray(i)&&m.default.each(i,(function(e){t.normalizeDatumBgUnits(e,[],n)}))};a.length?m.default.each(a,o):o()}},this.normalizeSuppressedBasal=function(e){"temp"!==e.suppressed.deliveryType||e.suppressed.rate||e.suppressed.percent&&e.suppressed.suppressed&&"scheduled"===e.suppressed.suppressed.deliveryType&&e.suppressed.suppressed.rate>=0&&(e.suppressed.rate=e.suppressed.percent*e.suppressed.suppressed.rate),e.suppressed.duration=e.duration,e.suppressed.time=Date.parse(e.time),e.deviceTime&&(e.suppressed.deviceTime=Date.parse(e.deviceTime)),e.suppressed.suppressed&&t.normalizeSuppressedBasal(e.suppressed)},this.deduplicateCBGData=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[],a=t.sort.byTime(m.default.cloneDeep(e)),n=b.MS_IN_MIN/6,i=0,r=[],u=0;u<a.length;u++){var o=a[u];o.time<i||(r.push(o),i=o.time+o.sampleInterval-n)}return r},this.getDeduplicatedCBGData=m.default.memoize(this.deduplicateCBGData,(function(e){var a,n,i,r,u,o,l,s,d=null===(a=m.default.first(e))||void 0===a?void 0:a.id,c=null===(n=m.default.last(e))||void 0===n?void 0:n.id,f=(null===(i=t.bgPrefs)||void 0===i?void 0:i.bgUnits)||"unknown",g=(null===(r=t.activeEndpoints)||void 0===r||null===(u=r.range)||void 0===u?void 0:u.join(","))||"",p=(null===(o=t.activeDays)||void 0===o?void 0:o.join(""))||"",v=(null===(l=t.excludedDevices)||void 0===l?void 0:l.join(","))||"",y=(null===(s=t.cgmSampleIntervalRange)||void 0===s?void 0:s.join("-"))||"";return"".concat(d,"_")+"".concat(c,"_")+"".concat(f,"_")+"[".concat(g,"]_")+"".concat(p,"_")+"[".concat(v,"]_")+"".concat(y,"_")})),this.filterDuplicateSMBGs=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];t.startTimer("filterDuplicateSMBGs");var a=m.default.filter(e,(function(e){return"cbg"===e.type&&!e.reject})),n=m.default.filter(e,(function(e){return"smbg"===e.type&&!e.reject}));if(0===a.length||0===n.length)return t.endTimer("filterDuplicateSMBGs"),e;var i=m.default.groupBy(a,(function(e){return Math.floor(e.time/1e3)})),r=[];return m.default.each(n,(function(e){var t=Math.floor(e.time/1e3),a=[].concat((0,o.default)(i[t-1]||[]),(0,o.default)(i[t]||[]),(0,o.default)(i[t+1]||[]));m.default.some(a,(function(t){return!(Math.abs(e.time-t.time)>b.DUPLICATE_SMBG_TIME_TOLERANCE_MS)&&e.value===t.value}))&&r.push(e)})),r.length>b.DUPLICATE_SMBG_COUNT_THRESHOLD&&(t.log("Filtering ".concat(r.length," duplicate SMBGs that match CGM values")),m.default.each(r,(function(e){e.reject=!0,e.rejectReason=["SMBG duplicates CGM value within time tolerance"]}))),t.endTimer("filterDuplicateSMBGs"),e},this.removeData=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null;e?(t.log("Removing data where",e),m.default.isPlainObject(e)&&(e=m.default.matches(e)),t.clearFilters(),t.data.remove(e)):(t.log("Reinitializing"),t.bolusDatumsByIdMap={},t.bolusToWizardIdMap={},t.deviceUploadMap={},t.latestDatumByType={},t.pumpSettingsDatumsByIdMap={},t.wizardDatumsByIdMap={},t.wizardToBolusIdMap={},t.loopDataSetsByIdMap={},t.dexcomDataSetsByIdMap={},t.bolusDosingDecisionDatumsByIdMap={},t.clearMatchedDevices(),t.clearDataAnnotations(),delete t.bgSources,delete t.bgPrefs,delete t.timePrefs,delete t.latestPumpUpload,delete t.devices,delete t.excludedDevices,t.init())},this.updateDatum=function(e){t.log("Updating Datum",e),t.clearFilters();var a=t.filter.byId(e.id).top(1)[0],n=m.default.cloneDeep(e);t.normalizeDatumIn(n),a&&!n.reject&&m.default.assign(a,n),t.dimension.byId.filterAll(),t.buildByTimeDimension();var i=m.default.cloneDeep(a);return t.normalizeDatumOut(i,"*"),{datum:i}},this.buildByDayOfWeekDimension=function(){t.dimension.byDayOfWeek=t.data.dimension((function(e){return f.default.utc(e[t.activeTimeField||"time"]).tz(m.default.get(t,"timePrefs.timezoneName","UTC")).day()}))},this.buildByDateDimension=function(){t.dimension.byDate=t.data.dimension((function(e){return f.default.utc(e[t.activeTimeField||"time"]).tz(m.default.get(t,"timePrefs.timezoneName","UTC")).format("YYYY-MM-DD")}))},this.buildByIdDimension=function(){t.dimension.byId=t.data.dimension((function(e){return e.id}))},this.buildBySubTypeDimension=function(){t.dimension.bySubType=t.data.dimension((function(e){return e.subType||""}))},this.buildByTimeDimension=function(){t.dimension.byTime=t.data.dimension((function(e){return e[t.activeTimeField||"time"]}))},this.buildByTypeDimension=function(){t.dimension.byType=t.data.dimension((function(e){return e.type}))},this.buildByDeviceIdDimension=function(){t.dimension.byDeviceId=t.data.dimension((function(e){return e.deviceId||""}))},this.buildBySampleIntervalDimension=function(){t.dimension.bySampleInterval=t.data.dimension((function(e){return e.sampleInterval||""}))},this.buildDimensions=function(){t.startTimer("buildDimensions"),t.dimension={},t.buildByDayOfWeekDimension(),t.buildByDateDimension(),t.buildByIdDimension(),t.buildBySubTypeDimension(),t.buildByTimeDimension(),t.buildByTypeDimension(),t.buildByDeviceIdDimension(),t.buildBySampleIntervalDimension(),t.endTimer("buildDimensions")},this.buildFilters=function(){t.startTimer("buildFilters"),t.filter={},t.filter.byActiveDays=function(e){return t.dimension.byDayOfWeek.filterFunction((function(t){return m.default.includes(e,t)}))},t.filter.byEndpoints=function(e){return t.dimension.byTime.filterRange(e)},t.filter.byDeviceIds=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return t.dimension.byDeviceId.filterFunction((function(t){return!m.default.includes(e,t)}))},t.filter.byId=function(e){return t.dimension.byId.filterExact(e)},t.filter.bySampleIntervalRange=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCgmSampleIntervalRange[0],a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:t.defaultCgmSampleIntervalRange[1];return e===a?t.dimension.bySampleInterval.filterExact(e):t.dimension.bySampleInterval.filterRange([e,a])},t.filter.bySubType=function(e){return t.activeSubType=e,t.dimension.bySubType.filterExact(e)},t.filter.byType=function(e){return t.activeType=e,t.dimension.byType.filterExact(e)},t.filter.byTypes=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];return delete t.activeType,t.dimension.byType.filterFunction((function(t){return m.default.includes(e,t)}))},t.endTimer("buildFilters")},this.buildSorts=function(){t.startTimer("buildSorts"),t.sort={},t.sort.byTime=function(e){var a=m.default.get(t,"timePrefs.timezoneAware")?"time":"deviceTime";return e.sort((function(e,t){return e[a]-t[a]}))},t.endTimer("buildSorts")},this.initFilterChangeHandler=function(){t.data.onChange((function(e){"filtered"===e&&t.matchDevices&&m.default.includes(["basal","bolus","smbg","cbg","wizard","food"],t.dimension.byType.currentFilter())&&m.default.each(t.dimension.byDeviceId.top(1/0),(function(e){var a=e.deviceId,n=e.origin;if(a){var i=(null==n?void 0:n.version)||"0.0",r=(null==n?void 0:n.name)||a,u="".concat(r,"_").concat(i);t.matchedDevices[a]||(t.matchedDevices[a]={}),t.matchedDevices[a][u]||(t.matchedDevices[a][u]=!0)}}))}))},this.clearFilters=function(){t.startTimer("clearFilters"),t.dimension.byTime.filterAll(),t.dimension.byType.filterAll(),t.dimension.bySubType.filterAll(),t.dimension.byId.filterAll(),t.dimension.byDayOfWeek.filterAll(),t.dimension.byDeviceId.filterAll(),t.dimension.bySampleInterval.filterAll(),t.endTimer("clearFilters")},this.setBgSources=function(e){t.startTimer("setBgSources"),t.clearFilters();var a={cbg:t.filter.byType(b.CGM_DATA_KEY).top(1/0).length>0,smbg:t.filter.byType(b.BGM_DATA_KEY).top(1/0).length>0,current:m.default.includes([b.CGM_DATA_KEY,b.BGM_DATA_KEY],e)?e:void 0};a.current||(m.default.get(t,"bgSources.current")?a.current=t.bgSources.current:a.cbg?a.current=b.CGM_DATA_KEY:a.smbg&&(a.current=b.BGM_DATA_KEY)),t.bgSources=a,t.endTimer("setBgSources")},this.setCgmSampleIntervalRange=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:t.defaultCgmSampleIntervalRange;t.cgmSampleIntervalRange=m.default.compact(e)},this.setLatestPumpUpload=function(){t.startTimer("setLatestPumpUpload"),t.clearFilters();var e,a=t.sort.byTime(t.filter.byType("upload").top(1/0)),n=null,i=0;if(m.default.each(["basal","bolus"],(function(e){var a=t.latestDatumByType[e];a&&a.time>i&&(n=a,i=a.time)})),n&&n.uploadId&&(e=m.default.find(a,{uploadId:n.uploadId})),e=e?m.default.cloneDeep(e):m.default.cloneDeep((0,v.getLatestPumpUpload)(a))){var r=m.default.get(t.uploadMap[e.uploadId],"source","").toLowerCase(),u="carelink"===r?"medtronic":r,o=m.default.get(e,"deviceModel",""),l=m.default.filter(t.pumpSettingsDatumsByIdMap,(function(t){return t.uploadId===e.uploadId})),s="continuous"===e.dataSetType;if(n&&s)l=m.default.filter(l,(function(e){return e.time<=n.time}));else{var d=15*b.MS_IN_MIN;l=m.default.filter(l,(function(t){return t.time<=e.time+d}))}var c=m.default.maxBy(l,"time");if(!c){var f=t.latestDatumByType.pumpSettings;f&&f.uploadId===e.uploadId&&(s&&(!n||null==f.time||f.time<=n.time)||!s&&(null==f.time||f.time<=e.time))&&(c=f)}var g=(c=m.default.cloneDeep(c))||e,p=(0,v.isAutomatedBasalDevice)(u,g,o),y=(0,v.isAutomatedBolusDevice)(u,g),h=(0,v.isSettingsOverrideDevice)(u,g);if(c&&p){var D=t.sort.byTime(t.filter.byType("basal").top(1/0));c.lastManualBasalSchedule=(0,v.getLastManualBasalSchedule)(D)}t.latestPumpUpload={deviceModel:o,isAutomatedBasalDevice:p,isAutomatedBolusDevice:y,isSettingsOverrideDevice:h,manufacturer:u,settings:c}}t.endTimer("setLatestPumpUpload")},this.setUploadMap=function(){t.startTimer("setUploadMap"),t.clearFilters();var e=t.filter.byType("upload").top(1/0),a=t.filter.byType("pumpSettings").top(1/0);t.uploadMap={},m.default.each(e,(function(e){var n=m.default.find(a,{uploadId:e.uploadId}),i="Unknown";m.default.get(e,"source")?i=e.source:m.default.isArray(e.deviceManufacturers)&&!m.default.isEmpty(e.deviceManufacturers)?i="Medtronic"===e.deviceManufacturers[0]&&m.default.filter(a,{uploadId:e.uploadId,source:"carelink"}).length?"carelink":"Sequel"===e.deviceManufacturers[0]&&m.default.filter(a,{uploadId:e.uploadId,model:"twiist"}).length?b.TWIIST_LOOP.toLowerCase():e.deviceManufacturers[0]:(0,v.isTidepoolLoop)(n)?i=b.TIDEPOOL_LOOP.toLowerCase():(0,v.isDIYLoop)(n)?i=b.DIY_LOOP.toLowerCase():(0,v.isTwiistLoop)(e)&&(i=b.TWIIST_LOOP.toLowerCase()),t.uploadMap[e.uploadId]={source:i,deviceSerialNumber:e.deviceSerialNumber||e.serialNumber||(null==n?void 0:n.serialNumber)||"Unknown"}})),t.endTimer("setUploadMap")},this.setIncompleteSuspends=function(){t.startTimer("setIncompleteSuspends"),t.clearFilters();var e=t.sort.byTime(t.filter.byType("deviceEvent").top(1/0));t.incompleteSuspends=m.default.filter(e,(function(e){var t=e.annotations,a=void 0===t?[]:t;return m.default.find(a,{code:"status/incomplete-tuple"})})),t.endTimer("setIncompleteSuspends")},this.setSize=function(){t.startTimer("setSize"),t.size=t.data.size(),t.endTimer("setSize")},this.setLatestDiabetesDatumEnd=function(){var e=m.default.maxBy(m.default.filter(m.default.values(t.latestDatumByType),(function(e){var t=e.type;return m.default.includes(b.DIABETES_DATA_TYPES,t)})),(function(e){return e.duration?e.time+e.duration:e.time}));t.latestDiabetesDatumEnd=e?e.time+(e.duration||0):null},this.setLatestTimeZone=function(){var e,a,n=t.latestDatumByType.upload,i=t.latestDatumByType.timeChange,r=m.default.maxBy(m.default.filter(m.default.values(t.latestDatumByType||{}),(function(e){var t=e.timezoneOffset,a=e.type;return m.default.includes([].concat((0,o.default)(b.DIABETES_DATA_TYPES),["dosingDecision"]),a)&&m.default.isFinite(t)})),"time"),u=function(e,n,i){try{p.default.checkTimezoneName(e);var r=f.default.utc(n.time).tz(e).format();(a={name:e,type:n.type,time:n.time}).message=_("Defaulting to display in the timezone of most recent {{type}} at {{localizedTime}}",{localizedTime:r,type:i||n.type})}catch(a){t.log("Invalid latest time zone:",e)}};if(r){var l=r.timezone;if(!l){var s=-1===Math.sign(r.timezoneOffset)?"+":"-",d=f.default.duration(Math.abs(r.timezoneOffset),"minutes"),c=d.hours();d.minutes()>=30&&(c+=1),l="Etc/GMT".concat(s).concat(c)}u(l,r),m.default.isEmpty(null==n?void 0:n.timezone)||(f.default.utc(r.time).tz(n.timezone).utcOffset()===r.timezoneOffset||n.time>=r.time)&&u(n.timezone,n)}else null!=i&&null!==(e=i.to)&&void 0!==e&&e.timeZoneName?u(i.to.timeZoneName,i,"time change"):m.default.isEmpty(null==n?void 0:n.timezone)||u(n.timezone,n);t.latestTimeZone=a},this.setDevices=function(){t.startTimer("setDevices");var e=m.default.keyBy(t.sort.byTime(t.filter.byType("upload").top(1/0)),"uploadId");t.devices=m.default.reduce(t.deviceUploadMap,(function(t,a,n){var i=e[a],r={id:n};if(i){var u="continuous"===m.default.get(i,"dataSetType"),o=m.default.get(i,"deviceManufacturers.0",""),l=m.default.get(i,"deviceModel",""),s=n;(o||l)&&(s="Dexcom"===o&&u?_("Dexcom API"):"Abbott"===o&&u?_("FreeStyle Libre (from LibreView)"):"Sequel"===o&&u?_("twiist"):m.default.reject([o,l],m.default.isEmpty).join(" ")),0===n.indexOf("tandemCIQ")&&(s=[s,"(".concat(_("Control-IQ"),")")].join(" ")),r={bgm:m.default.includes(i.deviceTags,"bgm"),cgm:m.default.includes(i.deviceTags,"cgm"),oneMinCgmSampleInterval:(0,v.isOneMinCGMSampleIntervalDevice)(i),id:n,label:s,pump:m.default.includes(i.deviceTags,"insulin-pump"),serialNumber:i.deviceSerialNumber}}return t.push(r),t}),[]);var a=m.default.keys(t.deviceUploadMap),n=t.excludedDevices||[];m.default.each(t.devices,(function(e){if(0===e.id.indexOf("tandemCIQ")){var t=e.id.replace("tandemCIQ","tandem");m.default.includes(a,t)&&n.push(t)}})),t.setExcludedDevices(m.default.uniq(n)),t.endTimer("setDevices")},this.setDataAnnotations=function(e){var a;t.trackDataAnnotations&&null!==(a=e.annotations)&&void 0!==a&&a.length&&m.default.each(e.annotations,(function(e){t.dataAnnotations[e.code]||(t.dataAnnotations[e.code]=e)}))},this.setMetaData=function(){t.startTimer("setMetaData"),t.setSize(),t.bgPrefs||t.setBgPrefs(),t.setBgSources(),t.timePrefs||t.setTimePrefs(),t.setEndpoints(),t.setActiveDays(),t.setTypes(),t.setUploadMap(),t.setDevices(),t.setLatestPumpUpload(),t.setIncompleteSuspends(),t.setLatestDiabetesDatumEnd(),t.setLatestTimeZone(),t.endTimer("setMetaData")},this.setEndpoints=function(e){var a=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0;if(t.startTimer("setEndpoints"),t.endpoints={current:{range:[0,1/0]}},e){var i=t.timePrefs.timezoneName,r=f.default.utc(e[1]).diff(f.default.utc(e[0]))/b.MS_IN_DAY;if(t.endpoints.current={range:m.default.map(e,(function(e){return f.default.utc(e).valueOf()})),days:r,activeDays:r},a>0&&(t.endpoints.next={range:[t.endpoints.current.range[1],f.default.utc(e[1]).add(a,"days").valueOf()],days:a,activeDays:a},i)){var u=f.default.utc(t.endpoints.next.range[0]).tz(i).isDST(),o=f.default.utc(t.endpoints.next.range[1]).tz(i).isDST();if(u!==o){var l=o?-b.MS_IN_HOUR:b.MS_IN_HOUR;t.endpoints.next.range[1]=t.endpoints.next.range[1]+l}}if(n>0&&(t.endpoints.prev={range:[f.default.utc(e[0]).subtract(n,"days").valueOf(),t.endpoints.current.range[0]],days:n,activeDays:n},i)){var s=f.default.utc(t.endpoints.prev.range[0]).tz(i).isDST();if(s!==f.default.utc(t.endpoints.prev.range[1]).tz(i).isDST()){var d=s?-b.MS_IN_HOUR:b.MS_IN_HOUR;t.endpoints.prev.range[0]=t.endpoints.prev.range[0]+d}}}t.endTimer("setEndpoints")},this.setActiveDays=function(e){t.startTimer("setActiveDays"),t.activeDays=e||[0,1,2,3,4,5,6],m.default.each(m.default.keys(t.endpoints),(function(e){t.endpoints[e].days&&(t.log("this.endpoints[range].days",t.endpoints[e].days),t.endpoints[e].activeDays=m.default.filter(m.default.reduce([t.endpoints[e].range[0]].concat((0,o.default)(new Array(Math.round(t.endpoints[e].days)-1))),(function(e,a,n){var i;if(0===n)i=f.default.utc(a).tz(m.default.get(t,"timePrefs.timezoneName","UTC")).day();else{var r=e[n-1]+1;i=r>6?r-7:r}return e.push(i),e}),[]),(function(e){return m.default.includes(t.activeDays,e)})).length)})),t.endTimer("setActiveDays")},this.setStats=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:[];t.stats=m.default.isString(e)?m.default.map(e.split(","),m.default.trim):e},this.setTypes=function(e){if(t.startTimer("setTypes"),t.types=m.default.isArray(e)?e:[],m.default.isPlainObject(e))t.types=m.default.map(e,(function(e,t){return(0,u.default)({type:t},e)}));else if("*"===e){var a=t.dimension.byType.group();t.types=m.default.map(a.all(),(function(e){return{type:e.key,select:"*",sort:"".concat(t.activeTimeField,",asc")}})),a.dispose()}t.types.length&&(t.queryDataCount+=1),t.endTimer("setTypes")},this.setTimePrefs=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.startTimer("setTimePrefs");var a=e.timezoneAware,n=void 0!==a&&a,i=e.timezoneName||void 0;n&&(i=(0,D.getTimezoneFromTimePrefs)(e));var r=i!==m.default.get(t,"timePrefs.timezoneName"),u=n!==m.default.get(t,"timePrefs.timezoneAware");t.timePrefs={timezoneAware:n,timezoneName:i};var o=t.activeTimeField;t.activeTimeField=n?"time":"deviceTime";var l=t.activeTimeField!==o,s=r||u||l,d=u||l;(r||u||l)&&t.buildByDateDimension(),s&&t.buildByDayOfWeekDimension(),d&&t.buildByTimeDimension(),t.endTimer("setTimePrefs")},this.setBgPrefs=function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};t.startTimer("setBgPrefs");var a=e.bgBounds,n=void 0===a?b.DEFAULT_BG_BOUNDS[b.MGDL_UNITS]:a,r=e.bgClasses,o=void 0===r?{}:r,l=e.bgUnits,s=void 0===l?b.MGDL_UNITS:l,d=(0,i.default)(e,E);m.default.defaults(o,{"very-low":{boundary:b.DEFAULT_BG_BOUNDS[s].veryLowThreshold},low:{boundary:b.DEFAULT_BG_BOUNDS[s].targetLowerBound},target:{boundary:b.DEFAULT_BG_BOUNDS[s].targetUpperBound},high:{boundary:b.DEFAULT_BG_BOUNDS[s].veryHighThreshold}}),t.bgPrefs=(0,u.default)({bgBounds:n,bgClasses:o,bgUnits:s},d),t.endTimer("setBgPrefs")},th